PageSourceSearch

https://omron.dk/assets/application-2f745a4cbb90afbb07b089b3edd922364329cfc3ea0a776ae501b0709e2a1e94.js

js omron.dk collected 2026-10-06 02:51:43 UTC 2,249,624 bytes, 55,273 lines download raw bytes

vendor: 2,700 bytes, lines 1-62
1"use strict";
2(() => {
3  var __create = Object.create;
4  var __defProp = Object.defineProperty;
5  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6  var __getOwnPropNames = Object.getOwnPropertyNames;
7  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
8  var __getProtoOf = Object.getPrototypeOf;
9  var __hasOwnProp = Object.prototype.hasOwnProperty;
10  var __propIsEnum = Object.prototype.propertyIsEnumerable;
11  var __pow = Math.pow;
12  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
13  var __spreadValues = (a, b) => {
14    for (var prop in b || (b = {}))
15      if (__hasOwnProp.call(b, prop))
16        __defNormalProp(a, prop, b[prop]);
17    if (__getOwnPropSymbols)
18      for (var prop of __getOwnPropSymbols(b)) {
19        if (__propIsEnum.call(b, prop))
20          __defNormalProp(a, prop, b[prop]);
21      }
22    return a;
23  };
24  var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
25    get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
26  }) : x)(function(x) {
27    if (typeof require !== "undefined") return require.apply(this, arguments);
28    throw Error('Dynamic require of "' + x + '" is not supported');
29  });
30  var __esm = (fn, res, err) => function __init() {
31    if (err) throw err[0];
32    try {
33      return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
34    } catch (e) {
35      throw err = [e], e;
36    }
37  };
38  var __commonJS = (cb, mod) => function __require2() {
39    try {
40      return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
41    } catch (e) {
42      throw mod = 0, e;
43    }
44  };
45  var __copyProps = (to, from, except, desc) => {
46    if (from && typeof from === "object" || typeof from === "function") {
47      for (let key of __getOwnPropNames(from))
48        if (!__hasOwnProp.call(to, key) && key !== except)
49          __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
50    }
51    return to;
52  };
53  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
54    // If the importer is in node compatibility mode or this is not an ESM
55    // file that has been converted to a CommonJS file using a Babel-
56    // compatible transform (i.e. "__esModule" has not been set), then set
57    // "default" to the CommonJS "module.exports" for node compatibility.
58    isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
59    mod
60  ));
61
62  
vendor: 3,956 bytes, lines 62-164
62// node_modules/base64-js/index.js
63  var require_base64_js = __commonJS({
64    "node_modules/base64-js/index.js"(exports) {
65      "use strict";
66      init_esbuild_shims();
67      exports.byteLength = byteLength;
68      exports.toByteArray = toByteArray;
69      exports.fromByteArray = fromByteArray;
70      var lookup = [];
71      var revLookup = [];
72      var Arr = typeof Uint8Array !== "undefined" ? Uint8Array : Array;
73      var code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
74      for (i = 0, len = code.length; i < len; ++i) {
75        lookup[i] = code[i];
76        revLookup[code.charCodeAt(i)] = i;
77      }
78      var i;
79      var len;
80      revLookup["-".charCodeAt(0)] = 62;
81      revLookup["_".charCodeAt(0)] = 63;
82      function getLens(b64) {
83        var len2 = b64.length;
84        if (len2 % 4 > 0) {
85          throw new Error("Invalid string. Length must be a multiple of 4");
86        }
87        var validLen = b64.indexOf("=");
88        if (validLen === -1) validLen = len2;
89        var placeHoldersLen = validLen === len2 ? 0 : 4 - validLen % 4;
90        return [validLen, placeHoldersLen];
91      }
92      function byteLength(b64) {
93        var lens = getLens(b64);
94        var validLen = lens[0];
95        var placeHoldersLen = lens[1];
96        return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;
97      }
98      function _byteLength(b64, validLen, placeHoldersLen) {
99        return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;
100      }
101      function toByteArray(b64) {
102        var tmp;
103        var lens = getLens(b64);
104        var validLen = lens[0];
105        var placeHoldersLen = lens[1];
106        var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen));
107        var curByte = 0;
108        var len2 = placeHoldersLen > 0 ? validLen - 4 : validLen;
109        var i2;
110        for (i2 = 0; i2 < len2; i2 += 4) {
111          tmp = revLookup[b64.charCodeAt(i2)] << 18 | revLookup[b64.charCodeAt(i2 + 1)] << 12 | revLookup[b64.charCodeAt(i2 + 2)] << 6 | revLookup[b64.charCodeAt(i2 + 3)];
112          arr[curByte++] = tmp >> 16 & 255;
113          arr[curByte++] = tmp >> 8 & 255;
114          arr[curByte++] = tmp & 255;
115        }
116        if (placeHoldersLen === 2) {
117          tmp = revLookup[b64.charCodeAt(i2)] << 2 | revLookup[b64.charCodeAt(i2 + 1)] >> 4;
118          arr[curByte++] = tmp & 255;
119        }
120        if (placeHoldersLen === 1) {
121          tmp = revLookup[b64.charCodeAt(i2)] << 10 | revLookup[b64.charCodeAt(i2 + 1)] << 4 | revLookup[b64.charCodeAt(i2 + 2)] >> 2;
122          arr[curByte++] = tmp >> 8 & 255;
123          arr[curByte++] = tmp & 255;
124        }
125        return arr;
126      }
127      function tripletToBase64(num) {
128        return lookup[num >> 18 & 63] + lookup[num >> 12 & 63] + lookup[num >> 6 & 63] + lookup[num & 63];
129      }
130      function encodeChunk(uint8, start, end) {
131        var tmp;
132        var output = [];
133        for (var i2 = start; i2 < end; i2 += 3) {
134          tmp = (uint8[i2] << 16 & 16711680) + (uint8[i2 + 1] << 8 & 65280) + (uint8[i2 + 2] & 255);
135          output.push(tripletToBase64(tmp));
136        }
137        return output.join("");
138      }
139      function fromByteArray(uint8) {
140        var tmp;
141        var len2 = uint8.length;
142        var extraBytes = len2 % 3;
143        var parts = [];
144        var maxChunkLength = 16383;
145        for (var i2 = 0, len22 = len2 - extraBytes; i2 < len22; i2 += maxChunkLength) {
146          parts.push(encodeChunk(uint8, i2, i2 + maxChunkLength > len22 ? len22 : i2 + maxChunkLength));
147        }
148        if (extraBytes === 1) {
149          tmp = uint8[len2 - 1];
150          parts.push(
151            lookup[tmp >> 2] + lookup[tmp << 4 & 63] + "=="
152          );
153        } else if (extraBytes === 2) {
154          tmp = (uint8[len2 - 2] << 8) + uint8[len2 - 1];
155          parts.push(
156            lookup[tmp >> 10] + lookup[tmp >> 4 & 63] + lookup[tmp << 2 & 63] + "="
157          );
158        }
159        return parts.join("");
160      }
161    }
162  });
163
164  
vendor: 2,698 bytes, lines 164-248
164// node_modules/ieee754/index.js
165  var require_ieee754 = __commonJS({
166    "node_modules/ieee754/index.js"(exports) {
167      init_esbuild_shims();
168      exports.read = function(buffer, offset, isLE, mLen, nBytes) {
169        var e, m;
170        var eLen = nBytes * 8 - mLen - 1;
171        var eMax = (1 << eLen) - 1;
172        var eBias = eMax >> 1;
173        var nBits = -7;
174        var i = isLE ? nBytes - 1 : 0;
175        var d = isLE ? -1 : 1;
176        var s = buffer[offset + i];
177        i += d;
178        e = s & (1 << -nBits) - 1;
179        s >>= -nBits;
180        nBits += eLen;
181        for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {
182        }
183        m = e & (1 << -nBits) - 1;
184        e >>= -nBits;
185        nBits += mLen;
186        for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {
187        }
188        if (e === 0) {
189          e = 1 - eBias;
190        } else if (e === eMax) {
191          return m ? NaN : (s ? -1 : 1) * Infinity;
192        } else {
193          m = m + Math.pow(2, mLen);
194          e = e - eBias;
195        }
196        return (s ? -1 : 1) * m * Math.pow(2, e - mLen);
197      };
198      exports.write = function(buffer, value, offset, isLE, mLen, nBytes) {
199        var e, m, c;
200        var eLen = nBytes * 8 - mLen - 1;
201        var eMax = (1 << eLen) - 1;
202        var eBias = eMax >> 1;
203        var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0;
204        var i = isLE ? 0 : nBytes - 1;
205        var d = isLE ? 1 : -1;
206        var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;
207        value = Math.abs(value);
208        if (isNaN(value) || value === Infinity) {
209          m = isNaN(value) ? 1 : 0;
210          e = eMax;
211        } else {
212          e = Math.floor(Math.log(value) / Math.LN2);
213          if (value * (c = Math.pow(2, -e)) < 1) {
214            e--;
215            c *= 2;
216          }
217          if (e + eBias >= 1) {
218            value += rt / c;
219          } else {
220            value += rt * Math.pow(2, 1 - eBias);
221          }
222          if (value * c >= 2) {
223            e++;
224            c /= 2;
225          }
226          if (e + eBias >= eMax) {
227            m = 0;
228            e = eMax;
229          } else if (e + eBias >= 1) {
230            m = (value * c - 1) * Math.pow(2, mLen);
231            e = e + eBias;
232          } else {
233            m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
234            e = 0;
235          }
236        }
237        for (; mLen >= 8; buffer[offset + i] = m & 255, i += d, m /= 256, mLen -= 8) {
238        }
239        e = e << mLen | m;
240        eLen += mLen;
241        for (; eLen > 0; buffer[offset + i] = e & 255, i += d, e /= 256, eLen -= 8) {
242        }
243        buffer[offset + i - d] |= s * 128;
244      };
245    }
246  });
247
248  
vendor: 60,607 bytes, lines 248-1851
248// node_modules/buffer/index.js
249  var require_buffer = __commonJS({
250    "node_modules/buffer/index.js"(exports) {
251      "use strict";
252      init_esbuild_shims();
253      var base64 = require_base64_js();
254      var ieee754 = require_ieee754();
255      var customInspectSymbol = typeof Symbol === "function" && typeof Symbol["for"] === "function" ? Symbol["for"]("nodejs.util.inspect.custom") : null;
256      exports.Buffer = Buffer3;
257      exports.SlowBuffer = SlowBuffer;
258      exports.INSPECT_MAX_BYTES = 50;
259      var K_MAX_LENGTH = 2147483647;
260      exports.kMaxLength = K_MAX_LENGTH;
261      Buffer3.TYPED_ARRAY_SUPPORT = typedArraySupport();
262      if (!Buffer3.TYPED_ARRAY_SUPPORT && typeof console !== "undefined" && typeof console.error === "function") {
263        console.error(
264          "This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."
265        );
266      }
267      function typedArraySupport() {
268        try {
269          const arr = new Uint8Array(1);
270          const proto = { foo: function() {
271            return 42;
272          } };
273          Object.setPrototypeOf(proto, Uint8Array.prototype);
274          Object.setPrototypeOf(arr, proto);
275          return arr.foo() === 42;
276        } catch (e) {
277          return false;
278        }
279      }
280      Object.defineProperty(Buffer3.prototype, "parent", {
281        enumerable: true,
282        get: function() {
283          if (!Buffer3.isBuffer(this)) return void 0;
284          return this.buffer;
285        }
286      });
287      Object.defineProperty(Buffer3.prototype, "offset", {
288        enumerable: true,
289        get: function() {
290          if (!Buffer3.isBuffer(this)) return void 0;
291          return this.byteOffset;
292        }
293      });
294      function createBuffer(length) {
295        if (length > K_MAX_LENGTH) {
296          throw new RangeError('The value "' + length + '" is invalid for option "size"');
297        }
298        const buf = new Uint8Array(length);
299        Object.setPrototypeOf(buf, Buffer3.prototype);
300        return buf;
301      }
302      function Buffer3(arg, encodingOrOffset, length) {
303        if (typeof arg === "number") {
304          if (typeof encodingOrOffset === "string") {
305            throw new TypeError(
306              'The "string" argument must be of type string. Received type number'
307            );
308          }
309          return allocUnsafe(arg);
310        }
311        return from(arg, encodingOrOffset, length);
312      }
313      Buffer3.poolSize = 8192;
314      function from(value, encodingOrOffset, length) {
315        if (typeof value === "string") {
316          return fromString(value, encodingOrOffset);
317        }
318        if (ArrayBuffer.isView(value)) {
319          return fromArrayView(value);
320        }
321        if (value == null) {
322          throw new TypeError(
323            "The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof value
324          );
325        }
326        if (isInstance(value, ArrayBuffer) || value && isInstance(value.buffer, ArrayBuffer)) {
327          return fromArrayBuffer(value, encodingOrOffset, length);
328        }
329        if (typeof SharedArrayBuffer !== "undefined" && (isInstance(value, SharedArrayBuffer) || value && isInstance(value.buffer, SharedArrayBuffer))) {
330          return fromArrayBuffer(value, encodingOrOffset, length);
331        }
332        if (typeof value === "number") {
333          throw new TypeError(
334            'The "value" argument must not be of type number. Received type number'
335          );
336        }
337        const valueOf = value.valueOf && value.valueOf();
338        if (valueOf != null && valueOf !== value) {
339          return Buffer3.from(valueOf, encodingOrOffset, length);
340        }
341        const b = fromObject(value);
342        if (b) return b;
343        if (typeof Symbol !== "undefined" && Symbol.toPrimitive != null && typeof value[Symbol.toPrimitive] === "function") {
344          return Buffer3.from(value[Symbol.toPrimitive]("string"), encodingOrOffset, length);
345        }
346        throw new TypeError(
347          "The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof value
348        );
349      }
350      Buffer3.from = function(value, encodingOrOffset, length) {
351        return from(value, encodingOrOffset, length);
352      };
353      Object.setPrototypeOf(Buffer3.prototype, Uint8Array.prototype);
354      Object.setPrototypeOf(Buffer3, Uint8Array);
355      function assertSize(size) {
356        if (typeof size !== "number") {
357          throw new TypeError('"size" argument must be of type number');
358        } else if (size < 0) {
359          throw new RangeError('The value "' + size + '" is invalid for option "size"');
360        }
361      }
362      function alloc(size, fill, encoding) {
363        assertSize(size);
364        if (size <= 0) {
365          return createBuffer(size);
366        }
367        if (fill !== void 0) {
368          return typeof encoding === "string" ? createBuffer(size).fill(fill, encoding) : createBuffer(size).fill(fill);
369        }
370        return createBuffer(size);
371      }
372      Buffer3.alloc = function(size, fill, encoding) {
373        return alloc(size, fill, encoding);
374      };
375      function allocUnsafe(size) {
376        assertSize(size);
377        return createBuffer(size < 0 ? 0 : checked(size) | 0);
378      }
379      Buffer3.allocUnsafe = function(size) {
380        return allocUnsafe(size);
381      };
382      Buffer3.allocUnsafeSlow = function(size) {
383        return allocUnsafe(size);
384      };
385      function fromString(string, encoding) {
386        if (typeof encoding !== "string" || encoding === "") {
387          encoding = "utf8";
388        }
389        if (!Buffer3.isEncoding(encoding)) {
390          throw new TypeError("Unknown encoding: " + encoding);
391        }
392        const length = byteLength(string, encoding) | 0;
393        let buf = createBuffer(length);
394        const actual = buf.write(string, encoding);
395        if (actual !== length) {
396          buf = buf.slice(0, actual);
397        }
398        return buf;
399      }
400      function fromArrayLike(array) {
401        const length = array.length < 0 ? 0 : checked(array.length) | 0;
402        const buf = createBuffer(length);
403        for (let i = 0; i < length; i += 1) {
404          buf[i] = array[i] & 255;
405        }
406        return buf;
407      }
408      function fromArrayView(arrayView) {
409        if (isInstance(arrayView, Uint8Array)) {
410          const copy = new Uint8Array(arrayView);
411          return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength);
412        }
413        return fromArrayLike(arrayView);
414      }
415      function fromArrayBuffer(array, byteOffset, length) {
416        if (byteOffset < 0 || array.byteLength < byteOffset) {
417          throw new RangeError('"offset" is outside of buffer bounds');
418        }
419        if (array.byteLength < byteOffset + (length || 0)) {
420          throw new RangeError('"length" is outside of buffer bounds');
421        }
422        let buf;
423        if (byteOffset === void 0 && length === void 0) {
424          buf = new Uint8Array(array);
425        } else if (length === void 0) {
426          buf = new Uint8Array(array, byteOffset);
427        } else {
428          buf = new Uint8Array(array, byteOffset, length);
429        }
430        Object.setPrototypeOf(buf, Buffer3.prototype);
431        return buf;
432      }
433      function fromObject(obj) {
434        if (Buffer3.isBuffer(obj)) {
435          const len = checked(obj.length) | 0;
436          const buf = createBuffer(len);
437          if (buf.length === 0) {
438            return buf;
439          }
440          obj.copy(buf, 0, 0, len);
441          return buf;
442        }
443        if (obj.length !== void 0) {
444          if (typeof obj.length !== "number" || numberIsNaN(obj.length)) {
445            return createBuffer(0);
446          }
447          return fromArrayLike(obj);
448        }
449        if (obj.type === "Buffer" && Array.isArray(obj.data)) {
450          return fromArrayLike(obj.data);
451        }
452      }
453      function checked(length) {
454        if (length >= K_MAX_LENGTH) {
455          throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x" + K_MAX_LENGTH.toString(16) + " bytes");
456        }
457        return length | 0;
458      }
459      function SlowBuffer(length) {
460        if (+length != length) {
461          length = 0;
462        }
463        return Buffer3.alloc(+length);
464      }
465      Buffer3.isBuffer = function isBuffer(b) {
466        return b != null && b._isBuffer === true && b !== Buffer3.prototype;
467      };
468      Buffer3.compare = function compare(a, b) {
469        if (isInstance(a, Uint8Array)) a = Buffer3.from(a, a.offset, a.byteLength);
470        if (isInstance(b, Uint8Array)) b = Buffer3.from(b, b.offset, b.byteLength);
471        if (!Buffer3.isBuffer(a) || !Buffer3.isBuffer(b)) {
472          throw new TypeError(
473            'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array'
474          );
475        }
476        if (a === b) return 0;
477        let x = a.length;
478        let y = b.length;
479        for (let i = 0, len = Math.min(x, y); i < len; ++i) {
480          if (a[i] !== b[i]) {
481            x = a[i];
482            y = b[i];
483            break;
484          }
485        }
486        if (x < y) return -1;
487        if (y < x) return 1;
488        return 0;
489      };
490      Buffer3.isEncoding = function isEncoding(encoding) {
491        switch (String(encoding).toLowerCase()) {
492          case "hex":
493          case "utf8":
494          case "utf-8":
495          case "ascii":
496          case "latin1":
497          case "binary":
498          case "base64":
499          case "ucs2":
500          case "ucs-2":
501          case "utf16le":
502          case "utf-16le":
503            return true;
504          default:
505            return false;
506        }
507      };
508      Buffer3.concat = function concat(list, length) {
509        if (!Array.isArray(list)) {
510          throw new TypeError('"list" argument must be an Array of Buffers');
511        }
512        if (list.length === 0) {
513          return Buffer3.alloc(0);
514        }
515        let i;
516        if (length === void 0) {
517          length = 0;
518          for (i = 0; i < list.length; ++i) {
519            length += list[i].length;
520          }
521        }
522        const buffer = Buffer3.allocUnsafe(length);
523        let pos = 0;
524        for (i = 0; i < list.length; ++i) {
525          let buf = list[i];
526          if (isInstance(buf, Uint8Array)) {
527            if (pos + buf.length > buffer.length) {
528              if (!Buffer3.isBuffer(buf)) buf = Buffer3.from(buf);
529              buf.copy(buffer, pos);
530            } else {
531              Uint8Array.prototype.set.call(
532                buffer,
533                buf,
534                pos
535              );
536            }
537          } else if (!Buffer3.isBuffer(buf)) {
538            throw new TypeError('"list" argument must be an Array of Buffers');
539          } else {
540            buf.copy(buffer, pos);
541          }
542          pos += buf.length;
543        }
544        return buffer;
545      };
546      function byteLength(string, encoding) {
547        if (Buffer3.isBuffer(string)) {
548          return string.length;
549        }
550        if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {
551          return string.byteLength;
552        }
553        if (typeof string !== "string") {
554          throw new TypeError(
555            'The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type ' + typeof string
556          );
557        }
558        const len = string.length;
559        const mustMatch = arguments.length > 2 && arguments[2] === true;
560        if (!mustMatch && len === 0) return 0;
561        let loweredCase = false;
562        for (; ; ) {
563          switch (encoding) {
564            case "ascii":
565            case "latin1":
566            case "binary":
567              return len;
568            case "utf8":
569            case "utf-8":
570              return utf8ToBytes(string).length;
571            case "ucs2":
572            case "ucs-2":
573            case "utf16le":
574            case "utf-16le":
575              return len * 2;
576            case "hex":
577              return len >>> 1;
578            case "base64":
579              return base64ToBytes(string).length;
580            default:
581              if (loweredCase) {
582                return mustMatch ? -1 : utf8ToBytes(string).length;
583              }
584              encoding = ("" + encoding).toLowerCase();
585              loweredCase = true;
586          }
587        }
588      }
589      Buffer3.byteLength = byteLength;
590      function slowToString(encoding, start, end) {
591        let loweredCase = false;
592        if (start === void 0 || start < 0) {
593          start = 0;
594        }
595        if (start > this.length) {
596          return "";
597        }
598        if (end === void 0 || end > this.length) {
599          end = this.length;
600        }
601        if (end <= 0) {
602          return "";
603        }
604        end >>>= 0;
605        start >>>= 0;
606        if (end <= start) {
607          return "";
608        }
609        if (!encoding) encoding = "utf8";
610        while (true) {
611          switch (encoding) {
612            case "hex":
613              return hexSlice(this, start, end);
614            case "utf8":
615            case "utf-8":
616              return utf8Slice(this, start, end);
617            case "ascii":
618              return asciiSlice(this, start, end);
619            case "latin1":
620            case "binary":
621              return latin1Slice(this, start, end);
622            case "base64":
623              return base64Slice(this, start, end);
624            case "ucs2":
625            case "ucs-2":
626            case "utf16le":
627            case "utf-16le":
628              return utf16leSlice(this, start, end);
629            default:
630              if (loweredCase) throw new TypeError("Unknown encoding: " + encoding);
631              encoding = (encoding + "").toLowerCase();
632              loweredCase = true;
633          }
634        }
635      }
636      Buffer3.prototype._isBuffer = true;
637      function swap(b, n, m) {
638        const i = b[n];
639        b[n] = b[m];
640        b[m] = i;
641      }
642      Buffer3.prototype.swap16 = function swap16() {
643        const len = this.length;
644        if (len % 2 !== 0) {
645          throw new RangeError("Buffer size must be a multiple of 16-bits");
646        }
647        for (let i = 0; i < len; i += 2) {
648          swap(this, i, i + 1);
649        }
650        return this;
651      };
652      Buffer3.prototype.swap32 = function swap32() {
653        const len = this.length;
654        if (len % 4 !== 0) {
655          throw new RangeError("Buffer size must be a multiple of 32-bits");
656        }
657        for (let i = 0; i < len; i += 4) {
658          swap(this, i, i + 3);
659          swap(this, i + 1, i + 2);
660        }
661        return this;
662      };
663      Buffer3.prototype.swap64 = function swap64() {
664        const len = this.length;
665        if (len % 8 !== 0) {
666          throw new RangeError("Buffer size must be a multiple of 64-bits");
667        }
668        for (let i = 0; i < len; i += 8) {
669          swap(this, i, i + 7);
670          swap(this, i + 1, i + 6);
671          swap(this, i + 2, i + 5);
672          swap(this, i + 3, i + 4);
673        }
674        return this;
675      };
676      Buffer3.prototype.toString = function toString() {
677        const length = this.length;
678        if (length === 0) return "";
679        if (arguments.length === 0) return utf8Slice(this, 0, length);
680        return slowToString.apply(this, arguments);
681      };
682      Buffer3.prototype.toLocaleString = Buffer3.prototype.toString;
683      Buffer3.prototype.equals = function equals(b) {
684        if (!Buffer3.isBuffer(b)) throw new TypeError("Argument must be a Buffer");
685        if (this === b) return true;
686        return Buffer3.compare(this, b) === 0;
687      };
688      Buffer3.prototype.inspect = function inspect() {
689        let str = "";
690        const max = exports.INSPECT_MAX_BYTES;
691        str = this.toString("hex", 0, max).replace(/(.{2})/g, "$1 ").trim();
692        if (this.length > max) str += " ... ";
693        return "<Buffer " + str + ">";
694      };
695      if (customInspectSymbol) {
696        Buffer3.prototype[customInspectSymbol] = Buffer3.prototype.inspect;
697      }
698      Buffer3.prototype.compare = function compare(target, start, end, thisStart, thisEnd) {
699        if (isInstance(target, Uint8Array)) {
700          target = Buffer3.from(target, target.offset, target.byteLength);
701        }
702        if (!Buffer3.isBuffer(target)) {
703          throw new TypeError(
704            'The "target" argument must be one of type Buffer or Uint8Array. Received type ' + typeof target
705          );
706        }
707        if (start === void 0) {
708          start = 0;
709        }
710        if (end === void 0) {
711          end = target ? target.length : 0;
712        }
713        if (thisStart === void 0) {
714          thisStart = 0;
715        }
716        if (thisEnd === void 0) {
717          thisEnd = this.length;
718        }
719        if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
720          throw new RangeError("out of range index");
721        }
722        if (thisStart >= thisEnd && start >= end) {
723          return 0;
724        }
725        if (thisStart >= thisEnd) {
726          return -1;
727        }
728        if (start >= end) {
729          return 1;
730        }
731        start >>>= 0;
732        end >>>= 0;
733        thisStart >>>= 0;
734        thisEnd >>>= 0;
735        if (this === target) return 0;
736        let x = thisEnd - thisStart;
737        let y = end - start;
738        const len = Math.min(x, y);
739        const thisCopy = this.slice(thisStart, thisEnd);
740        const targetCopy = target.slice(start, end);
741        for (let i = 0; i < len; ++i) {
742          if (thisCopy[i] !== targetCopy[i]) {
743            x = thisCopy[i];
744            y = targetCopy[i];
745            break;
746          }
747        }
748        if (x < y) return -1;
749        if (y < x) return 1;
750        return 0;
751      };
752      function bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) {
753        if (buffer.length === 0) return -1;
754        if (typeof byteOffset === "string") {
755          encoding = byteOffset;
756          byteOffset = 0;
757        } else if (byteOffset > 2147483647) {
758          byteOffset = 2147483647;
759        } else if (byteOffset < -2147483648) {
760          byteOffset = -2147483648;
761        }
762        byteOffset = +byteOffset;
763        if (numberIsNaN(byteOffset)) {
764          byteOffset = dir ? 0 : buffer.length - 1;
765        }
766        if (byteOffset < 0) byteOffset = buffer.length + byteOffset;
767        if (byteOffset >= buffer.length) {
768          if (dir) return -1;
769          else byteOffset = buffer.length - 1;
770        } else if (byteOffset < 0) {
771          if (dir) byteOffset = 0;
772          else return -1;
773        }
774        if (typeof val === "string") {
775          val = Buffer3.from(val, encoding);
776        }
777        if (Buffer3.isBuffer(val)) {
778          if (val.length === 0) {
779            return -1;
780          }
781          return arrayIndexOf(buffer, val, byteOffset, encoding, dir);
782        } else if (typeof val === "number") {
783          val = val & 255;
784          if (typeof Uint8Array.prototype.indexOf === "function") {
785            if (dir) {
786              return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset);
787            } else {
788              return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset);
789            }
790          }
791          return arrayIndexOf(buffer, [val], byteOffset, encoding, dir);
792        }
793        throw new TypeError("val must be string, number or Buffer");
794      }
795      function arrayIndexOf(arr, val, byteOffset, encoding, dir) {
796        let indexSize = 1;
797        let arrLength = arr.length;
798        let valLength = val.length;
799        if (encoding !== void 0) {
800          encoding = String(encoding).toLowerCase();
801          if (encoding === "ucs2" || encoding === "ucs-2" || encoding === "utf16le" || encoding === "utf-16le") {
802            if (arr.length < 2 || val.length < 2) {
803              return -1;
804            }
805            indexSize = 2;
806            arrLength /= 2;
807            valLength /= 2;
808            byteOffset /= 2;
809          }
810        }
811        function read(buf, i2) {
812          if (indexSize === 1) {
813            return buf[i2];
814          } else {
815            return buf.readUInt16BE(i2 * indexSize);
816          }
817        }
818        let i;
819        if (dir) {
820          let foundIndex = -1;
821          for (i = byteOffset; i < arrLength; i++) {
822            if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
823              if (foundIndex === -1) foundIndex = i;
824              if (i - foundIndex + 1 === valLength) return foundIndex * indexSize;
825            } else {
826              if (foundIndex !== -1) i -= i - foundIndex;
827              foundIndex = -1;
828            }
829          }
830        } else {
831          if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;
832          for (i = byteOffset; i >= 0; i--) {
833            let found = true;
834            for (let j = 0; j < valLength; j++) {
835              if (read(arr, i + j) !== read(val, j)) {
836                found = false;
837                break;
838              }
839            }
840            if (found) return i;
841          }
842        }
843        return -1;
844      }
845      Buffer3.prototype.includes = function includes(val, byteOffset, encoding) {
846        return this.indexOf(val, byteOffset, encoding) !== -1;
847      };
848      Buffer3.prototype.indexOf = function indexOf2(val, byteOffset, encoding) {
849        return bidirectionalIndexOf(this, val, byteOffset, encoding, true);
850      };
851      Buffer3.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) {
852        return bidirectionalIndexOf(this, val, byteOffset, encoding, false);
853      };
854      function hexWrite(buf, string, offset, length) {
855        offset = Number(offset) || 0;
856        const remaining = buf.length - offset;
857        if (!length) {
858          length = remaining;
859        } else {
860          length = Number(length);
861          if (length > remaining) {
862            length = remaining;
863          }
864        }
865        const strLen = string.length;
866        if (length > strLen / 2) {
867          length = strLen / 2;
868        }
869        let i;
870        for (i = 0; i < length; ++i) {
871          const parsed = parseInt(string.substr(i * 2, 2), 16);
872          if (numberIsNaN(parsed)) return i;
873          buf[offset + i] = parsed;
874        }
875        return i;
876      }
877      function utf8Write(buf, string, offset, length) {
878        return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length);
879      }
880      function asciiWrite(buf, string, offset, length) {
881        return blitBuffer(asciiToBytes(string), buf, offset, length);
882      }
883      function base64Write(buf, string, offset, length) {
884        return blitBuffer(base64ToBytes(string), buf, offset, length);
885      }
886      function ucs2Write(buf, string, offset, length) {
887        return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length);
888      }
889      Buffer3.prototype.write = function write(string, offset, length, encoding) {
890        if (offset === void 0) {
891          encoding = "utf8";
892          length = this.length;
893          offset = 0;
894        } else if (length === void 0 && typeof offset === "string") {
895          encoding = offset;
896          length = this.length;
897          offset = 0;
898        } else if (isFinite(offset)) {
899          offset = offset >>> 0;
900          if (isFinite(length)) {
901            length = length >>> 0;
902            if (encoding === void 0) encoding = "utf8";
903          } else {
904            encoding = length;
905            length = void 0;
906          }
907        } else {
908          throw new Error(
909            "Buffer.write(string, encoding, offset[, length]) is no longer supported"
910          );
911        }
912        const remaining = this.length - offset;
913        if (length === void 0 || length > remaining) length = remaining;
914        if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) {
915          throw new RangeError("Attempt to write outside buffer bounds");
916        }
917        if (!encoding) encoding = "utf8";
918        let loweredCase = false;
919        for (; ; ) {
920          switch (encoding) {
921            case "hex":
922              return hexWrite(this, string, offset, length);
923            case "utf8":
924            case "utf-8":
925              return utf8Write(this, string, offset, length);
926            case "ascii":
927            case "latin1":
928            case "binary":
929              return asciiWrite(this, string, offset, length);
930            case "base64":
931              return base64Write(this, string, offset, length);
932            case "ucs2":
933            case "ucs-2":
934            case "utf16le":
935            case "utf-16le":
936              return ucs2Write(this, string, offset, length);
937            default:
938              if (loweredCase) throw new TypeError("Unknown encoding: " + encoding);
939              encoding = ("" + encoding).toLowerCase();
940              loweredCase = true;
941          }
942        }
943      };
944      Buffer3.prototype.toJSON = function toJSON() {
945        return {
946          type: "Buffer",
947          data: Array.prototype.slice.call(this._arr || this, 0)
948        };
949      };
950      function base64Slice(buf, start, end) {
951        if (start === 0 && end === buf.length) {
952          return base64.fromByteArray(buf);
953        } else {
954          return base64.fromByteArray(buf.slice(start, end));
955        }
956      }
957      function utf8Slice(buf, start, end) {
958        end = Math.min(buf.length, end);
959        const res = [];
960        let i = start;
961        while (i < end) {
962          const firstByte = buf[i];
963          let codePoint = null;
964          let bytesPerSequence = firstByte > 239 ? 4 : firstByte > 223 ? 3 : firstByte > 191 ? 2 : 1;
965          if (i + bytesPerSequence <= end) {
966            let secondByte, thirdByte, fourthByte, tempCodePoint;
967            switch (bytesPerSequence) {
968              case 1:
969                if (firstByte < 128) {
970                  codePoint = firstByte;
971                }
972                break;
973              case 2:
974                secondByte = buf[i + 1];
975                if ((secondByte & 192) === 128) {
976                  tempCodePoint = (firstByte & 31) << 6 | secondByte & 63;
977                  if (tempCodePoint > 127) {
978                    codePoint = tempCodePoint;
979                  }
980                }
981                break;
982              case 3:
983                secondByte = buf[i + 1];
984                thirdByte = buf[i + 2];
985                if ((secondByte & 192) === 128 && (thirdByte & 192) === 128) {
986                  tempCodePoint = (firstByte & 15) << 12 | (secondByte & 63) << 6 | thirdByte & 63;
987                  if (tempCodePoint > 2047 && (tempCodePoint < 55296 || tempCodePoint > 57343)) {
988                    codePoint = tempCodePoint;
989                  }
990                }
991                break;
992              case 4:
993                secondByte = buf[i + 1];
994                thirdByte = buf[i + 2];
995                fourthByte = buf[i + 3];
996                if ((secondByte & 192) === 128 && (thirdByte & 192) === 128 && (fourthByte & 192) === 128) {
997                  tempCodePoint = (firstByte & 15) << 18 | (secondByte & 63) << 12 | (thirdByte & 63) << 6 | fourthByte & 63;
998                  if (tempCodePoint > 65535 && tempCodePoint < 1114112) {
999                    codePoint = tempCodePoint;
1000                  }
1001                }
1002            }
1003          }
1004          if (codePoint === null) {
1005            codePoint = 65533;
1006            bytesPerSequence = 1;
1007          } else if (codePoint > 65535) {
1008            codePoint -= 65536;
1009            res.push(codePoint >>> 10 & 1023 | 55296);
1010            codePoint = 56320 | codePoint & 1023;
1011          }
1012          res.push(codePoint);
1013          i += bytesPerSequence;
1014        }
1015        return decodeCodePointsArray(res);
1016      }
1017      var MAX_ARGUMENTS_LENGTH = 4096;
1018      function decodeCodePointsArray(codePoints) {
1019        const len = codePoints.length;
1020        if (len <= MAX_ARGUMENTS_LENGTH) {
1021          return String.fromCharCode.apply(String, codePoints);
1022        }
1023        let res = "";
1024        let i = 0;
1025        while (i < len) {
1026          res += String.fromCharCode.apply(
1027            String,
1028            codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
1029          );
1030        }
1031        return res;
1032      }
1033      function asciiSlice(buf, start, end) {
1034        let ret = "";
1035        end = Math.min(buf.length, end);
1036        for (let i = start; i < end; ++i) {
1037          ret += String.fromCharCode(buf[i] & 127);
1038        }
1039        return ret;
1040      }
1041      function latin1Slice(buf, start, end) {
1042        let ret = "";
1043        end = Math.min(buf.length, end);
1044        for (let i = start; i < end; ++i) {
1045          ret += String.fromCharCode(buf[i]);
1046        }
1047        return ret;
1048      }
1049      function hexSlice(buf, start, end) {
1050        const len = buf.length;
1051        if (!start || start < 0) start = 0;
1052        if (!end || end < 0 || end > len) end = len;
1053        let out = "";
1054        for (let i = start; i < end; ++i) {
1055          out += hexSliceLookupTable[buf[i]];
1056        }
1057        return out;
1058      }
1059      function utf16leSlice(buf, start, end) {
1060        const bytes = buf.slice(start, end);
1061        let res = "";
1062        for (let i = 0; i < bytes.length - 1; i += 2) {
1063          res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);
1064        }
1065        return res;
1066      }
1067      Buffer3.prototype.slice = function slice(start, end) {
1068        const len = this.length;
1069        start = ~~start;
1070        end = end === void 0 ? len : ~~end;
1071        if (start < 0) {
1072          start += len;
1073          if (start < 0) start = 0;
1074        } else if (start > len) {
1075          start = len;
1076        }
1077        if (end < 0) {
1078          end += len;
1079          if (end < 0) end = 0;
1080        } else if (end > len) {
1081          end = len;
1082        }
1083        if (end < start) end = start;
1084        const newBuf = this.subarray(start, end);
1085        Object.setPrototypeOf(newBuf, Buffer3.prototype);
1086        return newBuf;
1087      };
1088      function checkOffset(offset, ext, length) {
1089        if (offset % 1 !== 0 || offset < 0) throw new RangeError("offset is not uint");
1090        if (offset + ext > length) throw new RangeError("Trying to access beyond buffer length");
1091      }
1092      Buffer3.prototype.readUintLE = Buffer3.prototype.readUIntLE = function readUIntLE(offset, byteLength2, noAssert) {
1093        offset = offset >>> 0;
1094        byteLength2 = byteLength2 >>> 0;
1095        if (!noAssert) checkOffset(offset, byteLength2, this.length);
1096        let val = this[offset];
1097        let mul = 1;
1098        let i = 0;
1099        while (++i < byteLength2 && (mul *= 256)) {
1100          val += this[offset + i] * mul;
1101        }
1102        return val;
1103      };
1104      Buffer3.prototype.readUintBE = Buffer3.prototype.readUIntBE = function readUIntBE(offset, byteLength2, noAssert) {
1105        offset = offset >>> 0;
1106        byteLength2 = byteLength2 >>> 0;
1107        if (!noAssert) {
1108          checkOffset(offset, byteLength2, this.length);
1109        }
1110        let val = this[offset + --byteLength2];
1111        let mul = 1;
1112        while (byteLength2 > 0 && (mul *= 256)) {
1113          val += this[offset + --byteLength2] * mul;
1114        }
1115        return val;
1116      };
1117      Buffer3.prototype.readUint8 = Buffer3.prototype.readUInt8 = function readUInt8(offset, noAssert) {
1118        offset = offset >>> 0;
1119        if (!noAssert) checkOffset(offset, 1, this.length);
1120        return this[offset];
1121      };
1122      Buffer3.prototype.readUint16LE = Buffer3.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) {
1123        offset = offset >>> 0;
1124        if (!noAssert) checkOffset(offset, 2, this.length);
1125        return this[offset] | this[offset + 1] << 8;
1126      };
1127      Buffer3.prototype.readUint16BE = Buffer3.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) {
1128        offset = offset >>> 0;
1129        if (!noAssert) checkOffset(offset, 2, this.length);
1130        return this[offset] << 8 | this[offset + 1];
1131      };
1132      Buffer3.prototype.readUint32LE = Buffer3.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) {
1133        offset = offset >>> 0;
1134        if (!noAssert) checkOffset(offset, 4, this.length);
1135        return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 16777216;
1136      };
1137      Buffer3.prototype.readUint32BE = Buffer3.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) {
1138        offset = offset >>> 0;
1139        if (!noAssert) checkOffset(offset, 4, this.length);
1140        return this[offset] * 16777216 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]);
1141      };
1142      Buffer3.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE(offset) {
1143        offset = offset >>> 0;
1144        validateNumber(offset, "offset");
1145        const first = this[offset];
1146        const last = this[offset + 7];
1147        if (first === void 0 || last === void 0) {
1148          boundsError(offset, this.length - 8);
1149        }
1150        const lo = first + this[++offset] * __pow(2, 8) + this[++offset] * __pow(2, 16) + this[++offset] * __pow(2, 24);
1151        const hi = this[++offset] + this[++offset] * __pow(2, 8) + this[++offset] * __pow(2, 16) + last * __pow(2, 24);
1152        return BigInt(lo) + (BigInt(hi) << BigInt(32));
1153      });
1154      Buffer3.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE(offset) {
1155        offset = offset >>> 0;
1156        validateNumber(offset, "offset");
1157        const first = this[offset];
1158        const last = this[offset + 7];
1159        if (first === void 0 || last === void 0) {
1160          boundsError(offset, this.length - 8);
1161        }
1162        const hi = first * __pow(2, 24) + this[++offset] * __pow(2, 16) + this[++offset] * __pow(2, 8) + this[++offset];
1163        const lo = this[++offset] * __pow(2, 24) + this[++offset] * __pow(2, 16) + this[++offset] * __pow(2, 8) + last;
1164        return (BigInt(hi) << BigInt(32)) + BigInt(lo);
1165      });
1166      Buffer3.prototype.readIntLE = function readIntLE(offset, byteLength2, noAssert) {
1167        offset = offset >>> 0;
1168        byteLength2 = byteLength2 >>> 0;
1169        if (!noAssert) checkOffset(offset, byteLength2, this.length);
1170        let val = this[offset];
1171        let mul = 1;
1172        let i = 0;
1173        while (++i < byteLength2 && (mul *= 256)) {
1174          val += this[offset + i] * mul;
1175        }
1176        mul *= 128;
1177        if (val >= mul) val -= Math.pow(2, 8 * byteLength2);
1178        return val;
1179      };
1180      Buffer3.prototype.readIntBE = function readIntBE(offset, byteLength2, noAssert) {
1181        offset = offset >>> 0;
1182        byteLength2 = byteLength2 >>> 0;
1183        if (!noAssert) checkOffset(offset, byteLength2, this.length);
1184        let i = byteLength2;
1185        let mul = 1;
1186        let val = this[offset + --i];
1187        while (i > 0 && (mul *= 256)) {
1188          val += this[offset + --i] * mul;
1189        }
1190        mul *= 128;
1191        if (val >= mul) val -= Math.pow(2, 8 * byteLength2);
1192        return val;
1193      };
1194      Buffer3.prototype.readInt8 = function readInt8(offset, noAssert) {
1195        offset = offset >>> 0;
1196        if (!noAssert) checkOffset(offset, 1, this.length);
1197        if (!(this[offset] & 128)) return this[offset];
1198        return (255 - this[offset] + 1) * -1;
1199      };
1200      Buffer3.prototype.readInt16LE = function readInt16LE(offset, noAssert) {
1201        offset = offset >>> 0;
1202        if (!noAssert) checkOffset(offset, 2, this.length);
1203        const val = this[offset] | this[offset + 1] << 8;
1204        return val & 32768 ? val | 4294901760 : val;
1205      };
1206      Buffer3.prototype.readInt16BE = function readInt16BE(offset, noAssert) {
1207        offset = offset >>> 0;
1208        if (!noAssert) checkOffset(offset, 2, this.length);
1209        const val = this[offset + 1] | this[offset] << 8;
1210        return val & 32768 ? val | 4294901760 : val;
1211      };
1212      Buffer3.prototype.readInt32LE = function readInt32LE(offset, noAssert) {
1213        offset = offset >>> 0;
1214        if (!noAssert) checkOffset(offset, 4, this.length);
1215        return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24;
1216      };
1217      Buffer3.prototype.readInt32BE = function readInt32BE(offset, noAssert) {
1218        offset = offset >>> 0;
1219        if (!noAssert) checkOffset(offset, 4, this.length);
1220        return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3];
1221      };
1222      Buffer3.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE(offset) {
1223        offset = offset >>> 0;
1224        validateNumber(offset, "offset");
1225        const first = this[offset];
1226        const last = this[offset + 7];
1227        if (first === void 0 || last === void 0) {
1228          boundsError(offset, this.length - 8);
1229        }
1230        const val = this[offset + 4] + this[offset + 5] * __pow(2, 8) + this[offset + 6] * __pow(2, 16) + (last << 24);
1231        return (BigInt(val) << BigInt(32)) + BigInt(first + this[++offset] * __pow(2, 8) + this[++offset] * __pow(2, 16) + this[++offset] * __pow(2, 24));
1232      });
1233      Buffer3.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE(offset) {
1234        offset = offset >>> 0;
1235        validateNumber(offset, "offset");
1236        const first = this[offset];
1237        const last = this[offset + 7];
1238        if (first === void 0 || last === void 0) {
1239          boundsError(offset, this.length - 8);
1240        }
1241        const val = (first << 24) + // Overflow
1242        this[++offset] * __pow(2, 16) + this[++offset] * __pow(2, 8) + this[++offset];
1243        return (BigInt(val) << BigInt(32)) + BigInt(this[++offset] * __pow(2, 24) + this[++offset] * __pow(2, 16) + this[++offset] * __pow(2, 8) + last);
1244      });
1245      Buffer3.prototype.readFloatLE = function readFloatLE(offset, noAssert) {
1246        offset = offset >>> 0;
1247        if (!noAssert) checkOffset(offset, 4, this.length);
1248        return ieee754.read(this, offset, true, 23, 4);
1249      };
1250      Buffer3.prototype.readFloatBE = function readFloatBE(offset, noAssert) {
1251        offset = offset >>> 0;
1252        if (!noAssert) checkOffset(offset, 4, this.length);
1253        return ieee754.read(this, offset, false, 23, 4);
1254      };
1255      Buffer3.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) {
1256        offset = offset >>> 0;
1257        if (!noAssert) checkOffset(offset, 8, this.length);
1258        return ieee754.read(this, offset, true, 52, 8);
1259      };
1260      Buffer3.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) {
1261        offset = offset >>> 0;
1262        if (!noAssert) checkOffset(offset, 8, this.length);
1263        return ieee754.read(this, offset, false, 52, 8);
1264      };
1265      function checkInt(buf, value, offset, ext, max, min) {
1266        if (!Buffer3.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance');
1267        if (value > max || value < min) throw new RangeError('"value" argument is out of bounds');
1268        if (offset + ext > buf.length) throw new RangeError("Index out of range");
1269      }
1270      Buffer3.prototype.writeUintLE = Buffer3.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength2, noAssert) {
1271        value = +value;
1272        offset = offset >>> 0;
1273        byteLength2 = byteLength2 >>> 0;
1274        if (!noAssert) {
1275          const maxBytes = Math.pow(2, 8 * byteLength2) - 1;
1276          checkInt(this, value, offset, byteLength2, maxBytes, 0);
1277        }
1278        let mul = 1;
1279        let i = 0;
1280        this[offset] = value & 255;
1281        while (++i < byteLength2 && (mul *= 256)) {
1282          this[offset + i] = value / mul & 255;
1283        }
1284        return offset + byteLength2;
1285      };
1286      Buffer3.prototype.writeUintBE = Buffer3.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength2, noAssert) {
1287        value = +value;
1288        offset = offset >>> 0;
1289        byteLength2 = byteLength2 >>> 0;
1290        if (!noAssert) {
1291          const maxBytes = Math.pow(2, 8 * byteLength2) - 1;
1292          checkInt(this, value, offset, byteLength2, maxBytes, 0);
1293        }
1294        let i = byteLength2 - 1;
1295        let mul = 1;
1296        this[offset + i] = value & 255;
1297        while (--i >= 0 && (mul *= 256)) {
1298          this[offset + i] = value / mul & 255;
1299        }
1300        return offset + byteLength2;
1301      };
1302      Buffer3.prototype.writeUint8 = Buffer3.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) {
1303        value = +value;
1304        offset = offset >>> 0;
1305        if (!noAssert) checkInt(this, value, offset, 1, 255, 0);
1306        this[offset] = value & 255;
1307        return offset + 1;
1308      };
1309      Buffer3.prototype.writeUint16LE = Buffer3.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) {
1310        value = +value;
1311        offset = offset >>> 0;
1312        if (!noAssert) checkInt(this, value, offset, 2, 65535, 0);
1313        this[offset] = value & 255;
1314        this[offset + 1] = value >>> 8;
1315        return offset + 2;
1316      };
1317      Buffer3.prototype.writeUint16BE = Buffer3.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) {
1318        value = +value;
1319        offset = offset >>> 0;
1320        if (!noAssert) checkInt(this, value, offset, 2, 65535, 0);
1321        this[offset] = value >>> 8;
1322        this[offset + 1] = value & 255;
1323        return offset + 2;
1324      };
1325      Buffer3.prototype.writeUint32LE = Buffer3.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) {
1326        value = +value;
1327        offset = offset >>> 0;
1328        if (!noAssert) checkInt(this, value, offset, 4, 4294967295, 0);
1329        this[offset + 3] = value >>> 24;
1330        this[offset + 2] = value >>> 16;
1331        this[offset + 1] = value >>> 8;
1332        this[offset] = value & 255;
1333        return offset + 4;
1334      };
1335      Buffer3.prototype.writeUint32BE = Buffer3.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) {
1336        value = +value;
1337        offset = offset >>> 0;
1338        if (!noAssert) checkInt(this, value, offset, 4, 4294967295, 0);
1339        this[offset] = value >>> 24;
1340        this[offset + 1] = value >>> 16;
1341        this[offset + 2] = value >>> 8;
1342        this[offset + 3] = value & 255;
1343        return offset + 4;
1344      };
1345      function wrtBigUInt64LE(buf, value, offset, min, max) {
1346        checkIntBI(value, min, max, buf, offset, 7);
1347        let lo = Number(value & BigInt(4294967295));
1348        buf[offset++] = lo;
1349        lo = lo >> 8;
1350        buf[offset++] = lo;
1351        lo = lo >> 8;
1352        buf[offset++] = lo;
1353        lo = lo >> 8;
1354        buf[offset++] = lo;
1355        let hi = Number(value >> BigInt(32) & BigInt(4294967295));
1356        buf[offset++] = hi;
1357        hi = hi >> 8;
1358        buf[offset++] = hi;
1359        hi = hi >> 8;
1360        buf[offset++] = hi;
1361        hi = hi >> 8;
1362        buf[offset++] = hi;
1363        return offset;
1364      }
1365      function wrtBigUInt64BE(buf, value, offset, min, max) {
1366        checkIntBI(value, min, max, buf, offset, 7);
1367        let lo = Number(value & BigInt(4294967295));
1368        buf[offset + 7] = lo;
1369        lo = lo >> 8;
1370        buf[offset + 6] = lo;
1371        lo = lo >> 8;
1372        buf[offset + 5] = lo;
1373        lo = lo >> 8;
1374        buf[offset + 4] = lo;
1375        let hi = Number(value >> BigInt(32) & BigInt(4294967295));
1376        buf[offset + 3] = hi;
1377        hi = hi >> 8;
1378        buf[offset + 2] = hi;
1379        hi = hi >> 8;
1380        buf[offset + 1] = hi;
1381        hi = hi >> 8;
1382        buf[offset] = hi;
1383        return offset + 8;
1384      }
1385      Buffer3.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE(value, offset = 0) {
1386        return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt("0xffffffffffffffff"));
1387      });
1388      Buffer3.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE(value, offset = 0) {
1389        return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt("0xffffffffffffffff"));
1390      });
1391      Buffer3.prototype.writeIntLE = function writeIntLE(value, offset, byteLength2, noAssert) {
1392        value = +value;
1393        offset = offset >>> 0;
1394        if (!noAssert) {
1395          const limit = Math.pow(2, 8 * byteLength2 - 1);
1396          checkInt(this, value, offset, byteLength2, limit - 1, -limit);
1397        }
1398        let i = 0;
1399        let mul = 1;
1400        let sub = 0;
1401        this[offset] = value & 255;
1402        while (++i < byteLength2 && (mul *= 256)) {
1403          if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
1404            sub = 1;
1405          }
1406          this[offset + i] = (value / mul >> 0) - sub & 255;
1407        }
1408        return offset + byteLength2;
1409      };
1410      Buffer3.prototype.writeIntBE = function writeIntBE(value, offset, byteLength2, noAssert) {
1411        value = +value;
1412        offset = offset >>> 0;
1413        if (!noAssert) {
1414          const limit = Math.pow(2, 8 * byteLength2 - 1);
1415          checkInt(this, value, offset, byteLength2, limit - 1, -limit);
1416        }
1417        let i = byteLength2 - 1;
1418        let mul = 1;
1419        let sub = 0;
1420        this[offset + i] = value & 255;
1421        while (--i >= 0 && (mul *= 256)) {
1422          if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
1423            sub = 1;
1424          }
1425          this[offset + i] = (value / mul >> 0) - sub & 255;
1426        }
1427        return offset + byteLength2;
1428      };
1429      Buffer3.prototype.writeInt8 = function writeInt8(value, offset, noAssert) {
1430        value = +value;
1431        offset = offset >>> 0;
1432        if (!noAssert) checkInt(this, value, offset, 1, 127, -128);
1433        if (value < 0) value = 255 + value + 1;
1434        this[offset] = value & 255;
1435        return offset + 1;
1436      };
1437      Buffer3.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) {
1438        value = +value;
1439        offset = offset >>> 0;
1440        if (!noAssert) checkInt(this, value, offset, 2, 32767, -32768);
1441        this[offset] = value & 255;
1442        this[offset + 1] = value >>> 8;
1443        return offset + 2;
1444      };
1445      Buffer3.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) {
1446        value = +value;
1447        offset = offset >>> 0;
1448        if (!noAssert) checkInt(this, value, offset, 2, 32767, -32768);
1449        this[offset] = value >>> 8;
1450        this[offset + 1] = value & 255;
1451        return offset + 2;
1452      };
1453      Buffer3.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) {
1454        value = +value;
1455        offset = offset >>> 0;
1456        if (!noAssert) checkInt(this, value, offset, 4, 2147483647, -2147483648);
1457        this[offset] = value & 255;
1458        this[offset + 1] = value >>> 8;
1459        this[offset + 2] = value >>> 16;
1460        this[offset + 3] = value >>> 24;
1461        return offset + 4;
1462      };
1463      Buffer3.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) {
1464        value = +value;
1465        offset = offset >>> 0;
1466        if (!noAssert) checkInt(this, value, offset, 4, 2147483647, -2147483648);
1467        if (value < 0) value = 4294967295 + value + 1;
1468        this[offset] = value >>> 24;
1469        this[offset + 1] = value >>> 16;
1470        this[offset + 2] = value >>> 8;
1471        this[offset + 3] = value & 255;
1472        return offset + 4;
1473      };
1474      Buffer3.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE(value, offset = 0) {
1475        return wrtBigUInt64LE(this, value, offset, -BigInt("0x8000000000000000"), BigInt("0x7fffffffffffffff"));
1476      });
1477      Buffer3.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE(value, offset = 0) {
1478        return wrtBigUInt64BE(this, value, offset, -BigInt("0x8000000000000000"), BigInt("0x7fffffffffffffff"));
1479      });
1480      function checkIEEE754(buf, value, offset, ext, max, min) {
1481        if (offset + ext > buf.length) throw new RangeError("Index out of range");
1482        if (offset < 0) throw new RangeError("Index out of range");
1483      }
1484      function writeFloat(buf, value, offset, littleEndian, noAssert) {
1485        value = +value;
1486        offset = offset >>> 0;
1487        if (!noAssert) {
1488          checkIEEE754(buf, value, offset, 4, 34028234663852886e22, -34028234663852886e22);
1489        }
1490        ieee754.write(buf, value, offset, littleEndian, 23, 4);
1491        return offset + 4;
1492      }
1493      Buffer3.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) {
1494        return writeFloat(this, value, offset, true, noAssert);
1495      };
1496      Buffer3.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) {
1497        return writeFloat(this, value, offset, false, noAssert);
1498      };
1499      function writeDouble(buf, value, offset, littleEndian, noAssert) {
1500        value = +value;
1501        offset = offset >>> 0;
1502        if (!noAssert) {
1503          checkIEEE754(buf, value, offset, 8, 17976931348623157e292, -17976931348623157e292);
1504        }
1505        ieee754.write(buf, value, offset, littleEndian, 52, 8);
1506        return offset + 8;
1507      }
1508      Buffer3.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) {
1509        return writeDouble(this, value, offset, true, noAssert);
1510      };
1511      Buffer3.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) {
1512        return writeDouble(this, value, offset, false, noAssert);
1513      };
1514      Buffer3.prototype.copy = function copy(target, targetStart, start, end) {
1515        if (!Buffer3.isBuffer(target)) throw new TypeError("argument should be a Buffer");
1516        if (!start) start = 0;
1517        if (!end && end !== 0) end = this.length;
1518        if (targetStart >= target.length) targetStart = target.length;
1519        if (!targetStart) targetStart = 0;
1520        if (end > 0 && end < start) end = start;
1521        if (end === start) return 0;
1522        if (target.length === 0 || this.length === 0) return 0;
1523        if (targetStart < 0) {
1524          throw new RangeError("targetStart out of bounds");
1525        }
1526        if (start < 0 || start >= this.length) throw new RangeError("Index out of range");
1527        if (end < 0) throw new RangeError("sourceEnd out of bounds");
1528        if (end > this.length) end = this.length;
1529        if (target.length - targetStart < end - start) {
1530          end = target.length - targetStart + start;
1531        }
1532        const len = end - start;
1533        if (this === target && typeof Uint8Array.prototype.copyWithin === "function") {
1534          this.copyWithin(targetStart, start, end);
1535        } else {
1536          Uint8Array.prototype.set.call(
1537            target,
1538            this.subarray(start, end),
1539            targetStart
1540          );
1541        }
1542        return len;
1543      };
1544      Buffer3.prototype.fill = function fill(val, start, end, encoding) {
1545        if (typeof val === "string") {
1546          if (typeof start === "string") {
1547            encoding = start;
1548            start = 0;
1549            end = this.length;
1550          } else if (typeof end === "string") {
1551            encoding = end;
1552            end = this.length;
1553          }
1554          if (encoding !== void 0 && typeof encoding !== "string") {
1555            throw new TypeError("encoding must be a string");
1556          }
1557          if (typeof encoding === "string" && !Buffer3.isEncoding(encoding)) {
1558            throw new TypeError("Unknown encoding: " + encoding);
1559          }
1560          if (val.length === 1) {
1561            const code = val.charCodeAt(0);
1562            if (encoding === "utf8" && code < 128 || encoding === "latin1") {
1563              val = code;
1564            }
1565          }
1566        } else if (typeof val === "number") {
1567          val = val & 255;
1568        } else if (typeof val === "boolean") {
1569          val = Number(val);
1570        }
1571        if (start < 0 || this.length < start || this.length < end) {
1572          throw new RangeError("Out of range index");
1573        }
1574        if (end <= start) {
1575          return this;
1576        }
1577        start = start >>> 0;
1578        end = end === void 0 ? this.length : end >>> 0;
1579        if (!val) val = 0;
1580        let i;
1581        if (typeof val === "number") {
1582          for (i = start; i < end; ++i) {
1583            this[i] = val;
1584          }
1585        } else {
1586          const bytes = Buffer3.isBuffer(val) ? val : Buffer3.from(val, encoding);
1587          const len = bytes.length;
1588          if (len === 0) {
1589            throw new TypeError('The value "' + val + '" is invalid for argument "value"');
1590          }
1591          for (i = 0; i < end - start; ++i) {
1592            this[i + start] = bytes[i % len];
1593          }
1594        }
1595        return this;
1596      };
1597      var errors = {};
1598      function E(sym, getMessage, Base) {
1599        errors[sym] = class NodeError extends Base {
1600          constructor() {
1601            super();
1602            Object.defineProperty(this, "message", {
1603              value: getMessage.apply(this, arguments),
1604              writable: true,
1605              configurable: true
1606            });
1607            this.name = `${this.name} [${sym}]`;
1608            this.stack;
1609            delete this.name;
1610          }
1611          get code() {
1612            return sym;
1613          }
1614          set code(value) {
1615            Object.defineProperty(this, "code", {
1616              configurable: true,
1617              enumerable: true,
1618              value,
1619              writable: true
1620            });
1621          }
1622          toString() {
1623            return `${this.name} [${sym}]: ${this.message}`;
1624          }
1625        };
1626      }
1627      E(
1628        "ERR_BUFFER_OUT_OF_BOUNDS",
1629        function(name) {
1630          if (name) {
1631            return `${name} is outside of buffer bounds`;
1632          }
1633          return "Attempt to access memory outside buffer bounds";
1634        },
1635        RangeError
1636      );
1637      E(
1638        "ERR_INVALID_ARG_TYPE",
1639        function(name, actual) {
1640          return `The "${name}" argument must be of type number. Received type ${typeof actual}`;
1641        },
1642        TypeError
1643      );
1644      E(
1645        "ERR_OUT_OF_RANGE",
1646        function(str, range, input) {
1647          let msg = `The value of "${str}" is out of range.`;
1648          let received = input;
1649          if (Number.isInteger(input) && Math.abs(input) > __pow(2, 32)) {
1650            received = addNumericalSeparator(String(input));
1651          } else if (typeof input === "bigint") {
1652            received = String(input);
1653            if (input > __pow(BigInt(2), BigInt(32)) || input < -__pow(BigInt(2), BigInt(32))) {
1654              received = addNumericalSeparator(received);
1655            }
1656            received += "n";
1657          }
1658          msg += ` It must be ${range}. Received ${received}`;
1659          return msg;
1660        },
1661        RangeError
1662      );
1663      function addNumericalSeparator(val) {
1664        let res = "";
1665        let i = val.length;
1666        const start = val[0] === "-" ? 1 : 0;
1667        for (; i >= start + 4; i -= 3) {
1668          res = `_${val.slice(i - 3, i)}${res}`;
1669        }
1670        return `${val.slice(0, i)}${res}`;
1671      }
1672      function checkBounds(buf, offset, byteLength2) {
1673        validateNumber(offset, "offset");
1674        if (buf[offset] === void 0 || buf[offset + byteLength2] === void 0) {
1675          boundsError(offset, buf.length - (byteLength2 + 1));
1676        }
1677      }
1678      function checkIntBI(value, min, max, buf, offset, byteLength2) {
1679        if (value > max || value < min) {
1680          const n = typeof min === "bigint" ? "n" : "";
1681          let range;
1682          if (byteLength2 > 3) {
1683            if (min === 0 || min === BigInt(0)) {
1684              range = `>= 0${n} and < 2${n} ** ${(byteLength2 + 1) * 8}${n}`;
1685            } else {
1686              range = `>= -(2${n} ** ${(byteLength2 + 1) * 8 - 1}${n}) and < 2 ** ${(byteLength2 + 1) * 8 - 1}${n}`;
1687            }
1688          } else {
1689            range = `>= ${min}${n} and <= ${max}${n}`;
1690          }
1691          throw new errors.ERR_OUT_OF_RANGE("value", range, value);
1692        }
1693        checkBounds(buf, offset, byteLength2);
1694      }
1695      function validateNumber(value, name) {
1696        if (typeof value !== "number") {
1697          throw new errors.ERR_INVALID_ARG_TYPE(name, "number", value);
1698        }
1699      }
1700      function boundsError(value, length, type) {
1701        if (Math.floor(value) !== value) {
1702          validateNumber(value, type);
1703          throw new errors.ERR_OUT_OF_RANGE(type || "offset", "an integer", value);
1704        }
1705        if (length < 0) {
1706          throw new errors.ERR_BUFFER_OUT_OF_BOUNDS();
1707        }
1708        throw new errors.ERR_OUT_OF_RANGE(
1709          type || "offset",
1710          `>= ${type ? 1 : 0} and <= ${length}`,
1711          value
1712        );
1713      }
1714      var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g;
1715      function base64clean(str) {
1716        str = str.split("=")[0];
1717        str = str.trim().replace(INVALID_BASE64_RE, "");
1718        if (str.length < 2) return "";
1719        while (str.length % 4 !== 0) {
1720          str = str + "=";
1721        }
1722        return str;
1723      }
1724      function utf8ToBytes(string, units) {
1725        units = units || Infinity;
1726        let codePoint;
1727        const length = string.length;
1728        let leadSurrogate = null;
1729        const bytes = [];
1730        for (let i = 0; i < length; ++i) {
1731          codePoint = string.charCodeAt(i);
1732          if (codePoint > 55295 && codePoint < 57344) {
1733            if (!leadSurrogate) {
1734              if (codePoint > 56319) {
1735                if ((units -= 3) > -1) bytes.push(239, 191, 189);
1736                continue;
1737              } else if (i + 1 === length) {
1738                if ((units -= 3) > -1) bytes.push(239, 191, 189);
1739                continue;
1740              }
1741              leadSurrogate = codePoint;
1742              continue;
1743            }
1744            if (codePoint < 56320) {
1745              if ((units -= 3) > -1) bytes.push(239, 191, 189);
1746              leadSurrogate = codePoint;
1747              continue;
1748            }
1749            codePoint = (leadSurrogate - 55296 << 10 | codePoint - 56320) + 65536;
1750          } else if (leadSurrogate) {
1751            if ((units -= 3) > -1) bytes.push(239, 191, 189);
1752          }
1753          leadSurrogate = null;
1754          if (codePoint < 128) {
1755            if ((units -= 1) < 0) break;
1756            bytes.push(codePoint);
1757          } else if (codePoint < 2048) {
1758            if ((units -= 2) < 0) break;
1759            bytes.push(
1760              codePoint >> 6 | 192,
1761              codePoint & 63 | 128
1762            );
1763          } else if (codePoint < 65536) {
1764            if ((units -= 3) < 0) break;
1765            bytes.push(
1766              codePoint >> 12 | 224,
1767              codePoint >> 6 & 63 | 128,
1768              codePoint & 63 | 128
1769            );
1770          } else if (codePoint < 1114112) {
1771            if ((units -= 4) < 0) break;
1772            bytes.push(
1773              codePoint >> 18 | 240,
1774              codePoint >> 12 & 63 | 128,
1775              codePoint >> 6 & 63 | 128,
1776              codePoint & 63 | 128
1777            );
1778          } else {
1779            throw new Error("Invalid code point");
1780          }
1781        }
1782        return bytes;
1783      }
1784      function asciiToBytes(str) {
1785        const byteArray = [];
1786        for (let i = 0; i < str.length; ++i) {
1787          byteArray.push(str.charCodeAt(i) & 255);
1788        }
1789        return byteArray;
1790      }
1791      function utf16leToBytes(str, units) {
1792        let c, hi, lo;
1793        const byteArray = [];
1794        for (let i = 0; i < str.length; ++i) {
1795          if ((units -= 2) < 0) break;
1796          c = str.charCodeAt(i);
1797          hi = c >> 8;
1798          lo = c % 256;
1799          byteArray.push(lo);
1800          byteArray.push(hi);
1801        }
1802        return byteArray;
1803      }
1804      function base64ToBytes(str) {
1805        return base64.toByteArray(base64clean(str));
1806      }
1807      function blitBuffer(src, dst, offset, length) {
1808        let i;
1809        for (i = 0; i < length; ++i) {
1810          if (i + offset >= dst.length || i >= src.length) break;
1811          dst[i + offset] = src[i];
1812        }
1813        return i;
1814      }
1815      function isInstance(obj, type) {
1816        return obj instanceof type || obj != null && obj.constructor != null && obj.constructor.name != null && obj.constructor.name === type.name;
1817      }
1818      function numberIsNaN(obj) {
1819        return obj !== obj;
1820      }
1821      var hexSliceLookupTable = (function() {
1822        const alphabet = "0123456789abcdef";
1823        const table = new Array(256);
1824        for (let i = 0; i < 16; ++i) {
1825          const i16 = i * 16;
1826          for (let j = 0; j < 16; ++j) {
1827            table[i16 + j] = alphabet[i] + alphabet[j];
1828          }
1829        }
1830        return table;
1831      })();
1832      function defineBigIntMethod(fn) {
1833        return typeof BigInt === "undefined" ? BufferBigIntNotDefined : fn;
1834      }
1835      function BufferBigIntNotDefined() {
1836        throw new Error("BigInt not supported");
1837      }
1838    }
1839  });
1840
1841  // esbuild.shims.js
1842  var import_buffer;
1843  var init_esbuild_shims = __esm({
1844    "esbuild.shims.js"() {
1845      "use strict";
1846      import_buffer = __toESM(require_buffer());
1847      window.Buffer = import_buffer.Buffer;
1848    }
1849  });
1850
1851  
vendor: 257,874 bytes, lines 1851-8202
1851// node_modules/jquery/dist/jquery.js
1852  var require_jquery = __commonJS({
1853    "node_modules/jquery/dist/jquery.js"(exports, module) {
1854      init_esbuild_shims();
1855      (function(global2, factory) {
1856        "use strict";
1857        if (typeof module === "object" && typeof module.exports === "object") {
1858          module.exports = global2.document ? factory(global2, true) : function(w) {
1859            if (!w.document) {
1860              throw new Error("jQuery requires a window with a document");
1861            }
1862            return factory(w);
1863          };
1864        } else {
1865          factory(global2);
1866        }
1867      })(typeof window !== "undefined" ? window : exports, function(window2, noGlobal) {
1868        "use strict";
1869        var arr = [];
1870        var getProto = Object.getPrototypeOf;
1871        var slice = arr.slice;
1872        var flat = arr.flat ? function(array) {
1873          return arr.flat.call(array);
1874        } : function(array) {
1875          return arr.concat.apply([], array);
1876        };
1877        var push = arr.push;
1878        var indexOf2 = arr.indexOf;
1879        var class2type = {};
1880        var toString = class2type.toString;
1881        var hasOwn = class2type.hasOwnProperty;
1882        var fnToString = hasOwn.toString;
1883        var ObjectFunctionString = fnToString.call(Object);
1884        var support = {};
1885        var isFunction = function isFunction2(obj) {
1886          return typeof obj === "function" && typeof obj.nodeType !== "number" && typeof obj.item !== "function";
1887        };
1888        var isWindow = function isWindow2(obj) {
1889          return obj != null && obj === obj.window;
1890        };
1891        var document2 = window2.document;
1892        var preservedScriptAttributes = {
1893          type: true,
1894          src: true,
1895          nonce: true,
1896          noModule: true
1897        };
1898        function DOMEval(code, node, doc) {
1899          doc = doc || document2;
1900          var i, val, script = doc.createElement("script");
1901          script.text = code;
1902          if (node) {
1903            for (i in preservedScriptAttributes) {
1904              val = node[i] || node.getAttribute && node.getAttribute(i);
1905              if (val) {
1906                script.setAttribute(i, val);
1907              }
1908            }
1909          }
1910          doc.head.appendChild(script).parentNode.removeChild(script);
1911        }
1912        function toType(obj) {
1913          if (obj == null) {
1914            return obj + "";
1915          }
1916          return typeof obj === "object" || typeof obj === "function" ? class2type[toString.call(obj)] || "object" : typeof obj;
1917        }
1918        var version = "3.7.1", rhtmlSuffix = /HTML$/i, jQuery2 = function(selector, context) {
1919          return new jQuery2.fn.init(selector, context);
1920        };
1921        jQuery2.fn = jQuery2.prototype = {
1922          // The current version of jQuery being used
1923          jquery: version,
1924          constructor: jQuery2,
1925          // The default length of a jQuery object is 0
1926          length: 0,
1927          toArray: function() {
1928            return slice.call(this);
1929          },
1930          // Get the Nth element in the matched element set OR
1931          // Get the whole matched element set as a clean array
1932          get: function(num) {
1933            if (num == null) {
1934              return slice.call(this);
1935            }
1936            return num < 0 ? this[num + this.length] : this[num];
1937          },
1938          // Take an array of elements and push it onto the stack
1939          // (returning the new matched element set)
1940          pushStack: function(elems) {
1941            var ret = jQuery2.merge(this.constructor(), elems);
1942            ret.prevObject = this;
1943            return ret;
1944          },
1945          // Execute a callback for every element in the matched set.
1946          each: function(callback) {
1947            return jQuery2.each(this, callback);
1948          },
1949          map: function(callback) {
1950            return this.pushStack(jQuery2.map(this, function(elem, i) {
1951              return callback.call(elem, i, elem);
1952            }));
1953          },
1954          slice: function() {
1955            return this.pushStack(slice.apply(this, arguments));
1956          },
1957          first: function() {
1958            return this.eq(0);
1959          },
1960          last: function() {
1961            return this.eq(-1);
1962          },
1963          even: function() {
1964            return this.pushStack(jQuery2.grep(this, function(_elem, i) {
1965              return (i + 1) % 2;
1966            }));
1967          },
1968          odd: function() {
1969            return this.pushStack(jQuery2.grep(this, function(_elem, i) {
1970              return i % 2;
1971            }));
1972          },
1973          eq: function(i) {
1974            var len = this.length, j = +i + (i < 0 ? len : 0);
1975            return this.pushStack(j >= 0 && j < len ? [this[j]] : []);
1976          },
1977          end: function() {
1978            return this.prevObject || this.constructor();
1979          },
1980          // For internal use only.
1981          // Behaves like an Array's method, not like a jQuery method.
1982          push,
1983          sort: arr.sort,
1984          splice: arr.splice
1985        };
1986        jQuery2.extend = jQuery2.fn.extend = function() {
1987          var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false;
1988          if (typeof target === "boolean") {
1989            deep = target;
1990            target = arguments[i] || {};
1991            i++;
1992          }
1993          if (typeof target !== "object" && !isFunction(target)) {
1994            target = {};
1995          }
1996          if (i === length) {
1997            target = this;
1998            i--;
1999          }
2000          for (; i < length; i++) {
2001            if ((options = arguments[i]) != null) {
2002              for (name in options) {
2003                copy = options[name];
2004                if (name === "__proto__" || target === copy) {
2005                  continue;
2006                }
2007                if (deep && copy && (jQuery2.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) {
2008                  src = target[name];
2009                  if (copyIsArray && !Array.isArray(src)) {
2010                    clone = [];
2011                  } else if (!copyIsArray && !jQuery2.isPlainObject(src)) {
2012                    clone = {};
2013                  } else {
2014                    clone = src;
2015                  }
2016                  copyIsArray = false;
2017                  target[name] = jQuery2.extend(deep, clone, copy);
2018                } else if (copy !== void 0) {
2019                  target[name] = copy;
2020                }
2021              }
2022            }
2023          }
2024          return target;
2025        };
2026        jQuery2.extend({
2027          // Unique for each copy of jQuery on the page
2028          expando: "jQuery" + (version + Math.random()).replace(/\D/g, ""),
2029          // Assume jQuery is ready without the ready module
2030          isReady: true,
2031          error: function(msg) {
2032            throw new Error(msg);
2033          },
2034          noop: function() {
2035          },
2036          isPlainObject: function(obj) {
2037            var proto, Ctor;
2038            if (!obj || toString.call(obj) !== "[object Object]") {
2039              return false;
2040            }
2041            proto = getProto(obj);
2042            if (!proto) {
2043              return true;
2044            }
2045            Ctor = hasOwn.call(proto, "constructor") && proto.constructor;
2046            return typeof Ctor === "function" && fnToString.call(Ctor) === ObjectFunctionString;
2047          },
2048          isEmptyObject: function(obj) {
2049            var name;
2050            for (name in obj) {
2051              return false;
2052            }
2053            return true;
2054          },
2055          // Evaluates a script in a provided context; falls back to the global one
2056          // if not specified.
2057          globalEval: function(code, options, doc) {
2058            DOMEval(code, { nonce: options && options.nonce }, doc);
2059          },
2060          each: function(obj, callback) {
2061            var length, i = 0;
2062            if (isArrayLike(obj)) {
2063              length = obj.length;
2064              for (; i < length; i++) {
2065                if (callback.call(obj[i], i, obj[i]) === false) {
2066                  break;
2067                }
2068              }
2069            } else {
2070              for (i in obj) {
2071                if (callback.call(obj[i], i, obj[i]) === false) {
2072                  break;
2073                }
2074              }
2075            }
2076            return obj;
2077          },
2078          // Retrieve the text value of an array of DOM nodes
2079          text: function(elem) {
2080            var node, ret = "", i = 0, nodeType = elem.nodeType;
2081            if (!nodeType) {
2082              while (node = elem[i++]) {
2083                ret += jQuery2.text(node);
2084              }
2085            }
2086            if (nodeType === 1 || nodeType === 11) {
2087              return elem.textContent;
2088            }
2089            if (nodeType === 9) {
2090              return elem.documentElement.textContent;
2091            }
2092            if (nodeType === 3 || nodeType === 4) {
2093              return elem.nodeValue;
2094            }
2095            return ret;
2096          },
2097          // results is for internal usage only
2098          makeArray: function(arr2, results) {
2099            var ret = results || [];
2100            if (arr2 != null) {
2101              if (isArrayLike(Object(arr2))) {
2102                jQuery2.merge(
2103                  ret,
2104                  typeof arr2 === "string" ? [arr2] : arr2
2105                );
2106              } else {
2107                push.call(ret, arr2);
2108              }
2109            }
2110            return ret;
2111          },
2112          inArray: function(elem, arr2, i) {
2113            return arr2 == null ? -1 : indexOf2.call(arr2, elem, i);
2114          },
2115          isXMLDoc: function(elem) {
2116            var namespace = elem && elem.namespaceURI, docElem = elem && (elem.ownerDocument || elem).documentElement;
2117            return !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || "HTML");
2118          },
2119          // Support: Android <=4.0 only, PhantomJS 1 only
2120          // push.apply(_, arraylike) throws on ancient WebKit
2121          merge: function(first, second) {
2122            var len = +second.length, j = 0, i = first.length;
2123            for (; j < len; j++) {
2124              first[i++] = second[j];
2125            }
2126            first.length = i;
2127            return first;
2128          },
2129          grep: function(elems, callback, invert) {
2130            var callbackInverse, matches = [], i = 0, length = elems.length, callbackExpect = !invert;
2131            for (; i < length; i++) {
2132              callbackInverse = !callback(elems[i], i);
2133              if (callbackInverse !== callbackExpect) {
2134                matches.push(elems[i]);
2135              }
2136            }
2137            return matches;
2138          },
2139          // arg is for internal usage only
2140          map: function(elems, callback, arg) {
2141            var length, value, i = 0, ret = [];
2142            if (isArrayLike(elems)) {
2143              length = elems.length;
2144              for (; i < length; i++) {
2145                value = callback(elems[i], i, arg);
2146                if (value != null) {
2147                  ret.push(value);
2148                }
2149              }
2150            } else {
2151              for (i in elems) {
2152                value = callback(elems[i], i, arg);
2153                if (value != null) {
2154                  ret.push(value);
2155                }
2156              }
2157            }
2158            return flat(ret);
2159          },
2160          // A global GUID counter for objects
2161          guid: 1,
2162          // jQuery.support is not used in Core but other projects attach their
2163          // properties to it so it needs to exist.
2164          support
2165        });
2166        if (typeof Symbol === "function") {
2167          jQuery2.fn[Symbol.iterator] = arr[Symbol.iterator];
2168        }
2169        jQuery2.each(
2170          "Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),
2171          function(_i, name) {
2172            class2type["[object " + name + "]"] = name.toLowerCase();
2173          }
2174        );
2175        function isArrayLike(obj) {
2176          var length = !!obj && "length" in obj && obj.length, type = toType(obj);
2177          if (isFunction(obj) || isWindow(obj)) {
2178            return false;
2179          }
2180          return type === "array" || length === 0 || typeof length === "number" && length > 0 && length - 1 in obj;
2181        }
2182        function nodeName(elem, name) {
2183          return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
2184        }
2185        var pop = arr.pop;
2186        var sort = arr.sort;
2187        var splice = arr.splice;
2188        var whitespace = "[\\x20\\t\\r\\n\\f]";
2189        var rtrimCSS = new RegExp(
2190          "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$",
2191          "g"
2192        );
2193        jQuery2.contains = function(a, b) {
2194          var bup = b && b.parentNode;
2195          return a === bup || !!(bup && bup.nodeType === 1 && // Support: IE 9 - 11+
2196          // IE doesn't have `contains` on SVG.
2197          (a.contains ? a.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));
2198        };
2199        var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;
2200        function fcssescape(ch, asCodePoint) {
2201          if (asCodePoint) {
2202            if (ch === "\0") {
2203              return "\uFFFD";
2204            }
2205            return ch.slice(0, -1) + "\\" + ch.charCodeAt(ch.length - 1).toString(16) + " ";
2206          }
2207          return "\\" + ch;
2208        }
2209        jQuery2.escapeSelector = function(sel) {
2210          return (sel + "").replace(rcssescape, fcssescape);
2211        };
2212        var preferredDoc = document2, pushNative = push;
2213        (function() {
2214          var i, Expr, outermostContext, sortInput, hasDuplicate, push2 = pushNative, document3, documentElement2, documentIsHTML, rbuggyQSA, matches, expando = jQuery2.expando, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), nonnativeSelectorCache = createCache(), sortOrder = function(a, b) {
2215            if (a === b) {
2216              hasDuplicate = true;
2217            }
2218            return 0;
2219          }, booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + // Operator (capture 2)
2220          "*([*^$|!~]?=)" + whitespace + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
2221          `*(?:'((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)"|(` + identifier + "))|)" + whitespace + "*\\]", pseudos = ":(" + identifier + `)(?:\\((('((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)")|((?:\\\\.|[^\\\\()[\\]]|` + attributes + ")*)|.*)\\)|)", rwhitespace = new RegExp(whitespace + "+", "g"), rcomma = new RegExp("^" + whitespace + "*," + whitespace + "*"), rleadingCombinator = new RegExp("^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*"), rdescend = new RegExp(whitespace + "|>"), rpseudo = new RegExp(pseudos), ridentifier = new RegExp("^" + identifier + "$"), matchExpr = {
2222            ID: new RegExp("^#(" + identifier + ")"),
2223            CLASS: new RegExp("^\\.(" + identifier + ")"),
2224            TAG: new RegExp("^(" + identifier + "|[*])"),
2225            ATTR: new RegExp("^" + attributes),
2226            PSEUDO: new RegExp("^" + pseudos),
2227            CHILD: new RegExp(
2228              "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)",
2229              "i"
2230            ),
2231            bool: new RegExp("^(?:" + booleans + ")$", "i"),
2232            // For use in libraries implementing .is()
2233            // We use this for POS matching in `select`
2234            needsContext: new RegExp("^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i")
2235          }, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\d$/i, rquickExpr2 = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, rsibling = /[+~]/, runescape = new RegExp("\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g"), funescape = function(escape2, nonHex) {
2236            var high = "0x" + escape2.slice(1) - 65536;
2237            if (nonHex) {
2238              return nonHex;
2239            }
2240            return high < 0 ? String.fromCharCode(high + 65536) : String.fromCharCode(high >> 10 | 55296, high & 1023 | 56320);
2241          }, unloadHandler = function() {
2242            setDocument();
2243          }, inDisabledFieldset = addCombinator(
2244            function(elem) {
2245              return elem.disabled === true && nodeName(elem, "fieldset");
2246            },
2247            { dir: "parentNode", next: "legend" }
2248          );
2249          function safeActiveElement() {
2250            try {
2251              return document3.activeElement;
2252            } catch (err) {
2253            }
2254          }
2255          try {
2256            push2.apply(
2257              arr = slice.call(preferredDoc.childNodes),
2258              preferredDoc.childNodes
2259            );
2260            arr[preferredDoc.childNodes.length].nodeType;
2261          } catch (e) {
2262            push2 = {
2263              apply: function(target, els) {
2264                pushNative.apply(target, slice.call(els));
2265              },
2266              call: function(target) {
2267                pushNative.apply(target, slice.call(arguments, 1));
2268              }
2269            };
2270          }
2271          function find(selector, context, results, seed) {
2272            var m, i2, elem, nid, match, groups, newSelector, newContext = context && context.ownerDocument, nodeType = context ? context.nodeType : 9;
2273            results = results || [];
2274            if (typeof selector !== "string" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11) {
2275              return results;
2276            }
2277            if (!seed) {
2278              setDocument(context);
2279              context = context || document3;
2280              if (documentIsHTML) {
2281                if (nodeType !== 11 && (match = rquickExpr2.exec(selector))) {
2282                  if (m = match[1]) {
2283                    if (nodeType === 9) {
2284                      if (elem = context.getElementById(m)) {
2285                        if (elem.id === m) {
2286                          push2.call(results, elem);
2287                          return results;
2288                        }
2289                      } else {
2290                        return results;
2291                      }
2292                    } else {
2293                      if (newContext && (elem = newContext.getElementById(m)) && find.contains(context, elem) && elem.id === m) {
2294                        push2.call(results, elem);
2295                        return results;
2296                      }
2297                    }
2298                  } else if (match[2]) {
2299                    push2.apply(results, context.getElementsByTagName(selector));
2300                    return results;
2301                  } else if ((m = match[3]) && context.getElementsByClassName) {
2302                    push2.apply(results, context.getElementsByClassName(m));
2303                    return results;
2304                  }
2305                }
2306                if (!nonnativeSelectorCache[selector + " "] && (!rbuggyQSA || !rbuggyQSA.test(selector))) {
2307                  newSelector = selector;
2308                  newContext = context;
2309                  if (nodeType === 1 && (rdescend.test(selector) || rleadingCombinator.test(selector))) {
2310                    newContext = rsibling.test(selector) && testContext(context.parentNode) || context;
2311                    if (newContext != context || !support.scope) {
2312                      if (nid = context.getAttribute("id")) {
2313                        nid = jQuery2.escapeSelector(nid);
2314                      } else {
2315                        context.setAttribute("id", nid = expando);
2316                      }
2317                    }
2318                    groups = tokenize(selector);
2319                    i2 = groups.length;
2320                    while (i2--) {
2321                      groups[i2] = (nid ? "#" + nid : ":scope") + " " + toSelector(groups[i2]);
2322                    }
2323                    newSelector = groups.join(",");
2324                  }
2325                  try {
2326                    push2.apply(
2327                      results,
2328                      newContext.querySelectorAll(newSelector)
2329                    );
2330                    return results;
2331                  } catch (qsaError) {
2332                    nonnativeSelectorCache(selector, true);
2333                  } finally {
2334                    if (nid === expando) {
2335                      context.removeAttribute("id");
2336                    }
2337                  }
2338                }
2339              }
2340            }
2341            return select(selector.replace(rtrimCSS, "$1"), context, results, seed);
2342          }
2343          function createCache() {
2344            var keys = [];
2345            function cache(key, value) {
2346              if (keys.push(key + " ") > Expr.cacheLength) {
2347                delete cache[keys.shift()];
2348              }
2349              return cache[key + " "] = value;
2350            }
2351            return cache;
2352          }
2353          function markFunction(fn) {
2354            fn[expando] = true;
2355            return fn;
2356          }
2357          function assert(fn) {
2358            var el = document3.createElement("fieldset");
2359            try {
2360              return !!fn(el);
2361            } catch (e) {
2362              return false;
2363            } finally {
2364              if (el.parentNode) {
2365                el.parentNode.removeChild(el);
2366              }
2367              el = null;
2368            }
2369          }
2370          function createInputPseudo(type) {
2371            return function(elem) {
2372              return nodeName(elem, "input") && elem.type === type;
2373            };
2374          }
2375          function createButtonPseudo(type) {
2376            return function(elem) {
2377              return (nodeName(elem, "input") || nodeName(elem, "button")) && elem.type === type;
2378            };
2379          }
2380          function createDisabledPseudo(disabled) {
2381            return function(elem) {
2382              if ("form" in elem) {
2383                if (elem.parentNode && elem.disabled === false) {
2384                  if ("label" in elem) {
2385                    if ("label" in elem.parentNode) {
2386                      return elem.parentNode.disabled === disabled;
2387                    } else {
2388                      return elem.disabled === disabled;
2389                    }
2390                  }
2391                  return elem.isDisabled === disabled || // Where there is no isDisabled, check manually
2392                  elem.isDisabled !== !disabled && inDisabledFieldset(elem) === disabled;
2393                }
2394                return elem.disabled === disabled;
2395              } else if ("label" in elem) {
2396                return elem.disabled === disabled;
2397              }
2398              return false;
2399            };
2400          }
2401          function createPositionalPseudo(fn) {
2402            return markFunction(function(argument) {
2403              argument = +argument;
2404              return markFunction(function(seed, matches2) {
2405                var j, matchIndexes = fn([], seed.length, argument), i2 = matchIndexes.length;
2406                while (i2--) {
2407                  if (seed[j = matchIndexes[i2]]) {
2408                    seed[j] = !(matches2[j] = seed[j]);
2409                  }
2410                }
2411              });
2412            });
2413          }
2414          function testContext(context) {
2415            return context && typeof context.getElementsByTagName !== "undefined" && context;
2416          }
2417          function setDocument(node) {
2418            var subWindow, doc = node ? node.ownerDocument || node : preferredDoc;
2419            if (doc == document3 || doc.nodeType !== 9 || !doc.documentElement) {
2420              return document3;
2421            }
2422            document3 = doc;
2423            documentElement2 = document3.documentElement;
2424            documentIsHTML = !jQuery2.isXMLDoc(document3);
2425            matches = documentElement2.matches || documentElement2.webkitMatchesSelector || documentElement2.msMatchesSelector;
2426            if (documentElement2.msMatchesSelector && // Support: IE 11+, Edge 17 - 18+
2427            // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
2428            // two documents; shallow comparisons work.
2429            // eslint-disable-next-line eqeqeq
2430            preferredDoc != document3 && (subWindow = document3.defaultView) && subWindow.top !== subWindow) {
2431              subWindow.addEventListener("unload", unloadHandler);
2432            }
2433            support.getById = assert(function(el) {
2434              documentElement2.appendChild(el).id = jQuery2.expando;
2435              return !document3.getElementsByName || !document3.getElementsByName(jQuery2.expando).length;
2436            });
2437            support.disconnectedMatch = assert(function(el) {
2438              return matches.call(el, "*");
2439            });
2440            support.scope = assert(function() {
2441              return document3.querySelectorAll(":scope");
2442            });
2443            support.cssHas = assert(function() {
2444              try {
2445                document3.querySelector(":has(*,:jqfake)");
2446                return false;
2447              } catch (e) {
2448                return true;
2449              }
2450            });
2451            if (support.getById) {
2452              Expr.filter.ID = function(id) {
2453                var attrId = id.replace(runescape, funescape);
2454                return function(elem) {
2455                  return elem.getAttribute("id") === attrId;
2456                };
2457              };
2458              Expr.find.ID = function(id, context) {
2459                if (typeof context.getElementById !== "undefined" && documentIsHTML) {
2460                  var elem = context.getElementById(id);
2461                  return elem ? [elem] : [];
2462                }
2463              };
2464            } else {
2465              Expr.filter.ID = function(id) {
2466                var attrId = id.replace(runescape, funescape);
2467                return function(elem) {
2468                  var node2 = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
2469                  return node2 && node2.value === attrId;
2470                };
2471              };
2472              Expr.find.ID = function(id, context) {
2473                if (typeof context.getElementById !== "undefined" && documentIsHTML) {
2474                  var node2, i2, elems, elem = context.getElementById(id);
2475                  if (elem) {
2476                    node2 = elem.getAttributeNode("id");
2477                    if (node2 && node2.value === id) {
2478                      return [elem];
2479                    }
2480                    elems = context.getElementsByName(id);
2481                    i2 = 0;
2482                    while (elem = elems[i2++]) {
2483                      node2 = elem.getAttributeNode("id");
2484                      if (node2 && node2.value === id) {
2485                        return [elem];
2486                      }
2487                    }
2488                  }
2489                  return [];
2490                }
2491              };
2492            }
2493            Expr.find.TAG = function(tag, context) {
2494              if (typeof context.getElementsByTagName !== "undefined") {
2495                return context.getElementsByTagName(tag);
2496              } else {
2497                return context.querySelectorAll(tag);
2498              }
2499            };
2500            Expr.find.CLASS = function(className, context) {
2501              if (typeof context.getElementsByClassName !== "undefined" && documentIsHTML) {
2502                return context.getElementsByClassName(className);
2503              }
2504            };
2505            rbuggyQSA = [];
2506            assert(function(el) {
2507              var input;
2508              documentElement2.appendChild(el).innerHTML = "<a id='" + expando + "' href='' disabled='disabled'></a><select id='" + expando + "-\r\\' disabled='disabled'><option selected=''></option></select>";
2509              if (!el.querySelectorAll("[selected]").length) {
2510                rbuggyQSA.push("\\[" + whitespace + "*(?:value|" + booleans + ")");
2511              }
2512              if (!el.querySelectorAll("[id~=" + expando + "-]").length) {
2513                rbuggyQSA.push("~=");
2514              }
2515              if (!el.querySelectorAll("a#" + expando + "+*").length) {
2516                rbuggyQSA.push(".#.+[+~]");
2517              }
2518              if (!el.querySelectorAll(":checked").length) {
2519                rbuggyQSA.push(":checked");
2520              }
2521              input = document3.createElement("input");
2522              input.setAttribute("type", "hidden");
2523              el.appendChild(input).setAttribute("name", "D");
2524              documentElement2.appendChild(el).disabled = true;
2525              if (el.querySelectorAll(":disabled").length !== 2) {
2526                rbuggyQSA.push(":enabled", ":disabled");
2527              }
2528              input = document3.createElement("input");
2529              input.setAttribute("name", "");
2530              el.appendChild(input);
2531              if (!el.querySelectorAll("[name='']").length) {
2532                rbuggyQSA.push("\\[" + whitespace + "*name" + whitespace + "*=" + whitespace + `*(?:''|"")`);
2533              }
2534            });
2535            if (!support.cssHas) {
2536              rbuggyQSA.push(":has");
2537            }
2538            rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join("|"));
2539            sortOrder = function(a, b) {
2540              if (a === b) {
2541                hasDuplicate = true;
2542                return 0;
2543              }
2544              var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
2545              if (compare) {
2546                return compare;
2547              }
2548              compare = (a.ownerDocument || a) == (b.ownerDocument || b) ? a.compareDocumentPosition(b) : (
2549                // Otherwise we know they are disconnected
2550                1
2551              );
2552              if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) {
2553                if (a === document3 || a.ownerDocument == preferredDoc && find.contains(preferredDoc, a)) {
2554                  return -1;
2555                }
2556                if (b === document3 || b.ownerDocument == preferredDoc && find.contains(preferredDoc, b)) {
2557                  return 1;
2558                }
2559                return sortInput ? indexOf2.call(sortInput, a) - indexOf2.call(sortInput, b) : 0;
2560              }
2561              return compare & 4 ? -1 : 1;
2562            };
2563            return document3;
2564          }
2565          find.matches = function(expr, elements) {
2566            return find(expr, null, null, elements);
2567          };
2568          find.matchesSelector = function(elem, expr) {
2569            setDocument(elem);
2570            if (documentIsHTML && !nonnativeSelectorCache[expr + " "] && (!rbuggyQSA || !rbuggyQSA.test(expr))) {
2571              try {
2572                var ret = matches.call(elem, expr);
2573                if (ret || support.disconnectedMatch || // As well, disconnected nodes are said to be in a document
2574                // fragment in IE 9
2575                elem.document && elem.document.nodeType !== 11) {
2576                  return ret;
2577                }
2578              } catch (e) {
2579                nonnativeSelectorCache(expr, true);
2580              }
2581            }
2582            return find(expr, document3, null, [elem]).length > 0;
2583          };
2584          find.contains = function(context, elem) {
2585            if ((context.ownerDocument || context) != document3) {
2586              setDocument(context);
2587            }
2588            return jQuery2.contains(context, elem);
2589          };
2590          find.attr = function(elem, name) {
2591            if ((elem.ownerDocument || elem) != document3) {
2592              setDocument(elem);
2593            }
2594            var fn = Expr.attrHandle[name.toLowerCase()], val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : void 0;
2595            if (val !== void 0) {
2596              return val;
2597            }
2598            return elem.getAttribute(name);
2599          };
2600          find.error = function(msg) {
2601            throw new Error("Syntax error, unrecognized expression: " + msg);
2602          };
2603          jQuery2.uniqueSort = function(results) {
2604            var elem, duplicates = [], j = 0, i2 = 0;
2605            hasDuplicate = !support.sortStable;
2606            sortInput = !support.sortStable && slice.call(results, 0);
2607            sort.call(results, sortOrder);
2608            if (hasDuplicate) {
2609              while (elem = results[i2++]) {
2610                if (elem === results[i2]) {
2611                  j = duplicates.push(i2);
2612                }
2613              }
2614              while (j--) {
2615                splice.call(results, duplicates[j], 1);
2616              }
2617            }
2618            sortInput = null;
2619            return results;
2620          };
2621          jQuery2.fn.uniqueSort = function() {
2622            return this.pushStack(jQuery2.uniqueSort(slice.apply(this)));
2623          };
2624          Expr = jQuery2.expr = {
2625            // Can be adjusted by the user
2626            cacheLength: 50,
2627            createPseudo: markFunction,
2628            match: matchExpr,
2629            attrHandle: {},
2630            find: {},
2631            relative: {
2632              ">": { dir: "parentNode", first: true },
2633              " ": { dir: "parentNode" },
2634              "+": { dir: "previousSibling", first: true },
2635              "~": { dir: "previousSibling" }
2636            },
2637            preFilter: {
2638              ATTR: function(match) {
2639                match[1] = match[1].replace(runescape, funescape);
2640                match[3] = (match[3] || match[4] || match[5] || "").replace(runescape, funescape);
2641                if (match[2] === "~=") {
2642                  match[3] = " " + match[3] + " ";
2643                }
2644                return match.slice(0, 4);
2645              },
2646              CHILD: function(match) {
2647                match[1] = match[1].toLowerCase();
2648                if (match[1].slice(0, 3) === "nth") {
2649                  if (!match[3]) {
2650                    find.error(match[0]);
2651                  }
2652                  match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === "even" || match[3] === "odd"));
2653                  match[5] = +(match[7] + match[8] || match[3] === "odd");
2654                } else if (match[3]) {
2655                  find.error(match[0]);
2656                }
2657                return match;
2658              },
2659              PSEUDO: function(match) {
2660                var excess, unquoted = !match[6] && match[2];
2661                if (matchExpr.CHILD.test(match[0])) {
2662                  return null;
2663                }
2664                if (match[3]) {
2665                  match[2] = match[4] || match[5] || "";
2666                } else if (unquoted && rpseudo.test(unquoted) && // Get excess from tokenize (recursively)
2667                (excess = tokenize(unquoted, true)) && // advance to the next closing parenthesis
2668                (excess = unquoted.indexOf(")", unquoted.length - excess) - unquoted.length)) {
2669                  match[0] = match[0].slice(0, excess);
2670                  match[2] = unquoted.slice(0, excess);
2671                }
2672                return match.slice(0, 3);
2673              }
2674            },
2675            filter: {
2676              TAG: function(nodeNameSelector) {
2677                var expectedNodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();
2678                return nodeNameSelector === "*" ? function() {
2679                  return true;
2680                } : function(elem) {
2681                  return nodeName(elem, expectedNodeName);
2682                };
2683              },
2684              CLASS: function(className) {
2685                var pattern = classCache[className + " "];
2686                return pattern || (pattern = new RegExp("(^|" + whitespace + ")" + className + "(" + whitespace + "|$)")) && classCache(className, function(elem) {
2687                  return pattern.test(
2688                    typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || ""
2689                  );
2690                });
2691              },
2692              ATTR: function(name, operator, check) {
2693                return function(elem) {
2694                  var result = find.attr(elem, name);
2695                  if (result == null) {
2696                    return operator === "!=";
2697                  }
2698                  if (!operator) {
2699                    return true;
2700                  }
2701                  result += "";
2702                  if (operator === "=") {
2703                    return result === check;
2704                  }
2705                  if (operator === "!=") {
2706                    return result !== check;
2707                  }
2708                  if (operator === "^=") {
2709                    return check && result.indexOf(check) === 0;
2710                  }
2711                  if (operator === "*=") {
2712                    return check && result.indexOf(check) > -1;
2713                  }
2714                  if (operator === "$=") {
2715                    return check && result.slice(-check.length) === check;
2716                  }
2717                  if (operator === "~=") {
2718                    return (" " + result.replace(rwhitespace, " ") + " ").indexOf(check) > -1;
2719                  }
2720                  if (operator === "|=") {
2721                    return result === check || result.slice(0, check.length + 1) === check + "-";
2722                  }
2723                  return false;
2724                };
2725              },
2726              CHILD: function(type, what, _argument, first, last) {
2727                var simple = type.slice(0, 3) !== "nth", forward = type.slice(-4) !== "last", ofType = what === "of-type";
2728                return first === 1 && last === 0 ? (
2729                  // Shortcut for :nth-*(n)
2730                  function(elem) {
2731                    return !!elem.parentNode;
2732                  }
2733                ) : function(elem, _context, xml) {
2734                  var cache, outerCache, node, nodeIndex, start, dir2 = simple !== forward ? "nextSibling" : "previousSibling", parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType, diff = false;
2735                  if (parent) {
2736                    if (simple) {
2737                      while (dir2) {
2738                        node = elem;
2739                        while (node = node[dir2]) {
2740                          if (ofType ? nodeName(node, name) : node.nodeType === 1) {
2741                            return false;
2742                          }
2743                        }
2744                        start = dir2 = type === "only" && !start && "nextSibling";
2745                      }
2746                      return true;
2747                    }
2748                    start = [forward ? parent.firstChild : parent.lastChild];
2749                    if (forward && useCache) {
2750                      outerCache = parent[expando] || (parent[expando] = {});
2751                      cache = outerCache[type] || [];
2752                      nodeIndex = cache[0] === dirruns && cache[1];
2753                      diff = nodeIndex && cache[2];
2754                      node = nodeIndex && parent.childNodes[nodeIndex];
2755                      while (node = ++nodeIndex && node && node[dir2] || // Fallback to seeking `elem` from the start
2756                      (diff = nodeIndex = 0) || start.pop()) {
2757                        if (node.nodeType === 1 && ++diff && node === elem) {
2758                          outerCache[type] = [dirruns, nodeIndex, diff];
2759                          break;
2760                        }
2761                      }
2762                    } else {
2763                      if (useCache) {
2764                        outerCache = elem[expando] || (elem[expando] = {});
2765                        cache = outerCache[type] || [];
2766                        nodeIndex = cache[0] === dirruns && cache[1];
2767                        diff = nodeIndex;
2768                      }
2769                      if (diff === false) {
2770                        while (node = ++nodeIndex && node && node[dir2] || (diff = nodeIndex = 0) || start.pop()) {
2771                          if ((ofType ? nodeName(node, name) : node.nodeType === 1) && ++diff) {
2772                            if (useCache) {
2773                              outerCache = node[expando] || (node[expando] = {});
2774                              outerCache[type] = [dirruns, diff];
2775                            }
2776                            if (node === elem) {
2777                              break;
2778                            }
2779                          }
2780                        }
2781                      }
2782                    }
2783                    diff -= last;
2784                    return diff === first || diff % first === 0 && diff / first >= 0;
2785                  }
2786                };
2787              },
2788              PSEUDO: function(pseudo, argument) {
2789                var args, fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || find.error("unsupported pseudo: " + pseudo);
2790                if (fn[expando]) {
2791                  return fn(argument);
2792                }
2793                if (fn.length > 1) {
2794                  args = [pseudo, pseudo, "", argument];
2795                  return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function(seed, matches2) {
2796                    var idx, matched = fn(seed, argument), i2 = matched.length;
2797                    while (i2--) {
2798                      idx = indexOf2.call(seed, matched[i2]);
2799                      seed[idx] = !(matches2[idx] = matched[i2]);
2800                    }
2801                  }) : function(elem) {
2802                    return fn(elem, 0, args);
2803                  };
2804                }
2805                return fn;
2806              }
2807            },
2808            pseudos: {
2809              // Potentially complex pseudos
2810              not: markFunction(function(selector) {
2811                var input = [], results = [], matcher = compile(selector.replace(rtrimCSS, "$1"));
2812                return matcher[expando] ? markFunction(function(seed, matches2, _context, xml) {
2813                  var elem, unmatched = matcher(seed, null, xml, []), i2 = seed.length;
2814                  while (i2--) {
2815                    if (elem = unmatched[i2]) {
2816                      seed[i2] = !(matches2[i2] = elem);
2817                    }
2818                  }
2819                }) : function(elem, _context, xml) {
2820                  input[0] = elem;
2821                  matcher(input, null, xml, results);
2822                  input[0] = null;
2823                  return !results.pop();
2824                };
2825              }),
2826              has: markFunction(function(selector) {
2827                return function(elem) {
2828                  return find(selector, elem).length > 0;
2829                };
2830              }),
2831              contains: markFunction(function(text) {
2832                text = text.replace(runescape, funescape);
2833                return function(elem) {
2834                  return (elem.textContent || jQuery2.text(elem)).indexOf(text) > -1;
2835                };
2836              }),
2837              // "Whether an element is represented by a :lang() selector
2838              // is based solely on the element's language value
2839              // being equal to the identifier C,
2840              // or beginning with the identifier C immediately followed by "-".
2841              // The matching of C against the element's language value is performed case-insensitively.
2842              // The identifier C does not have to be a valid language name."
2843              // https://www.w3.org/TR/selectors/#lang-pseudo
2844              lang: markFunction(function(lang) {
2845                if (!ridentifier.test(lang || "")) {
2846                  find.error("unsupported lang: " + lang);
2847                }
2848                lang = lang.replace(runescape, funescape).toLowerCase();
2849                return function(elem) {
2850                  var elemLang;
2851                  do {
2852                    if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute("xml:lang") || elem.getAttribute("lang")) {
2853                      elemLang = elemLang.toLowerCase();
2854                      return elemLang === lang || elemLang.indexOf(lang + "-") === 0;
2855                    }
2856                  } while ((elem = elem.parentNode) && elem.nodeType === 1);
2857                  return false;
2858                };
2859              }),
2860              // Miscellaneous
2861              target: function(elem) {
2862                var hash = window2.location && window2.location.hash;
2863                return hash && hash.slice(1) === elem.id;
2864              },
2865              root: function(elem) {
2866                return elem === documentElement2;
2867              },
2868              focus: function(elem) {
2869                return elem === safeActiveElement() && document3.hasFocus() && !!(elem.type || elem.href || ~elem.tabIndex);
2870              },
2871              // Boolean properties
2872              enabled: createDisabledPseudo(false),
2873              disabled: createDisabledPseudo(true),
2874              checked: function(elem) {
2875                return nodeName(elem, "input") && !!elem.checked || nodeName(elem, "option") && !!elem.selected;
2876              },
2877              selected: function(elem) {
2878                if (elem.parentNode) {
2879                  elem.parentNode.selectedIndex;
2880                }
2881                return elem.selected === true;
2882              },
2883              // Contents
2884              empty: function(elem) {
2885                for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
2886                  if (elem.nodeType < 6) {
2887                    return false;
2888                  }
2889                }
2890                return true;
2891              },
2892              parent: function(elem) {
2893                return !Expr.pseudos.empty(elem);
2894              },
2895              // Element/input types
2896              header: function(elem) {
2897                return rheader.test(elem.nodeName);
2898              },
2899              input: function(elem) {
2900                return rinputs.test(elem.nodeName);
2901              },
2902              button: function(elem) {
2903                return nodeName(elem, "input") && elem.type === "button" || nodeName(elem, "button");
2904              },
2905              text: function(elem) {
2906                var attr;
2907                return nodeName(elem, "input") && elem.type === "text" && // Support: IE <10 only
2908                // New HTML5 attribute values (e.g., "search") appear
2909                // with elem.type === "text"
2910                ((attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text");
2911              },
2912              // Position-in-collection
2913              first: createPositionalPseudo(function() {
2914                return [0];
2915              }),
2916              last: createPositionalPseudo(function(_matchIndexes, length) {
2917                return [length - 1];
2918              }),
2919              eq: createPositionalPseudo(function(_matchIndexes, length, argument) {
2920                return [argument < 0 ? argument + length : argument];
2921              }),
2922              even: createPositionalPseudo(function(matchIndexes, length) {
2923                var i2 = 0;
2924                for (; i2 < length; i2 += 2) {
2925                  matchIndexes.push(i2);
2926                }
2927                return matchIndexes;
2928              }),
2929              odd: createPositionalPseudo(function(matchIndexes, length) {
2930                var i2 = 1;
2931                for (; i2 < length; i2 += 2) {
2932                  matchIndexes.push(i2);
2933                }
2934                return matchIndexes;
2935              }),
2936              lt: createPositionalPseudo(function(matchIndexes, length, argument) {
2937                var i2;
2938                if (argument < 0) {
2939                  i2 = argument + length;
2940                } else if (argument > length) {
2941                  i2 = length;
2942                } else {
2943                  i2 = argument;
2944                }
2945                for (; --i2 >= 0; ) {
2946                  matchIndexes.push(i2);
2947                }
2948                return matchIndexes;
2949              }),
2950              gt: createPositionalPseudo(function(matchIndexes, length, argument) {
2951                var i2 = argument < 0 ? argument + length : argument;
2952                for (; ++i2 < length; ) {
2953                  matchIndexes.push(i2);
2954                }
2955                return matchIndexes;
2956              })
2957            }
2958          };
2959          Expr.pseudos.nth = Expr.pseudos.eq;
2960          for (i in { radio: true, checkbox: true, file: true, password: true, image: true }) {
2961            Expr.pseudos[i] = createInputPseudo(i);
2962          }
2963          for (i in { submit: true, reset: true }) {
2964            Expr.pseudos[i] = createButtonPseudo(i);
2965          }
2966          function setFilters() {
2967          }
2968          setFilters.prototype = Expr.filters = Expr.pseudos;
2969          Expr.setFilters = new setFilters();
2970          function tokenize(selector, parseOnly) {
2971            var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[selector + " "];
2972            if (cached) {
2973              return parseOnly ? 0 : cached.slice(0);
2974            }
2975            soFar = selector;
2976            groups = [];
2977            preFilters = Expr.preFilter;
2978            while (soFar) {
2979              if (!matched || (match = rcomma.exec(soFar))) {
2980                if (match) {
2981                  soFar = soFar.slice(match[0].length) || soFar;
2982                }
2983                groups.push(tokens = []);
2984              }
2985              matched = false;
2986              if (match = rleadingCombinator.exec(soFar)) {
2987                matched = match.shift();
2988                tokens.push({
2989                  value: matched,
2990                  // Cast descendant combinators to space
2991                  type: match[0].replace(rtrimCSS, " ")
2992                });
2993                soFar = soFar.slice(matched.length);
2994              }
2995              for (type in Expr.filter) {
2996                if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {
2997                  matched = match.shift();
2998                  tokens.push({
2999                    value: matched,
3000                    type,
3001                    matches: match
3002                  });
3003                  soFar = soFar.slice(matched.length);
3004                }
3005              }
3006              if (!matched) {
3007                break;
3008              }
3009            }
3010            if (parseOnly) {
3011              return soFar.length;
3012            }
3013            return soFar ? find.error(selector) : (
3014              // Cache the tokens
3015              tokenCache(selector, groups).slice(0)
3016            );
3017          }
3018          function toSelector(tokens) {
3019            var i2 = 0, len = tokens.length, selector = "";
3020            for (; i2 < len; i2++) {
3021              selector += tokens[i2].value;
3022            }
3023            return selector;
3024          }
3025          function addCombinator(matcher, combinator, base) {
3026            var dir2 = combinator.dir, skip = combinator.next, key = skip || dir2, checkNonElements = base && key === "parentNode", doneName = done++;
3027            return combinator.first ? (
3028              // Check against closest ancestor/preceding element
3029              function(elem, context, xml) {
3030                while (elem = elem[dir2]) {
3031                  if (elem.nodeType === 1 || checkNonElements) {
3032                    return matcher(elem, context, xml);
3033                  }
3034                }
3035                return false;
3036              }
3037            ) : (
3038              // Check against all ancestor/preceding elements
3039              function(elem, context, xml) {
3040                var oldCache, outerCache, newCache = [dirruns, doneName];
3041                if (xml) {
3042                  while (elem = elem[dir2]) {
3043                    if (elem.nodeType === 1 || checkNonElements) {
3044                      if (matcher(elem, context, xml)) {
3045                        return true;
3046                      }
3047                    }
3048                  }
3049                } else {
3050                  while (elem = elem[dir2]) {
3051                    if (elem.nodeType === 1 || checkNonElements) {
3052                      outerCache = elem[expando] || (elem[expando] = {});
3053                      if (skip && nodeName(elem, skip)) {
3054                        elem = elem[dir2] || elem;
3055                      } else if ((oldCache = outerCache[key]) && oldCache[0] === dirruns && oldCache[1] === doneName) {
3056                        return newCache[2] = oldCache[2];
3057                      } else {
3058                        outerCache[key] = newCache;
3059                        if (newCache[2] = matcher(elem, context, xml)) {
3060                          return true;
3061                        }
3062                      }
3063                    }
3064                  }
3065                }
3066                return false;
3067              }
3068            );
3069          }
3070          function elementMatcher(matchers) {
3071            return matchers.length > 1 ? function(elem, context, xml) {
3072              var i2 = matchers.length;
3073              while (i2--) {
3074                if (!matchers[i2](elem, context, xml)) {
3075                  return false;
3076                }
3077              }
3078              return true;
3079            } : matchers[0];
3080          }
3081          function multipleContexts(selector, contexts, results) {
3082            var i2 = 0, len = contexts.length;
3083            for (; i2 < len; i2++) {
3084              find(selector, contexts[i2], results);
3085            }
3086            return results;
3087          }
3088          function condense(unmatched, map, filter, context, xml) {
3089            var elem, newUnmatched = [], i2 = 0, len = unmatched.length, mapped = map != null;
3090            for (; i2 < len; i2++) {
3091              if (elem = unmatched[i2]) {
3092                if (!filter || filter(elem, context, xml)) {
3093                  newUnmatched.push(elem);
3094                  if (mapped) {
3095                    map.push(i2);
3096                  }
3097                }
3098              }
3099            }
3100            return newUnmatched;
3101          }
3102          function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {
3103            if (postFilter && !postFilter[expando]) {
3104              postFilter = setMatcher(postFilter);
3105            }
3106            if (postFinder && !postFinder[expando]) {
3107              postFinder = setMatcher(postFinder, postSelector);
3108            }
3109            return markFunction(function(seed, results, context, xml) {
3110              var temp, i2, elem, matcherOut, preMap = [], postMap = [], preexisting = results.length, elems = seed || multipleContexts(
3111                selector || "*",
3112                context.nodeType ? [context] : context,
3113                []
3114              ), matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems;
3115              if (matcher) {
3116                matcherOut = postFinder || (seed ? preFilter : preexisting || postFilter) ? (
3117                  // ...intermediate processing is necessary
3118                  []
3119                ) : (
3120                  // ...otherwise use results directly
3121                  results
3122                );
3123                matcher(matcherIn, matcherOut, context, xml);
3124              } else {
3125                matcherOut = matcherIn;
3126              }
3127              if (postFilter) {
3128                temp = condense(matcherOut, postMap);
3129                postFilter(temp, [], context, xml);
3130                i2 = temp.length;
3131                while (i2--) {
3132                  if (elem = temp[i2]) {
3133                    matcherOut[postMap[i2]] = !(matcherIn[postMap[i2]] = elem);
3134                  }
3135                }
3136              }
3137              if (seed) {
3138                if (postFinder || preFilter) {
3139                  if (postFinder) {
3140                    temp = [];
3141                    i2 = matcherOut.length;
3142                    while (i2--) {
3143                      if (elem = matcherOut[i2]) {
3144                        temp.push(matcherIn[i2] = elem);
3145                      }
3146                    }
3147                    postFinder(null, matcherOut = [], temp, xml);
3148                  }
3149                  i2 = matcherOut.length;
3150                  while (i2--) {
3151                    if ((elem = matcherOut[i2]) && (temp = postFinder ? indexOf2.call(seed, elem) : preMap[i2]) > -1) {
3152                      seed[temp] = !(results[temp] = elem);
3153                    }
3154                  }
3155                }
3156              } else {
3157                matcherOut = condense(
3158                  matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut
3159                );
3160                if (postFinder) {
3161                  postFinder(null, results, matcherOut, xml);
3162                } else {
3163                  push2.apply(results, matcherOut);
3164                }
3165              }
3166            });
3167          }
3168          function matcherFromTokens(tokens) {
3169            var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[tokens[0].type], implicitRelative = leadingRelative || Expr.relative[" "], i2 = leadingRelative ? 1 : 0, matchContext = addCombinator(function(elem) {
3170              return elem === checkContext;
3171            }, implicitRelative, true), matchAnyContext = addCombinator(function(elem) {
3172              return indexOf2.call(checkContext, elem) > -1;
3173            }, implicitRelative, true), matchers = [function(elem, context, xml) {
3174              var ret = !leadingRelative && (xml || context != outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml));
3175              checkContext = null;
3176              return ret;
3177            }];
3178            for (; i2 < len; i2++) {
3179              if (matcher = Expr.relative[tokens[i2].type]) {
3180                matchers = [addCombinator(elementMatcher(matchers), matcher)];
3181              } else {
3182                matcher = Expr.filter[tokens[i2].type].apply(null, tokens[i2].matches);
3183                if (matcher[expando]) {
3184                  j = ++i2;
3185                  for (; j < len; j++) {
3186                    if (Expr.relative[tokens[j].type]) {
3187                      break;
3188                    }
3189                  }
3190                  return setMatcher(
3191                    i2 > 1 && elementMatcher(matchers),
3192                    i2 > 1 && toSelector(
3193                      // If the preceding token was a descendant combinator, insert an implicit any-element `*`
3194                      tokens.slice(0, i2 - 1).concat({ value: tokens[i2 - 2].type === " " ? "*" : "" })
3195                    ).replace(rtrimCSS, "$1"),
3196                    matcher,
3197                    i2 < j && matcherFromTokens(tokens.slice(i2, j)),
3198                    j < len && matcherFromTokens(tokens = tokens.slice(j)),
3199                    j < len && toSelector(tokens)
3200                  );
3201                }
3202                matchers.push(matcher);
3203              }
3204            }
3205            return elementMatcher(matchers);
3206          }
3207          function matcherFromGroupMatchers(elementMatchers, setMatchers) {
3208            var bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function(seed, context, xml, results, outermost) {
3209              var elem, j, matcher, matchedCount = 0, i2 = "0", unmatched = seed && [], setMatched = [], contextBackup = outermostContext, elems = seed || byElement && Expr.find.TAG("*", outermost), dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1, len = elems.length;
3210              if (outermost) {
3211                outermostContext = context == document3 || context || outermost;
3212              }
3213              for (; i2 !== len && (elem = elems[i2]) != null; i2++) {
3214                if (byElement && elem) {
3215                  j = 0;
3216                  if (!context && elem.ownerDocument != document3) {
3217                    setDocument(elem);
3218                    xml = !documentIsHTML;
3219                  }
3220                  while (matcher = elementMatchers[j++]) {
3221                    if (matcher(elem, context || document3, xml)) {
3222                      push2.call(results, elem);
3223                      break;
3224                    }
3225                  }
3226                  if (outermost) {
3227                    dirruns = dirrunsUnique;
3228                  }
3229                }
3230                if (bySet) {
3231                  if (elem = !matcher && elem) {
3232                    matchedCount--;
3233                  }
3234                  if (seed) {
3235                    unmatched.push(elem);
3236                  }
3237                }
3238              }
3239              matchedCount += i2;
3240              if (bySet && i2 !== matchedCount) {
3241                j = 0;
3242                while (matcher = setMatchers[j++]) {
3243                  matcher(unmatched, setMatched, context, xml);
3244                }
3245                if (seed) {
3246                  if (matchedCount > 0) {
3247                    while (i2--) {
3248                      if (!(unmatched[i2] || setMatched[i2])) {
3249                        setMatched[i2] = pop.call(results);
3250                      }
3251                    }
3252                  }
3253                  setMatched = condense(setMatched);
3254                }
3255                push2.apply(results, setMatched);
3256                if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {
3257                  jQuery2.uniqueSort(results);
3258                }
3259              }
3260              if (outermost) {
3261                dirruns = dirrunsUnique;
3262                outermostContext = contextBackup;
3263              }
3264              return unmatched;
3265            };
3266            return bySet ? markFunction(superMatcher) : superMatcher;
3267          }
3268          function compile(selector, match) {
3269            var i2, setMatchers = [], elementMatchers = [], cached = compilerCache[selector + " "];
3270            if (!cached) {
3271              if (!match) {
3272                match = tokenize(selector);
3273              }
3274              i2 = match.length;
3275              while (i2--) {
3276                cached = matcherFromTokens(match[i2]);
3277                if (cached[expando]) {
3278                  setMatchers.push(cached);
3279                } else {
3280                  elementMatchers.push(cached);
3281                }
3282              }
3283              cached = compilerCache(
3284                selector,
3285                matcherFromGroupMatchers(elementMatchers, setMatchers)
3286              );
3287              cached.selector = selector;
3288            }
3289            return cached;
3290          }
3291          function select(selector, context, results, seed) {
3292            var i2, tokens, token, type, find2, compiled = typeof selector === "function" && selector, match = !seed && tokenize(selector = compiled.selector || selector);
3293            results = results || [];
3294            if (match.length === 1) {
3295              tokens = match[0] = match[0].slice(0);
3296              if (tokens.length > 2 && (token = tokens[0]).type === "ID" && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {
3297                context = (Expr.find.ID(
3298                  token.matches[0].replace(runescape, funescape),
3299                  context
3300                ) || [])[0];
3301                if (!context) {
3302                  return results;
3303                } else if (compiled) {
3304                  context = context.parentNode;
3305                }
3306                selector = selector.slice(tokens.shift().value.length);
3307              }
3308              i2 = matchExpr.needsContext.test(selector) ? 0 : tokens.length;
3309              while (i2--) {
3310                token = tokens[i2];
3311                if (Expr.relative[type = token.type]) {
3312                  break;
3313                }
3314                if (find2 = Expr.find[type]) {
3315                  if (seed = find2(
3316                    token.matches[0].replace(runescape, funescape),
3317                    rsibling.test(tokens[0].type) && testContext(context.parentNode) || context
3318                  )) {
3319                    tokens.splice(i2, 1);
3320                    selector = seed.length && toSelector(tokens);
3321                    if (!selector) {
3322                      push2.apply(results, seed);
3323                      return results;
3324                    }
3325                    break;
3326                  }
3327                }
3328              }
3329            }
3330            (compiled || compile(selector, match))(
3331              seed,
3332              context,
3333              !documentIsHTML,
3334              results,
3335              !context || rsibling.test(selector) && testContext(context.parentNode) || context
3336            );
3337            return results;
3338          }
3339          support.sortStable = expando.split("").sort(sortOrder).join("") === expando;
3340          setDocument();
3341          support.sortDetached = assert(function(el) {
3342            return el.compareDocumentPosition(document3.createElement("fieldset")) & 1;
3343          });
3344          jQuery2.find = find;
3345          jQuery2.expr[":"] = jQuery2.expr.pseudos;
3346          jQuery2.unique = jQuery2.uniqueSort;
3347          find.compile = compile;
3348          find.select = select;
3349          find.setDocument = setDocument;
3350          find.tokenize = tokenize;
3351          find.escape = jQuery2.escapeSelector;
3352          find.getText = jQuery2.text;
3353          find.isXML = jQuery2.isXMLDoc;
3354          find.selectors = jQuery2.expr;
3355          find.support = jQuery2.support;
3356          find.uniqueSort = jQuery2.uniqueSort;
3357        })();
3358        var dir = function(elem, dir2, until) {
3359          var matched = [], truncate = until !== void 0;
3360          while ((elem = elem[dir2]) && elem.nodeType !== 9) {
3361            if (elem.nodeType === 1) {
3362              if (truncate && jQuery2(elem).is(until)) {
3363                break;
3364              }
3365              matched.push(elem);
3366            }
3367          }
3368          return matched;
3369        };
3370        var siblings = function(n, elem) {
3371          var matched = [];
3372          for (; n; n = n.nextSibling) {
3373            if (n.nodeType === 1 && n !== elem) {
3374              matched.push(n);
3375            }
3376          }
3377          return matched;
3378        };
3379        var rneedsContext = jQuery2.expr.match.needsContext;
3380        var rsingleTag = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;
3381        function winnow(elements, qualifier, not) {
3382          if (isFunction(qualifier)) {
3383            return jQuery2.grep(elements, function(elem, i) {
3384              return !!qualifier.call(elem, i, elem) !== not;
3385            });
3386          }
3387          if (qualifier.nodeType) {
3388            return jQuery2.grep(elements, function(elem) {
3389              return elem === qualifier !== not;
3390            });
3391          }
3392          if (typeof qualifier !== "string") {
3393            return jQuery2.grep(elements, function(elem) {
3394              return indexOf2.call(qualifier, elem) > -1 !== not;
3395            });
3396          }
3397          return jQuery2.filter(qualifier, elements, not);
3398        }
3399        jQuery2.filter = function(expr, elems, not) {
3400          var elem = elems[0];
3401          if (not) {
3402            expr = ":not(" + expr + ")";
3403          }
3404          if (elems.length === 1 && elem.nodeType === 1) {
3405            return jQuery2.find.matchesSelector(elem, expr) ? [elem] : [];
3406          }
3407          return jQuery2.find.matches(expr, jQuery2.grep(elems, function(elem2) {
3408            return elem2.nodeType === 1;
3409          }));
3410        };
3411        jQuery2.fn.extend({
3412          find: function(selector) {
3413            var i, ret, len = this.length, self2 = this;
3414            if (typeof selector !== "string") {
3415              return this.pushStack(jQuery2(selector).filter(function() {
3416                for (i = 0; i < len; i++) {
3417                  if (jQuery2.contains(self2[i], this)) {
3418                    return true;
3419                  }
3420                }
3421              }));
3422            }
3423            ret = this.pushStack([]);
3424            for (i = 0; i < len; i++) {
3425              jQuery2.find(selector, self2[i], ret);
3426            }
3427            return len > 1 ? jQuery2.uniqueSort(ret) : ret;
3428          },
3429          filter: function(selector) {
3430            return this.pushStack(winnow(this, selector || [], false));
3431          },
3432          not: function(selector) {
3433            return this.pushStack(winnow(this, selector || [], true));
3434          },
3435          is: function(selector) {
3436            return !!winnow(
3437              this,
3438              // If this is a positional/relative selector, check membership in the returned set
3439              // so $("p:first").is("p:last") won't return true for a doc with two "p".
3440              typeof selector === "string" && rneedsContext.test(selector) ? jQuery2(selector) : selector || [],
3441              false
3442            ).length;
3443          }
3444        });
3445        var rootjQuery, rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, init = jQuery2.fn.init = function(selector, context, root) {
3446          var match, elem;
3447          if (!selector) {
3448            return this;
3449          }
3450          root = root || rootjQuery;
3451          if (typeof selector === "string") {
3452            if (selector[0] === "<" && selector[selector.length - 1] === ">" && selector.length >= 3) {
3453              match = [null, selector, null];
3454            } else {
3455              match = rquickExpr.exec(selector);
3456            }
3457            if (match && (match[1] || !context)) {
3458              if (match[1]) {
3459                context = context instanceof jQuery2 ? context[0] : context;
3460                jQuery2.merge(this, jQuery2.parseHTML(
3461                  match[1],
3462                  context && context.nodeType ? context.ownerDocument || context : document2,
3463                  true
3464                ));
3465                if (rsingleTag.test(match[1]) && jQuery2.isPlainObject(context)) {
3466                  for (match in context) {
3467                    if (isFunction(this[match])) {
3468                      this[match](context[match]);
3469                    } else {
3470                      this.attr(match, context[match]);
3471                    }
3472                  }
3473                }
3474                return this;
3475              } else {
3476                elem = document2.getElementById(match[2]);
3477                if (elem) {
3478                  this[0] = elem;
3479                  this.length = 1;
3480                }
3481                return this;
3482              }
3483            } else if (!context || context.jquery) {
3484              return (context || root).find(selector);
3485            } else {
3486              return this.constructor(context).find(selector);
3487            }
3488          } else if (selector.nodeType) {
3489            this[0] = selector;
3490            this.length = 1;
3491            return this;
3492          } else if (isFunction(selector)) {
3493            return root.ready !== void 0 ? root.ready(selector) : (
3494              // Execute immediately if ready is not present
3495              selector(jQuery2)
3496            );
3497          }
3498          return jQuery2.makeArray(selector, this);
3499        };
3500        init.prototype = jQuery2.fn;
3501        rootjQuery = jQuery2(document2);
3502        var rparentsprev = /^(?:parents|prev(?:Until|All))/, guaranteedUnique = {
3503          children: true,
3504          contents: true,
3505          next: true,
3506          prev: true
3507        };
3508        jQuery2.fn.extend({
3509          has: function(target) {
3510            var targets = jQuery2(target, this), l = targets.length;
3511            return this.filter(function() {
3512              var i = 0;
3513              for (; i < l; i++) {
3514                if (jQuery2.contains(this, targets[i])) {
3515                  return true;
3516                }
3517              }
3518            });
3519          },
3520          closest: function(selectors, context) {
3521            var cur, i = 0, l = this.length, matched = [], targets = typeof selectors !== "string" && jQuery2(selectors);
3522            if (!rneedsContext.test(selectors)) {
3523              for (; i < l; i++) {
3524                for (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {
3525                  if (cur.nodeType < 11 && (targets ? targets.index(cur) > -1 : (
3526                    // Don't pass non-elements to jQuery#find
3527                    cur.nodeType === 1 && jQuery2.find.matchesSelector(cur, selectors)
3528                  ))) {
3529                    matched.push(cur);
3530                    break;
3531                  }
3532                }
3533              }
3534            }
3535            return this.pushStack(matched.length > 1 ? jQuery2.uniqueSort(matched) : matched);
3536          },
3537          // Determine the position of an element within the set
3538          index: function(elem) {
3539            if (!elem) {
3540              return this[0] && this[0].parentNode ? this.first().prevAll().length : -1;
3541            }
3542            if (typeof elem === "string") {
3543              return indexOf2.call(jQuery2(elem), this[0]);
3544            }
3545            return indexOf2.call(
3546              this,
3547              // If it receives a jQuery object, the first element is used
3548              elem.jquery ? elem[0] : elem
3549            );
3550          },
3551          add: function(selector, context) {
3552            return this.pushStack(
3553              jQuery2.uniqueSort(
3554                jQuery2.merge(this.get(), jQuery2(selector, context))
3555              )
3556            );
3557          },
3558          addBack: function(selector) {
3559            return this.add(
3560              selector == null ? this.prevObject : this.prevObject.filter(selector)
3561            );
3562          }
3563        });
3564        function sibling(cur, dir2) {
3565          while ((cur = cur[dir2]) && cur.nodeType !== 1) {
3566          }
3567          return cur;
3568        }
3569        jQuery2.each({
3570          parent: function(elem) {
3571            var parent = elem.parentNode;
3572            return parent && parent.nodeType !== 11 ? parent : null;
3573          },
3574          parents: function(elem) {
3575            return dir(elem, "parentNode");
3576          },
3577          parentsUntil: function(elem, _i, until) {
3578            return dir(elem, "parentNode", until);
3579          },
3580          next: function(elem) {
3581            return sibling(elem, "nextSibling");
3582          },
3583          prev: function(elem) {
3584            return sibling(elem, "previousSibling");
3585          },
3586          nextAll: function(elem) {
3587            return dir(elem, "nextSibling");
3588          },
3589          prevAll: function(elem) {
3590            return dir(elem, "previousSibling");
3591          },
3592          nextUntil: function(elem, _i, until) {
3593            return dir(elem, "nextSibling", until);
3594          },
3595          prevUntil: function(elem, _i, until) {
3596            return dir(elem, "previousSibling", until);
3597          },
3598          siblings: function(elem) {
3599            return siblings((elem.parentNode || {}).firstChild, elem);
3600          },
3601          children: function(elem) {
3602            return siblings(elem.firstChild);
3603          },
3604          contents: function(elem) {
3605            if (elem.contentDocument != null && // Support: IE 11+
3606            // <object> elements with no `data` attribute has an object
3607            // `contentDocument` with a `null` prototype.
3608            getProto(elem.contentDocument)) {
3609              return elem.contentDocument;
3610            }
3611            if (nodeName(elem, "template")) {
3612              elem = elem.content || elem;
3613            }
3614            return jQuery2.merge([], elem.childNodes);
3615          }
3616        }, function(name, fn) {
3617          jQuery2.fn[name] = function(until, selector) {
3618            var matched = jQuery2.map(this, fn, until);
3619            if (name.slice(-5) !== "Until") {
3620              selector = until;
3621            }
3622            if (selector && typeof selector === "string") {
3623              matched = jQuery2.filter(selector, matched);
3624            }
3625            if (this.length > 1) {
3626              if (!guaranteedUnique[name]) {
3627                jQuery2.uniqueSort(matched);
3628              }
3629              if (rparentsprev.test(name)) {
3630                matched.reverse();
3631              }
3632            }
3633            return this.pushStack(matched);
3634          };
3635        });
3636        var rnothtmlwhite = /[^\x20\t\r\n\f]+/g;
3637        function createOptions(options) {
3638          var object = {};
3639          jQuery2.each(options.match(rnothtmlwhite) || [], function(_, flag) {
3640            object[flag] = true;
3641          });
3642          return object;
3643        }
3644        jQuery2.Callbacks = function(options) {
3645          options = typeof options === "string" ? createOptions(options) : jQuery2.extend({}, options);
3646          var firing, memory, fired, locked, list = [], queue = [], firingIndex = -1, fire = function() {
3647            locked = locked || options.once;
3648            fired = firing = true;
3649            for (; queue.length; firingIndex = -1) {
3650              memory = queue.shift();
3651              while (++firingIndex < list.length) {
3652                if (list[firingIndex].apply(memory[0], memory[1]) === false && options.stopOnFalse) {
3653                  firingIndex = list.length;
3654                  memory = false;
3655                }
3656              }
3657            }
3658            if (!options.memory) {
3659              memory = false;
3660            }
3661            firing = false;
3662            if (locked) {
3663              if (memory) {
3664                list = [];
3665              } else {
3666                list = "";
3667              }
3668            }
3669          }, self2 = {
3670            // Add a callback or a collection of callbacks to the list
3671            add: function() {
3672              if (list) {
3673                if (memory && !firing) {
3674                  firingIndex = list.length - 1;
3675                  queue.push(memory);
3676                }
3677                (function add(args) {
3678                  jQuery2.each(args, function(_, arg) {
3679                    if (isFunction(arg)) {
3680                      if (!options.unique || !self2.has(arg)) {
3681                        list.push(arg);
3682                      }
3683                    } else if (arg && arg.length && toType(arg) !== "string") {
3684                      add(arg);
3685                    }
3686                  });
3687                })(arguments);
3688                if (memory && !firing) {
3689                  fire();
3690                }
3691              }
3692              return this;
3693            },
3694            // Remove a callback from the list
3695            remove: function() {
3696              jQuery2.each(arguments, function(_, arg) {
3697                var index;
3698                while ((index = jQuery2.inArray(arg, list, index)) > -1) {
3699                  list.splice(index, 1);
3700                  if (index <= firingIndex) {
3701                    firingIndex--;
3702                  }
3703                }
3704              });
3705              return this;
3706            },
3707            // Check if a given callback is in the list.
3708            // If no argument is given, return whether or not list has callbacks attached.
3709            has: function(fn) {
3710              return fn ? jQuery2.inArray(fn, list) > -1 : list.length > 0;
3711            },
3712            // Remove all callbacks from the list
3713            empty: function() {
3714              if (list) {
3715                list = [];
3716              }
3717              return this;
3718            },
3719            // Disable .fire and .add
3720            // Abort any current/pending executions
3721            // Clear all callbacks and values
3722            disable: function() {
3723              locked = queue = [];
3724              list = memory = "";
3725              return this;
3726            },
3727            disabled: function() {
3728              return !list;
3729            },
3730            // Disable .fire
3731            // Also disable .add unless we have memory (since it would have no effect)
3732            // Abort any pending executions
3733            lock: function() {
3734              locked = queue = [];
3735              if (!memory && !firing) {
3736                list = memory = "";
3737              }
3738              return this;
3739            },
3740            locked: function() {
3741              return !!locked;
3742            },
3743            // Call all callbacks with the given context and arguments
3744            fireWith: function(context, args) {
3745              if (!locked) {
3746                args = args || [];
3747                args = [context, args.slice ? args.slice() : args];
3748                queue.push(args);
3749                if (!firing) {
3750                  fire();
3751                }
3752              }
3753              return this;
3754            },
3755            // Call all the callbacks with the given arguments
3756            fire: function() {
3757              self2.fireWith(this, arguments);
3758              return this;
3759            },
3760            // To know if the callbacks have already been called at least once
3761            fired: function() {
3762              return !!fired;
3763            }
3764          };
3765          return self2;
3766        };
3767        function Identity(v) {
3768          return v;
3769        }
3770        function Thrower(ex) {
3771          throw ex;
3772        }
3773        function adoptValue(value, resolve, reject, noValue) {
3774          var method;
3775          try {
3776            if (value && isFunction(method = value.promise)) {
3777              method.call(value).done(resolve).fail(reject);
3778            } else if (value && isFunction(method = value.then)) {
3779              method.call(value, resolve, reject);
3780            } else {
3781              resolve.apply(void 0, [value].slice(noValue));
3782            }
3783          } catch (value2) {
3784            reject.apply(void 0, [value2]);
3785          }
3786        }
3787        jQuery2.extend({
3788          Deferred: function(func) {
3789            var tuples = [
3790              // action, add listener, callbacks,
3791              // ... .then handlers, argument index, [final state]
3792              [
3793                "notify",
3794                "progress",
3795                jQuery2.Callbacks("memory"),
3796                jQuery2.Callbacks("memory"),
3797                2
3798              ],
3799              [
3800                "resolve",
3801                "done",
3802                jQuery2.Callbacks("once memory"),
3803                jQuery2.Callbacks("once memory"),
3804                0,
3805                "resolved"
3806              ],
3807              [
3808                "reject",
3809                "fail",
3810                jQuery2.Callbacks("once memory"),
3811                jQuery2.Callbacks("once memory"),
3812                1,
3813                "rejected"
3814              ]
3815            ], state = "pending", promise = {
3816              state: function() {
3817                return state;
3818              },
3819              always: function() {
3820                deferred.done(arguments).fail(arguments);
3821                return this;
3822              },
3823              "catch": function(fn) {
3824                return promise.then(null, fn);
3825              },
3826              // Keep pipe for back-compat
3827              pipe: function() {
3828                var fns = arguments;
3829                return jQuery2.Deferred(function(newDefer) {
3830                  jQuery2.each(tuples, function(_i, tuple) {
3831                    var fn = isFunction(fns[tuple[4]]) && fns[tuple[4]];
3832                    deferred[tuple[1]](function() {
3833                      var returned = fn && fn.apply(this, arguments);
3834                      if (returned && isFunction(returned.promise)) {
3835                        returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject);
3836                      } else {
3837                        newDefer[tuple[0] + "With"](
3838                          this,
3839                          fn ? [returned] : arguments
3840                        );
3841                      }
3842                    });
3843                  });
3844                  fns = null;
3845                }).promise();
3846              },
3847              then: function(onFulfilled, onRejected, onProgress) {
3848                var maxDepth = 0;
3849                function resolve(depth, deferred2, handler, special) {
3850                  return function() {
3851                    var that = this, args = arguments, mightThrow = function() {
3852                      var returned, then;
3853                      if (depth < maxDepth) {
3854                        return;
3855                      }
3856                      returned = handler.apply(that, args);
3857                      if (returned === deferred2.promise()) {
3858                        throw new TypeError("Thenable self-resolution");
3859                      }
3860                      then = returned && // Support: Promises/A+ section 2.3.4
3861                      // https://promisesaplus.com/#point-64
3862                      // Only check objects and functions for thenability
3863                      (typeof returned === "object" || typeof returned === "function") && returned.then;
3864                      if (isFunction(then)) {
3865                        if (special) {
3866                          then.call(
3867                            returned,
3868                            resolve(maxDepth, deferred2, Identity, special),
3869                            resolve(maxDepth, deferred2, Thrower, special)
3870                          );
3871                        } else {
3872                          maxDepth++;
3873                          then.call(
3874                            returned,
3875                            resolve(maxDepth, deferred2, Identity, special),
3876                            resolve(maxDepth, deferred2, Thrower, special),
3877                            resolve(
3878                              maxDepth,
3879                              deferred2,
3880                              Identity,
3881                              deferred2.notifyWith
3882                            )
3883                          );
3884                        }
3885                      } else {
3886                        if (handler !== Identity) {
3887                          that = void 0;
3888                          args = [returned];
3889                        }
3890                        (special || deferred2.resolveWith)(that, args);
3891                      }
3892                    }, process = special ? mightThrow : function() {
3893                      try {
3894                        mightThrow();
3895                      } catch (e) {
3896                        if (jQuery2.Deferred.exceptionHook) {
3897                          jQuery2.Deferred.exceptionHook(
3898                            e,
3899                            process.error
3900                          );
3901                        }
3902                        if (depth + 1 >= maxDepth) {
3903                          if (handler !== Thrower) {
3904                            that = void 0;
3905                            args = [e];
3906                          }
3907                          deferred2.rejectWith(that, args);
3908                        }
3909                      }
3910                    };
3911                    if (depth) {
3912                      process();
3913                    } else {
3914                      if (jQuery2.Deferred.getErrorHook) {
3915                        process.error = jQuery2.Deferred.getErrorHook();
3916                      } else if (jQuery2.Deferred.getStackHook) {
3917                        process.error = jQuery2.Deferred.getStackHook();
3918                      }
3919                      window2.setTimeout(process);
3920                    }
3921                  };
3922                }
3923                return jQuery2.Deferred(function(newDefer) {
3924                  tuples[0][3].add(
3925                    resolve(
3926                      0,
3927                      newDefer,
3928                      isFunction(onProgress) ? onProgress : Identity,
3929                      newDefer.notifyWith
3930                    )
3931                  );
3932                  tuples[1][3].add(
3933                    resolve(
3934                      0,
3935                      newDefer,
3936                      isFunction(onFulfilled) ? onFulfilled : Identity
3937                    )
3938                  );
3939                  tuples[2][3].add(
3940                    resolve(
3941                      0,
3942                      newDefer,
3943                      isFunction(onRejected) ? onRejected : Thrower
3944                    )
3945                  );
3946                }).promise();
3947              },
3948              // Get a promise for this deferred
3949              // If obj is provided, the promise aspect is added to the object
3950              promise: function(obj) {
3951                return obj != null ? jQuery2.extend(obj, promise) : promise;
3952              }
3953            }, deferred = {};
3954            jQuery2.each(tuples, function(i, tuple) {
3955              var list = tuple[2], stateString = tuple[5];
3956              promise[tuple[1]] = list.add;
3957              if (stateString) {
3958                list.add(
3959                  function() {
3960                    state = stateString;
3961                  },
3962                  // rejected_callbacks.disable
3963                  // fulfilled_callbacks.disable
3964                  tuples[3 - i][2].disable,
3965                  // rejected_handlers.disable
3966                  // fulfilled_handlers.disable
3967                  tuples[3 - i][3].disable,
3968                  // progress_callbacks.lock
3969                  tuples[0][2].lock,
3970                  // progress_handlers.lock
3971                  tuples[0][3].lock
3972                );
3973              }
3974              list.add(tuple[3].fire);
3975              deferred[tuple[0]] = function() {
3976                deferred[tuple[0] + "With"](this === deferred ? void 0 : this, arguments);
3977                return this;
3978              };
3979              deferred[tuple[0] + "With"] = list.fireWith;
3980            });
3981            promise.promise(deferred);
3982            if (func) {
3983              func.call(deferred, deferred);
3984            }
3985            return deferred;
3986          },
3987          // Deferred helper
3988          when: function(singleValue) {
3989            var remaining = arguments.length, i = remaining, resolveContexts = Array(i), resolveValues = slice.call(arguments), primary = jQuery2.Deferred(), updateFunc = function(i2) {
3990              return function(value) {
3991                resolveContexts[i2] = this;
3992                resolveValues[i2] = arguments.length > 1 ? slice.call(arguments) : value;
3993                if (!--remaining) {
3994                  primary.resolveWith(resolveContexts, resolveValues);
3995                }
3996              };
3997            };
3998            if (remaining <= 1) {
3999              adoptValue(
4000                singleValue,
4001                primary.done(updateFunc(i)).resolve,
4002                primary.reject,
4003                !remaining
4004              );
4005              if (primary.state() === "pending" || isFunction(resolveValues[i] && resolveValues[i].then)) {
4006                return primary.then();
4007              }
4008            }
4009            while (i--) {
4010              adoptValue(resolveValues[i], updateFunc(i), primary.reject);
4011            }
4012            return primary.promise();
4013          }
4014        });
4015        var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
4016        jQuery2.Deferred.exceptionHook = function(error, asyncError) {
4017          if (window2.console && window2.console.warn && error && rerrorNames.test(error.name)) {
4018            window2.console.warn(
4019              "jQuery.Deferred exception: " + error.message,
4020              error.stack,
4021              asyncError
4022            );
4023          }
4024        };
4025        jQuery2.readyException = function(error) {
4026          window2.setTimeout(function() {
4027            throw error;
4028          });
4029        };
4030        var readyList = jQuery2.Deferred();
4031        jQuery2.fn.ready = function(fn) {
4032          readyList.then(fn).catch(function(error) {
4033            jQuery2.readyException(error);
4034          });
4035          return this;
4036        };
4037        jQuery2.extend({
4038          // Is the DOM ready to be used? Set to true once it occurs.
4039          isReady: false,
4040          // A counter to track how many items to wait for before
4041          // the ready event fires. See trac-6781
4042          readyWait: 1,
4043          // Handle when the DOM is ready
4044          ready: function(wait) {
4045            if (wait === true ? --jQuery2.readyWait : jQuery2.isReady) {
4046              return;
4047            }
4048            jQuery2.isReady = true;
4049            if (wait !== true && --jQuery2.readyWait > 0) {
4050              return;
4051            }
4052            readyList.resolveWith(document2, [jQuery2]);
4053          }
4054        });
4055        jQuery2.ready.then = readyList.then;
4056        function completed() {
4057          document2.removeEventListener("DOMContentLoaded", completed);
4058          window2.removeEventListener("load", completed);
4059          jQuery2.ready();
4060        }
4061        if (document2.readyState === "complete" || document2.readyState !== "loading" && !document2.documentElement.doScroll) {
4062          window2.setTimeout(jQuery2.ready);
4063        } else {
4064          document2.addEventListener("DOMContentLoaded", completed);
4065          window2.addEventListener("load", completed);
4066        }
4067        var access = function(elems, fn, key, value, chainable, emptyGet, raw) {
4068          var i = 0, len = elems.length, bulk = key == null;
4069          if (toType(key) === "object") {
4070            chainable = true;
4071            for (i in key) {
4072              access(elems, fn, i, key[i], true, emptyGet, raw);
4073            }
4074          } else if (value !== void 0) {
4075            chainable = true;
4076            if (!isFunction(value)) {
4077              raw = true;
4078            }
4079            if (bulk) {
4080              if (raw) {
4081                fn.call(elems, value);
4082                fn = null;
4083              } else {
4084                bulk = fn;
4085                fn = function(elem, _key, value2) {
4086                  return bulk.call(jQuery2(elem), value2);
4087                };
4088              }
4089            }
4090            if (fn) {
4091              for (; i < len; i++) {
4092                fn(
4093                  elems[i],
4094                  key,
4095                  raw ? value : value.call(elems[i], i, fn(elems[i], key))
4096                );
4097              }
4098            }
4099          }
4100          if (chainable) {
4101            return elems;
4102          }
4103          if (bulk) {
4104            return fn.call(elems);
4105          }
4106          return len ? fn(elems[0], key) : emptyGet;
4107        };
4108        var rmsPrefix = /^-ms-/, rdashAlpha = /-([a-z])/g;
4109        function fcamelCase(_all, letter) {
4110          return letter.toUpperCase();
4111        }
4112        function camelCase(string) {
4113          return string.replace(rmsPrefix, "ms-").replace(rdashAlpha, fcamelCase);
4114        }
4115        var acceptData = function(owner) {
4116          return owner.nodeType === 1 || owner.nodeType === 9 || !+owner.nodeType;
4117        };
4118        function Data() {
4119          this.expando = jQuery2.expando + Data.uid++;
4120        }
4121        Data.uid = 1;
4122        Data.prototype = {
4123          cache: function(owner) {
4124            var value = owner[this.expando];
4125            if (!value) {
4126              value = {};
4127              if (acceptData(owner)) {
4128                if (owner.nodeType) {
4129                  owner[this.expando] = value;
4130                } else {
4131                  Object.defineProperty(owner, this.expando, {
4132                    value,
4133                    configurable: true
4134                  });
4135                }
4136              }
4137            }
4138            return value;
4139          },
4140          set: function(owner, data, value) {
4141            var prop, cache = this.cache(owner);
4142            if (typeof data === "string") {
4143              cache[camelCase(data)] = value;
4144            } else {
4145              for (prop in data) {
4146                cache[camelCase(prop)] = data[prop];
4147              }
4148            }
4149            return cache;
4150          },
4151          get: function(owner, key) {
4152            return key === void 0 ? this.cache(owner) : (
4153              // Always use camelCase key (gh-2257)
4154              owner[this.expando] && owner[this.expando][camelCase(key)]
4155            );
4156          },
4157          access: function(owner, key, value) {
4158            if (key === void 0 || key && typeof key === "string" && value === void 0) {
4159              return this.get(owner, key);
4160            }
4161            this.set(owner, key, value);
4162            return value !== void 0 ? value : key;
4163          },
4164          remove: function(owner, key) {
4165            var i, cache = owner[this.expando];
4166            if (cache === void 0) {
4167              return;
4168            }
4169            if (key !== void 0) {
4170              if (Array.isArray(key)) {
4171                key = key.map(camelCase);
4172              } else {
4173                key = camelCase(key);
4174                key = key in cache ? [key] : key.match(rnothtmlwhite) || [];
4175              }
4176              i = key.length;
4177              while (i--) {
4178                delete cache[key[i]];
4179              }
4180            }
4181            if (key === void 0 || jQuery2.isEmptyObject(cache)) {
4182              if (owner.nodeType) {
4183                owner[this.expando] = void 0;
4184              } else {
4185                delete owner[this.expando];
4186              }
4187            }
4188          },
4189          hasData: function(owner) {
4190            var cache = owner[this.expando];
4191            return cache !== void 0 && !jQuery2.isEmptyObject(cache);
4192          }
4193        };
4194        var dataPriv = new Data();
4195        var dataUser = new Data();
4196        var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, rmultiDash = /[A-Z]/g;
4197        function getData(data) {
4198          if (data === "true") {
4199            return true;
4200          }
4201          if (data === "false") {
4202            return false;
4203          }
4204          if (data === "null") {
4205            return null;
4206          }
4207          if (data === +data + "") {
4208            return +data;
4209          }
4210          if (rbrace.test(data)) {
4211            return JSON.parse(data);
4212          }
4213          return data;
4214        }
4215        function dataAttr(elem, key, data) {
4216          var name;
4217          if (data === void 0 && elem.nodeType === 1) {
4218            name = "data-" + key.replace(rmultiDash, "-$&").toLowerCase();
4219            data = elem.getAttribute(name);
4220            if (typeof data === "string") {
4221              try {
4222                data = getData(data);
4223              } catch (e) {
4224              }
4225              dataUser.set(elem, key, data);
4226            } else {
4227              data = void 0;
4228            }
4229          }
4230          return data;
4231        }
4232        jQuery2.extend({
4233          hasData: function(elem) {
4234            return dataUser.hasData(elem) || dataPriv.hasData(elem);
4235          },
4236          data: function(elem, name, data) {
4237            return dataUser.access(elem, name, data);
4238          },
4239          removeData: function(elem, name) {
4240            dataUser.remove(elem, name);
4241          },
4242          // TODO: Now that all calls to _data and _removeData have been replaced
4243          // with direct calls to dataPriv methods, these can be deprecated.
4244          _data: function(elem, name, data) {
4245            return dataPriv.access(elem, name, data);
4246          },
4247          _removeData: function(elem, name) {
4248            dataPriv.remove(elem, name);
4249          }
4250        });
4251        jQuery2.fn.extend({
4252          data: function(key, value) {
4253            var i, name, data, elem = this[0], attrs = elem && elem.attributes;
4254            if (key === void 0) {
4255              if (this.length) {
4256                data = dataUser.get(elem);
4257                if (elem.nodeType === 1 && !dataPriv.get(elem, "hasDataAttrs")) {
4258                  i = attrs.length;
4259                  while (i--) {
4260                    if (attrs[i]) {
4261                      name = attrs[i].name;
4262                      if (name.indexOf("data-") === 0) {
4263                        name = camelCase(name.slice(5));
4264                        dataAttr(elem, name, data[name]);
4265                      }
4266                    }
4267                  }
4268                  dataPriv.set(elem, "hasDataAttrs", true);
4269                }
4270              }
4271              return data;
4272            }
4273            if (typeof key === "object") {
4274              return this.each(function() {
4275                dataUser.set(this, key);
4276              });
4277            }
4278            return access(this, function(value2) {
4279              var data2;
4280              if (elem && value2 === void 0) {
4281                data2 = dataUser.get(elem, key);
4282                if (data2 !== void 0) {
4283                  return data2;
4284                }
4285                data2 = dataAttr(elem, key);
4286                if (data2 !== void 0) {
4287                  return data2;
4288                }
4289                return;
4290              }
4291              this.each(function() {
4292                dataUser.set(this, key, value2);
4293              });
4294            }, null, value, arguments.length > 1, null, true);
4295          },
4296          removeData: function(key) {
4297            return this.each(function() {
4298              dataUser.remove(this, key);
4299            });
4300          }
4301        });
4302        jQuery2.extend({
4303          queue: function(elem, type, data) {
4304            var queue;
4305            if (elem) {
4306              type = (type || "fx") + "queue";
4307              queue = dataPriv.get(elem, type);
4308              if (data) {
4309                if (!queue || Array.isArray(data)) {
4310                  queue = dataPriv.access(elem, type, jQuery2.makeArray(data));
4311                } else {
4312                  queue.push(data);
4313                }
4314              }
4315              return queue || [];
4316            }
4317          },
4318          dequeue: function(elem, type) {
4319            type = type || "fx";
4320            var queue = jQuery2.queue(elem, type), startLength = queue.length, fn = queue.shift(), hooks = jQuery2._queueHooks(elem, type), next = function() {
4321              jQuery2.dequeue(elem, type);
4322            };
4323            if (fn === "inprogress") {
4324              fn = queue.shift();
4325              startLength--;
4326            }
4327            if (fn) {
4328              if (type === "fx") {
4329                queue.unshift("inprogress");
4330              }
4331              delete hooks.stop;
4332              fn.call(elem, next, hooks);
4333            }
4334            if (!startLength && hooks) {
4335              hooks.empty.fire();
4336            }
4337          },
4338          // Not public - generate a queueHooks object, or return the current one
4339          _queueHooks: function(elem, type) {
4340            var key = type + "queueHooks";
4341            return dataPriv.get(elem, key) || dataPriv.access(elem, key, {
4342              empty: jQuery2.Callbacks("once memory").add(function() {
4343                dataPriv.remove(elem, [type + "queue", key]);
4344              })
4345            });
4346          }
4347        });
4348        jQuery2.fn.extend({
4349          queue: function(type, data) {
4350            var setter = 2;
4351            if (typeof type !== "string") {
4352              data = type;
4353              type = "fx";
4354              setter--;
4355            }
4356            if (arguments.length < setter) {
4357              return jQuery2.queue(this[0], type);
4358            }
4359            return data === void 0 ? this : this.each(function() {
4360              var queue = jQuery2.queue(this, type, data);
4361              jQuery2._queueHooks(this, type);
4362              if (type === "fx" && queue[0] !== "inprogress") {
4363                jQuery2.dequeue(this, type);
4364              }
4365            });
4366          },
4367          dequeue: function(type) {
4368            return this.each(function() {
4369              jQuery2.dequeue(this, type);
4370            });
4371          },
4372          clearQueue: function(type) {
4373            return this.queue(type || "fx", []);
4374          },
4375          // Get a promise resolved when queues of a certain type
4376          // are emptied (fx is the type by default)
4377          promise: function(type, obj) {
4378            var tmp, count = 1, defer = jQuery2.Deferred(), elements = this, i = this.length, resolve = function() {
4379              if (!--count) {
4380                defer.resolveWith(elements, [elements]);
4381              }
4382            };
4383            if (typeof type !== "string") {
4384              obj = type;
4385              type = void 0;
4386            }
4387            type = type || "fx";
4388            while (i--) {
4389              tmp = dataPriv.get(elements[i], type + "queueHooks");
4390              if (tmp && tmp.empty) {
4391                count++;
4392                tmp.empty.add(resolve);
4393              }
4394            }
4395            resolve();
4396            return defer.promise(obj);
4397          }
4398        });
4399        var pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source;
4400        var rcssNum = new RegExp("^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i");
4401        var cssExpand = ["Top", "Right", "Bottom", "Left"];
4402        var documentElement = document2.documentElement;
4403        var isAttached = function(elem) {
4404          return jQuery2.contains(elem.ownerDocument, elem);
4405        }, composed = { composed: true };
4406        if (documentElement.getRootNode) {
4407          isAttached = function(elem) {
4408            return jQuery2.contains(elem.ownerDocument, elem) || elem.getRootNode(composed) === elem.ownerDocument;
4409          };
4410        }
4411        var isHiddenWithinTree = function(elem, el) {
4412          elem = el || elem;
4413          return elem.style.display === "none" || elem.style.display === "" && // Otherwise, check computed style
4414          // Support: Firefox <=43 - 45
4415          // Disconnected elements can have computed display: none, so first confirm that elem is
4416          // in the document.
4417          isAttached(elem) && jQuery2.css(elem, "display") === "none";
4418        };
4419        function adjustCSS(elem, prop, valueParts, tween) {
4420          var adjusted, scale, maxIterations = 20, currentValue = tween ? function() {
4421            return tween.cur();
4422          } : function() {
4423            return jQuery2.css(elem, prop, "");
4424          }, initial = currentValue(), unit = valueParts && valueParts[3] || (jQuery2.cssNumber[prop] ? "" : "px"), initialInUnit = elem.nodeType && (jQuery2.cssNumber[prop] || unit !== "px" && +initial) && rcssNum.exec(jQuery2.css(elem, prop));
4425          if (initialInUnit && initialInUnit[3] !== unit) {
4426            initial = initial / 2;
4427            unit = unit || initialInUnit[3];
4428            initialInUnit = +initial || 1;
4429            while (maxIterations--) {
4430              jQuery2.style(elem, prop, initialInUnit + unit);
4431              if ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {
4432                maxIterations = 0;
4433              }
4434              initialInUnit = initialInUnit / scale;
4435            }
4436            initialInUnit = initialInUnit * 2;
4437            jQuery2.style(elem, prop, initialInUnit + unit);
4438            valueParts = valueParts || [];
4439          }
4440          if (valueParts) {
4441            initialInUnit = +initialInUnit || +initial || 0;
4442            adjusted = valueParts[1] ? initialInUnit + (valueParts[1] + 1) * valueParts[2] : +valueParts[2];
4443            if (tween) {
4444              tween.unit = unit;
4445              tween.start = initialInUnit;
4446              tween.end = adjusted;
4447            }
4448          }
4449          return adjusted;
4450        }
4451        var defaultDisplayMap = {};
4452        function getDefaultDisplay(elem) {
4453          var temp, doc = elem.ownerDocument, nodeName2 = elem.nodeName, display = defaultDisplayMap[nodeName2];
4454          if (display) {
4455            return display;
4456          }
4457          temp = doc.body.appendChild(doc.createElement(nodeName2));
4458          display = jQuery2.css(temp, "display");
4459          temp.parentNode.removeChild(temp);
4460          if (display === "none") {
4461            display = "block";
4462          }
4463          defaultDisplayMap[nodeName2] = display;
4464          return display;
4465        }
4466        function showHide(elements, show) {
4467          var display, elem, values = [], index = 0, length = elements.length;
4468          for (; index < length; index++) {
4469            elem = elements[index];
4470            if (!elem.style) {
4471              continue;
4472            }
4473            display = elem.style.display;
4474            if (show) {
4475              if (display === "none") {
4476                values[index] = dataPriv.get(elem, "display") || null;
4477                if (!values[index]) {
4478                  elem.style.display = "";
4479                }
4480              }
4481              if (elem.style.display === "" && isHiddenWithinTree(elem)) {
4482                values[index] = getDefaultDisplay(elem);
4483              }
4484            } else {
4485              if (display !== "none") {
4486                values[index] = "none";
4487                dataPriv.set(elem, "display", display);
4488              }
4489            }
4490          }
4491          for (index = 0; index < length; index++) {
4492            if (values[index] != null) {
4493              elements[index].style.display = values[index];
4494            }
4495          }
4496          return elements;
4497        }
4498        jQuery2.fn.extend({
4499          show: function() {
4500            return showHide(this, true);
4501          },
4502          hide: function() {
4503            return showHide(this);
4504          },
4505          toggle: function(state) {
4506            if (typeof state === "boolean") {
4507              return state ? this.show() : this.hide();
4508            }
4509            return this.each(function() {
4510              if (isHiddenWithinTree(this)) {
4511                jQuery2(this).show();
4512              } else {
4513                jQuery2(this).hide();
4514              }
4515            });
4516          }
4517        });
4518        var rcheckableType = /^(?:checkbox|radio)$/i;
4519        var rtagName = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i;
4520        var rscriptType = /^$|^module$|\/(?:java|ecma)script/i;
4521        (function() {
4522          var fragment = document2.createDocumentFragment(), div = fragment.appendChild(document2.createElement("div")), input = document2.createElement("input");
4523          input.setAttribute("type", "radio");
4524          input.setAttribute("checked", "checked");
4525          input.setAttribute("name", "t");
4526          div.appendChild(input);
4527          support.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;
4528          div.innerHTML = "<textarea>x</textarea>";
4529          support.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;
4530          div.innerHTML = "<option></option>";
4531          support.option = !!div.lastChild;
4532        })();
4533        var wrapMap = {
4534          // XHTML parsers do not magically insert elements in the
4535          // same way that tag soup parsers do. So we cannot shorten
4536          // this by omitting <tbody> or other required elements.
4537          thead: [1, "<table>", "</table>"],
4538          col: [2, "<table><colgroup>", "</colgroup></table>"],
4539          tr: [2, "<table><tbody>", "</tbody></table>"],
4540          td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
4541          _default: [0, "", ""]
4542        };
4543        wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
4544        wrapMap.th = wrapMap.td;
4545        if (!support.option) {
4546          wrapMap.optgroup = wrapMap.option = [1, "<select multiple='multiple'>", "</select>"];
4547        }
4548        function getAll(context, tag) {
4549          var ret;
4550          if (typeof context.getElementsByTagName !== "undefined") {
4551            ret = context.getElementsByTagName(tag || "*");
4552          } else if (typeof context.querySelectorAll !== "undefined") {
4553            ret = context.querySelectorAll(tag || "*");
4554          } else {
4555            ret = [];
4556          }
4557          if (tag === void 0 || tag && nodeName(context, tag)) {
4558            return jQuery2.merge([context], ret);
4559          }
4560          return ret;
4561        }
4562        function setGlobalEval(elems, refElements) {
4563          var i = 0, l = elems.length;
4564          for (; i < l; i++) {
4565            dataPriv.set(
4566              elems[i],
4567              "globalEval",
4568              !refElements || dataPriv.get(refElements[i], "globalEval")
4569            );
4570          }
4571        }
4572        var rhtml = /<|&#?\w+;/;
4573        function buildFragment(elems, context, scripts, selection, ignored) {
4574          var elem, tmp, tag, wrap, attached, j, fragment = context.createDocumentFragment(), nodes = [], i = 0, l = elems.length;
4575          for (; i < l; i++) {
4576            elem = elems[i];
4577            if (elem || elem === 0) {
4578              if (toType(elem) === "object") {
4579                jQuery2.merge(nodes, elem.nodeType ? [elem] : elem);
4580              } else if (!rhtml.test(elem)) {
4581                nodes.push(context.createTextNode(elem));
4582              } else {
4583                tmp = tmp || fragment.appendChild(context.createElement("div"));
4584                tag = (rtagName.exec(elem) || ["", ""])[1].toLowerCase();
4585                wrap = wrapMap[tag] || wrapMap._default;
4586                tmp.innerHTML = wrap[1] + jQuery2.htmlPrefilter(elem) + wrap[2];
4587                j = wrap[0];
4588                while (j--) {
4589                  tmp = tmp.lastChild;
4590                }
4591                jQuery2.merge(nodes, tmp.childNodes);
4592                tmp = fragment.firstChild;
4593                tmp.textContent = "";
4594              }
4595            }
4596          }
4597          fragment.textContent = "";
4598          i = 0;
4599          while (elem = nodes[i++]) {
4600            if (selection && jQuery2.inArray(elem, selection) > -1) {
4601              if (ignored) {
4602                ignored.push(elem);
4603              }
4604              continue;
4605            }
4606            attached = isAttached(elem);
4607            tmp = getAll(fragment.appendChild(elem), "script");
4608            if (attached) {
4609              setGlobalEval(tmp);
4610            }
4611            if (scripts) {
4612              j = 0;
4613              while (elem = tmp[j++]) {
4614                if (rscriptType.test(elem.type || "")) {
4615                  scripts.push(elem);
4616                }
4617              }
4618            }
4619          }
4620          return fragment;
4621        }
4622        var rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
4623        function returnTrue() {
4624          return true;
4625        }
4626        function returnFalse() {
4627          return false;
4628        }
4629        function on(elem, types, selector, data, fn, one) {
4630          var origFn, type;
4631          if (typeof types === "object") {
4632            if (typeof selector !== "string") {
4633              data = data || selector;
4634              selector = void 0;
4635            }
4636            for (type in types) {
4637              on(elem, type, selector, data, types[type], one);
4638            }
4639            return elem;
4640          }
4641          if (data == null && fn == null) {
4642            fn = selector;
4643            data = selector = void 0;
4644          } else if (fn == null) {
4645            if (typeof selector === "string") {
4646              fn = data;
4647              data = void 0;
4648            } else {
4649              fn = data;
4650              data = selector;
4651              selector = void 0;
4652            }
4653          }
4654          if (fn === false) {
4655            fn = returnFalse;
4656          } else if (!fn) {
4657            return elem;
4658          }
4659          if (one === 1) {
4660            origFn = fn;
4661            fn = function(event2) {
4662              jQuery2().off(event2);
4663              return origFn.apply(this, arguments);
4664            };
4665            fn.guid = origFn.guid || (origFn.guid = jQuery2.guid++);
4666          }
4667          return elem.each(function() {
4668            jQuery2.event.add(this, types, fn, data, selector);
4669          });
4670        }
4671        jQuery2.event = {
4672          global: {},
4673          add: function(elem, types, handler, data, selector) {
4674            var handleObjIn, eventHandle, tmp, events, t2, handleObj, special, handlers, type, namespaces, origType, elemData = dataPriv.get(elem);
4675            if (!acceptData(elem)) {
4676              return;
4677            }
4678            if (handler.handler) {
4679              handleObjIn = handler;
4680              handler = handleObjIn.handler;
4681              selector = handleObjIn.selector;
4682            }
4683            if (selector) {
4684              jQuery2.find.matchesSelector(documentElement, selector);
4685            }
4686            if (!handler.guid) {
4687              handler.guid = jQuery2.guid++;
4688            }
4689            if (!(events = elemData.events)) {
4690              events = elemData.events = /* @__PURE__ */ Object.create(null);
4691            }
4692            if (!(eventHandle = elemData.handle)) {
4693              eventHandle = elemData.handle = function(e) {
4694                return typeof jQuery2 !== "undefined" && jQuery2.event.triggered !== e.type ? jQuery2.event.dispatch.apply(elem, arguments) : void 0;
4695              };
4696            }
4697            types = (types || "").match(rnothtmlwhite) || [""];
4698            t2 = types.length;
4699            while (t2--) {
4700              tmp = rtypenamespace.exec(types[t2]) || [];
4701              type = origType = tmp[1];
4702              namespaces = (tmp[2] || "").split(".").sort();
4703              if (!type) {
4704                continue;
4705              }
4706              special = jQuery2.event.special[type] || {};
4707              type = (selector ? special.delegateType : special.bindType) || type;
4708              special = jQuery2.event.special[type] || {};
4709              handleObj = jQuery2.extend({
4710                type,
4711                origType,
4712                data,
4713                handler,
4714                guid: handler.guid,
4715                selector,
4716                needsContext: selector && jQuery2.expr.match.needsContext.test(selector),
4717                namespace: namespaces.join(".")
4718              }, handleObjIn);
4719              if (!(handlers = events[type])) {
4720                handlers = events[type] = [];
4721                handlers.delegateCount = 0;
4722                if (!special.setup || special.setup.call(elem, data, namespaces, eventHandle) === false) {
4723                  if (elem.addEventListener) {
4724                    elem.addEventListener(type, eventHandle);
4725                  }
4726                }
4727              }
4728              if (special.add) {
4729                special.add.call(elem, handleObj);
4730                if (!handleObj.handler.guid) {
4731                  handleObj.handler.guid = handler.guid;
4732                }
4733              }
4734              if (selector) {
4735                handlers.splice(handlers.delegateCount++, 0, handleObj);
4736              } else {
4737                handlers.push(handleObj);
4738              }
4739              jQuery2.event.global[type] = true;
4740            }
4741          },
4742          // Detach an event or set of events from an element
4743          remove: function(elem, types, handler, selector, mappedTypes) {
4744            var j, origCount, tmp, events, t2, handleObj, special, handlers, type, namespaces, origType, elemData = dataPriv.hasData(elem) && dataPriv.get(elem);
4745            if (!elemData || !(events = elemData.events)) {
4746              return;
4747            }
4748            types = (types || "").match(rnothtmlwhite) || [""];
4749            t2 = types.length;
4750            while (t2--) {
4751              tmp = rtypenamespace.exec(types[t2]) || [];
4752              type = origType = tmp[1];
4753              namespaces = (tmp[2] || "").split(".").sort();
4754              if (!type) {
4755                for (type in events) {
4756                  jQuery2.event.remove(elem, type + types[t2], handler, selector, true);
4757                }
4758                continue;
4759              }
4760              special = jQuery2.event.special[type] || {};
4761              type = (selector ? special.delegateType : special.bindType) || type;
4762              handlers = events[type] || [];
4763              tmp = tmp[2] && new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)");
4764              origCount = j = handlers.length;
4765              while (j--) {
4766                handleObj = handlers[j];
4767                if ((mappedTypes || origType === handleObj.origType) && (!handler || handler.guid === handleObj.guid) && (!tmp || tmp.test(handleObj.namespace)) && (!selector || selector === handleObj.selector || selector === "**" && handleObj.selector)) {
4768                  handlers.splice(j, 1);
4769                  if (handleObj.selector) {
4770                    handlers.delegateCount--;
4771                  }
4772                  if (special.remove) {
4773                    special.remove.call(elem, handleObj);
4774                  }
4775                }
4776              }
4777              if (origCount && !handlers.length) {
4778                if (!special.teardown || special.teardown.call(elem, namespaces, elemData.handle) === false) {
4779                  jQuery2.removeEvent(elem, type, elemData.handle);
4780                }
4781                delete events[type];
4782              }
4783            }
4784            if (jQuery2.isEmptyObject(events)) {
4785              dataPriv.remove(elem, "handle events");
4786            }
4787          },
4788          dispatch: function(nativeEvent) {
4789            var i, j, ret, matched, handleObj, handlerQueue, args = new Array(arguments.length), event2 = jQuery2.event.fix(nativeEvent), handlers = (dataPriv.get(this, "events") || /* @__PURE__ */ Object.create(null))[event2.type] || [], special = jQuery2.event.special[event2.type] || {};
4790            args[0] = event2;
4791            for (i = 1; i < arguments.length; i++) {
4792              args[i] = arguments[i];
4793            }
4794            event2.delegateTarget = this;
4795            if (special.preDispatch && special.preDispatch.call(this, event2) === false) {
4796              return;
4797            }
4798            handlerQueue = jQuery2.event.handlers.call(this, event2, handlers);
4799            i = 0;
4800            while ((matched = handlerQueue[i++]) && !event2.isPropagationStopped()) {
4801              event2.currentTarget = matched.elem;
4802              j = 0;
4803              while ((handleObj = matched.handlers[j++]) && !event2.isImmediatePropagationStopped()) {
4804                if (!event2.rnamespace || handleObj.namespace === false || event2.rnamespace.test(handleObj.namespace)) {
4805                  event2.handleObj = handleObj;
4806                  event2.data = handleObj.data;
4807                  ret = ((jQuery2.event.special[handleObj.origType] || {}).handle || handleObj.handler).apply(matched.elem, args);
4808                  if (ret !== void 0) {
4809                    if ((event2.result = ret) === false) {
4810                      event2.preventDefault();
4811                      event2.stopPropagation();
4812                    }
4813                  }
4814                }
4815              }
4816            }
4817            if (special.postDispatch) {
4818              special.postDispatch.call(this, event2);
4819            }
4820            return event2.result;
4821          },
4822          handlers: function(event2, handlers) {
4823            var i, handleObj, sel, matchedHandlers, matchedSelectors, handlerQueue = [], delegateCount = handlers.delegateCount, cur = event2.target;
4824            if (delegateCount && // Support: IE <=9
4825            // Black-hole SVG <use> instance trees (trac-13180)
4826            cur.nodeType && // Support: Firefox <=42
4827            // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
4828            // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
4829            // Support: IE 11 only
4830            // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
4831            !(event2.type === "click" && event2.button >= 1)) {
4832              for (; cur !== this; cur = cur.parentNode || this) {
4833                if (cur.nodeType === 1 && !(event2.type === "click" && cur.disabled === true)) {
4834                  matchedHandlers = [];
4835                  matchedSelectors = {};
4836                  for (i = 0; i < delegateCount; i++) {
4837                    handleObj = handlers[i];
4838                    sel = handleObj.selector + " ";
4839                    if (matchedSelectors[sel] === void 0) {
4840                      matchedSelectors[sel] = handleObj.needsContext ? jQuery2(sel, this).index(cur) > -1 : jQuery2.find(sel, this, null, [cur]).length;
4841                    }
4842                    if (matchedSelectors[sel]) {
4843                      matchedHandlers.push(handleObj);
4844                    }
4845                  }
4846                  if (matchedHandlers.length) {
4847                    handlerQueue.push({ elem: cur, handlers: matchedHandlers });
4848                  }
4849                }
4850              }
4851            }
4852            cur = this;
4853            if (delegateCount < handlers.length) {
4854              handlerQueue.push({ elem: cur, handlers: handlers.slice(delegateCount) });
4855            }
4856            return handlerQueue;
4857          },
4858          addProp: function(name, hook) {
4859            Object.defineProperty(jQuery2.Event.prototype, name, {
4860              enumerable: true,
4861              configurable: true,
4862              get: isFunction(hook) ? function() {
4863                if (this.originalEvent) {
4864                  return hook(this.originalEvent);
4865                }
4866              } : function() {
4867                if (this.originalEvent) {
4868                  return this.originalEvent[name];
4869                }
4870              },
4871              set: function(value) {
4872                Object.defineProperty(this, name, {
4873                  enumerable: true,
4874                  configurable: true,
4875                  writable: true,
4876                  value
4877                });
4878              }
4879            });
4880          },
4881          fix: function(originalEvent) {
4882            return originalEvent[jQuery2.expando] ? originalEvent : new jQuery2.Event(originalEvent);
4883          },
4884          special: {
4885            load: {
4886              // Prevent triggered image.load events from bubbling to window.load
4887              noBubble: true
4888            },
4889            click: {
4890              // Utilize native event to ensure correct state for checkable inputs
4891              setup: function(data) {
4892                var el = this || data;
4893                if (rcheckableType.test(el.type) && el.click && nodeName(el, "input")) {
4894                  leverageNative(el, "click", true);
4895                }
4896                return false;
4897              },
4898              trigger: function(data) {
4899                var el = this || data;
4900                if (rcheckableType.test(el.type) && el.click && nodeName(el, "input")) {
4901                  leverageNative(el, "click");
4902                }
4903                return true;
4904              },
4905              // For cross-browser consistency, suppress native .click() on links
4906              // Also prevent it if we're currently inside a leveraged native-event stack
4907              _default: function(event2) {
4908                var target = event2.target;
4909                return rcheckableType.test(target.type) && target.click && nodeName(target, "input") && dataPriv.get(target, "click") || nodeName(target, "a");
4910              }
4911            },
4912            beforeunload: {
4913              postDispatch: function(event2) {
4914                if (event2.result !== void 0 && event2.originalEvent) {
4915                  event2.originalEvent.returnValue = event2.result;
4916                }
4917              }
4918            }
4919          }
4920        };
4921        function leverageNative(el, type, isSetup) {
4922          if (!isSetup) {
4923            if (dataPriv.get(el, type) === void 0) {
4924              jQuery2.event.add(el, type, returnTrue);
4925            }
4926            return;
4927          }
4928          dataPriv.set(el, type, false);
4929          jQuery2.event.add(el, type, {
4930            namespace: false,
4931            handler: function(event2) {
4932              var result, saved = dataPriv.get(this, type);
4933              if (event2.isTrigger & 1 && this[type]) {
4934                if (!saved) {
4935                  saved = slice.call(arguments);
4936                  dataPriv.set(this, type, saved);
4937                  this[type]();
4938                  result = dataPriv.get(this, type);
4939                  dataPriv.set(this, type, false);
4940                  if (saved !== result) {
4941                    event2.stopImmediatePropagation();
4942                    event2.preventDefault();
4943                    return result;
4944                  }
4945                } else if ((jQuery2.event.special[type] || {}).delegateType) {
4946                  event2.stopPropagation();
4947                }
4948              } else if (saved) {
4949                dataPriv.set(this, type, jQuery2.event.trigger(
4950                  saved[0],
4951                  saved.slice(1),
4952                  this
4953                ));
4954                event2.stopPropagation();
4955                event2.isImmediatePropagationStopped = returnTrue;
4956              }
4957            }
4958          });
4959        }
4960        jQuery2.removeEvent = function(elem, type, handle) {
4961          if (elem.removeEventListener) {
4962            elem.removeEventListener(type, handle);
4963          }
4964        };
4965        jQuery2.Event = function(src, props) {
4966          if (!(this instanceof jQuery2.Event)) {
4967            return new jQuery2.Event(src, props);
4968          }
4969          if (src && src.type) {
4970            this.originalEvent = src;
4971            this.type = src.type;
4972            this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === void 0 && // Support: Android <=2.3 only
4973            src.returnValue === false ? returnTrue : returnFalse;
4974            this.target = src.target && src.target.nodeType === 3 ? src.target.parentNode : src.target;
4975            this.currentTarget = src.currentTarget;
4976            this.relatedTarget = src.relatedTarget;
4977          } else {
4978            this.type = src;
4979          }
4980          if (props) {
4981            jQuery2.extend(this, props);
4982          }
4983          this.timeStamp = src && src.timeStamp || Date.now();
4984          this[jQuery2.expando] = true;
4985        };
4986        jQuery2.Event.prototype = {
4987          constructor: jQuery2.Event,
4988          isDefaultPrevented: returnFalse,
4989          isPropagationStopped: returnFalse,
4990          isImmediatePropagationStopped: returnFalse,
4991          isSimulated: false,
4992          preventDefault: function() {
4993            var e = this.originalEvent;
4994            this.isDefaultPrevented = returnTrue;
4995            if (e && !this.isSimulated) {
4996              e.preventDefault();
4997            }
4998          },
4999          stopPropagation: function() {
5000            var e = this.originalEvent;
5001            this.isPropagationStopped = returnTrue;
5002            if (e && !this.isSimulated) {
5003              e.stopPropagation();
5004            }
5005          },
5006          stopImmediatePropagation: function() {
5007            var e = this.originalEvent;
5008            this.isImmediatePropagationStopped = returnTrue;
5009            if (e && !this.isSimulated) {
5010              e.stopImmediatePropagation();
5011            }
5012            this.stopPropagation();
5013          }
5014        };
5015        jQuery2.each({
5016          altKey: true,
5017          bubbles: true,
5018          cancelable: true,
5019          changedTouches: true,
5020          ctrlKey: true,
5021          detail: true,
5022          eventPhase: true,
5023          metaKey: true,
5024          pageX: true,
5025          pageY: true,
5026          shiftKey: true,
5027          view: true,
5028          "char": true,
5029          code: true,
5030          charCode: true,
5031          key: true,
5032          keyCode: true,
5033          button: true,
5034          buttons: true,
5035          clientX: true,
5036          clientY: true,
5037          offsetX: true,
5038          offsetY: true,
5039          pointerId: true,
5040          pointerType: true,
5041          screenX: true,
5042          screenY: true,
5043          targetTouches: true,
5044          toElement: true,
5045          touches: true,
5046          which: true
5047        }, jQuery2.event.addProp);
5048        jQuery2.each({ focus: "focusin", blur: "focusout" }, function(type, delegateType) {
5049          function focusMappedHandler(nativeEvent) {
5050            if (document2.documentMode) {
5051              var handle = dataPriv.get(this, "handle"), event2 = jQuery2.event.fix(nativeEvent);
5052              event2.type = nativeEvent.type === "focusin" ? "focus" : "blur";
5053              event2.isSimulated = true;
5054              handle(nativeEvent);
5055              if (event2.target === event2.currentTarget) {
5056                handle(event2);
5057              }
5058            } else {
5059              jQuery2.event.simulate(
5060                delegateType,
5061                nativeEvent.target,
5062                jQuery2.event.fix(nativeEvent)
5063              );
5064            }
5065          }
5066          jQuery2.event.special[type] = {
5067            // Utilize native event if possible so blur/focus sequence is correct
5068            setup: function() {
5069              var attaches;
5070              leverageNative(this, type, true);
5071              if (document2.documentMode) {
5072                attaches = dataPriv.get(this, delegateType);
5073                if (!attaches) {
5074                  this.addEventListener(delegateType, focusMappedHandler);
5075                }
5076                dataPriv.set(this, delegateType, (attaches || 0) + 1);
5077              } else {
5078                return false;
5079              }
5080            },
5081            trigger: function() {
5082              leverageNative(this, type);
5083              return true;
5084            },
5085            teardown: function() {
5086              var attaches;
5087              if (document2.documentMode) {
5088                attaches = dataPriv.get(this, delegateType) - 1;
5089                if (!attaches) {
5090                  this.removeEventListener(delegateType, focusMappedHandler);
5091                  dataPriv.remove(this, delegateType);
5092                } else {
5093                  dataPriv.set(this, delegateType, attaches);
5094                }
5095              } else {
5096                return false;
5097              }
5098            },
5099            // Suppress native focus or blur if we're currently inside
5100            // a leveraged native-event stack
5101            _default: function(event2) {
5102              return dataPriv.get(event2.target, type);
5103            },
5104            delegateType
5105          };
5106          jQuery2.event.special[delegateType] = {
5107            setup: function() {
5108              var doc = this.ownerDocument || this.document || this, dataHolder = document2.documentMode ? this : doc, attaches = dataPriv.get(dataHolder, delegateType);
5109              if (!attaches) {
5110                if (document2.documentMode) {
5111                  this.addEventListener(delegateType, focusMappedHandler);
5112                } else {
5113                  doc.addEventListener(type, focusMappedHandler, true);
5114                }
5115              }
5116              dataPriv.set(dataHolder, delegateType, (attaches || 0) + 1);
5117            },
5118            teardown: function() {
5119              var doc = this.ownerDocument || this.document || this, dataHolder = document2.documentMode ? this : doc, attaches = dataPriv.get(dataHolder, delegateType) - 1;
5120              if (!attaches) {
5121                if (document2.documentMode) {
5122                  this.removeEventListener(delegateType, focusMappedHandler);
5123                } else {
5124                  doc.removeEventListener(type, focusMappedHandler, true);
5125                }
5126                dataPriv.remove(dataHolder, delegateType);
5127              } else {
5128                dataPriv.set(dataHolder, delegateType, attaches);
5129              }
5130            }
5131          };
5132        });
5133        jQuery2.each({
5134          mouseenter: "mouseover",
5135          mouseleave: "mouseout",
5136          pointerenter: "pointerover",
5137          pointerleave: "pointerout"
5138        }, function(orig, fix) {
5139          jQuery2.event.special[orig] = {
5140            delegateType: fix,
5141            bindType: fix,
5142            handle: function(event2) {
5143              var ret, target = this, related = event2.relatedTarget, handleObj = event2.handleObj;
5144              if (!related || related !== target && !jQuery2.contains(target, related)) {
5145                event2.type = handleObj.origType;
5146                ret = handleObj.handler.apply(this, arguments);
5147                event2.type = fix;
5148              }
5149              return ret;
5150            }
5151          };
5152        });
5153        jQuery2.fn.extend({
5154          on: function(types, selector, data, fn) {
5155            return on(this, types, selector, data, fn);
5156          },
5157          one: function(types, selector, data, fn) {
5158            return on(this, types, selector, data, fn, 1);
5159          },
5160          off: function(types, selector, fn) {
5161            var handleObj, type;
5162            if (types && types.preventDefault && types.handleObj) {
5163              handleObj = types.handleObj;
5164              jQuery2(types.delegateTarget).off(
5165                handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
5166                handleObj.selector,
5167                handleObj.handler
5168              );
5169              return this;
5170            }
5171            if (typeof types === "object") {
5172              for (type in types) {
5173                this.off(type, selector, types[type]);
5174              }
5175              return this;
5176            }
5177            if (selector === false || typeof selector === "function") {
5178              fn = selector;
5179              selector = void 0;
5180            }
5181            if (fn === false) {
5182              fn = returnFalse;
5183            }
5184            return this.each(function() {
5185              jQuery2.event.remove(this, types, fn, selector);
5186            });
5187          }
5188        });
5189        var rnoInnerhtml = /<script|<style|<link/i, rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g;
5190        function manipulationTarget(elem, content) {
5191          if (nodeName(elem, "table") && nodeName(content.nodeType !== 11 ? content : content.firstChild, "tr")) {
5192            return jQuery2(elem).children("tbody")[0] || elem;
5193          }
5194          return elem;
5195        }
5196        function disableScript(elem) {
5197          elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type;
5198          return elem;
5199        }
5200        function restoreScript(elem) {
5201          if ((elem.type || "").slice(0, 5) === "true/") {
5202            elem.type = elem.type.slice(5);
5203          } else {
5204            elem.removeAttribute("type");
5205          }
5206          return elem;
5207        }
5208        function cloneCopyEvent(src, dest) {
5209          var i, l, type, pdataOld, udataOld, udataCur, events;
5210          if (dest.nodeType !== 1) {
5211            return;
5212          }
5213          if (dataPriv.hasData(src)) {
5214            pdataOld = dataPriv.get(src);
5215            events = pdataOld.events;
5216            if (events) {
5217              dataPriv.remove(dest, "handle events");
5218              for (type in events) {
5219                for (i = 0, l = events[type].length; i < l; i++) {
5220                  jQuery2.event.add(dest, type, events[type][i]);
5221                }
5222              }
5223            }
5224          }
5225          if (dataUser.hasData(src)) {
5226            udataOld = dataUser.access(src);
5227            udataCur = jQuery2.extend({}, udataOld);
5228            dataUser.set(dest, udataCur);
5229          }
5230        }
5231        function fixInput(src, dest) {
5232          var nodeName2 = dest.nodeName.toLowerCase();
5233          if (nodeName2 === "input" && rcheckableType.test(src.type)) {
5234            dest.checked = src.checked;
5235          } else if (nodeName2 === "input" || nodeName2 === "textarea") {
5236            dest.defaultValue = src.defaultValue;
5237          }
5238        }
5239        function domManip(collection, args, callback, ignored) {
5240          args = flat(args);
5241          var fragment, first, scripts, hasScripts, node, doc, i = 0, l = collection.length, iNoClone = l - 1, value = args[0], valueIsFunction = isFunction(value);
5242          if (valueIsFunction || l > 1 && typeof value === "string" && !support.checkClone && rchecked.test(value)) {
5243            return collection.each(function(index) {
5244              var self2 = collection.eq(index);
5245              if (valueIsFunction) {
5246                args[0] = value.call(this, index, self2.html());
5247              }
5248              domManip(self2, args, callback, ignored);
5249            });
5250          }
5251          if (l) {
5252            fragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);
5253            first = fragment.firstChild;
5254            if (fragment.childNodes.length === 1) {
5255              fragment = first;
5256            }
5257            if (first || ignored) {
5258              scripts = jQuery2.map(getAll(fragment, "script"), disableScript);
5259              hasScripts = scripts.length;
5260              for (; i < l; i++) {
5261                node = fragment;
5262                if (i !== iNoClone) {
5263                  node = jQuery2.clone(node, true, true);
5264                  if (hasScripts) {
5265                    jQuery2.merge(scripts, getAll(node, "script"));
5266                  }
5267                }
5268                callback.call(collection[i], node, i);
5269              }
5270              if (hasScripts) {
5271                doc = scripts[scripts.length - 1].ownerDocument;
5272                jQuery2.map(scripts, restoreScript);
5273                for (i = 0; i < hasScripts; i++) {
5274                  node = scripts[i];
5275                  if (rscriptType.test(node.type || "") && !dataPriv.access(node, "globalEval") && jQuery2.contains(doc, node)) {
5276                    if (node.src && (node.type || "").toLowerCase() !== "module") {
5277                      if (jQuery2._evalUrl && !node.noModule) {
5278                        jQuery2._evalUrl(node.src, {
5279                          nonce: node.nonce || node.getAttribute("nonce")
5280                        }, doc);
5281                      }
5282                    } else {
5283                      DOMEval(node.textContent.replace(rcleanScript, ""), node, doc);
5284                    }
5285                  }
5286                }
5287              }
5288            }
5289          }
5290          return collection;
5291        }
5292        function remove(elem, selector, keepData) {
5293          var node, nodes = selector ? jQuery2.filter(selector, elem) : elem, i = 0;
5294          for (; (node = nodes[i]) != null; i++) {
5295            if (!keepData && node.nodeType === 1) {
5296              jQuery2.cleanData(getAll(node));
5297            }
5298            if (node.parentNode) {
5299              if (keepData && isAttached(node)) {
5300                setGlobalEval(getAll(node, "script"));
5301              }
5302              node.parentNode.removeChild(node);
5303            }
5304          }
5305          return elem;
5306        }
5307        jQuery2.extend({
5308          htmlPrefilter: function(html) {
5309            return html;
5310          },
5311          clone: function(elem, dataAndEvents, deepDataAndEvents) {
5312            var i, l, srcElements, destElements, clone = elem.cloneNode(true), inPage = isAttached(elem);
5313            if (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery2.isXMLDoc(elem)) {
5314              destElements = getAll(clone);
5315              srcElements = getAll(elem);
5316              for (i = 0, l = srcElements.length; i < l; i++) {
5317                fixInput(srcElements[i], destElements[i]);
5318              }
5319            }
5320            if (dataAndEvents) {
5321              if (deepDataAndEvents) {
5322                srcElements = srcElements || getAll(elem);
5323                destElements = destElements || getAll(clone);
5324                for (i = 0, l = srcElements.length; i < l; i++) {
5325                  cloneCopyEvent(srcElements[i], destElements[i]);
5326                }
5327              } else {
5328                cloneCopyEvent(elem, clone);
5329              }
5330            }
5331            destElements = getAll(clone, "script");
5332            if (destElements.length > 0) {
5333              setGlobalEval(destElements, !inPage && getAll(elem, "script"));
5334            }
5335            return clone;
5336          },
5337          cleanData: function(elems) {
5338            var data, elem, type, special = jQuery2.event.special, i = 0;
5339            for (; (elem = elems[i]) !== void 0; i++) {
5340              if (acceptData(elem)) {
5341                if (data = elem[dataPriv.expando]) {
5342                  if (data.events) {
5343                    for (type in data.events) {
5344                      if (special[type]) {
5345                        jQuery2.event.remove(elem, type);
5346                      } else {
5347                        jQuery2.removeEvent(elem, type, data.handle);
5348                      }
5349                    }
5350                  }
5351                  elem[dataPriv.expando] = void 0;
5352                }
5353                if (elem[dataUser.expando]) {
5354                  elem[dataUser.expando] = void 0;
5355                }
5356              }
5357            }
5358          }
5359        });
5360        jQuery2.fn.extend({
5361          detach: function(selector) {
5362            return remove(this, selector, true);
5363          },
5364          remove: function(selector) {
5365            return remove(this, selector);
5366          },
5367          text: function(value) {
5368            return access(this, function(value2) {
5369              return value2 === void 0 ? jQuery2.text(this) : this.empty().each(function() {
5370                if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
5371                  this.textContent = value2;
5372                }
5373              });
5374            }, null, value, arguments.length);
5375          },
5376          append: function() {
5377            return domManip(this, arguments, function(elem) {
5378              if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
5379                var target = manipulationTarget(this, elem);
5380                target.appendChild(elem);
5381              }
5382            });
5383          },
5384          prepend: function() {
5385            return domManip(this, arguments, function(elem) {
5386              if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
5387                var target = manipulationTarget(this, elem);
5388                target.insertBefore(elem, target.firstChild);
5389              }
5390            });
5391          },
5392          before: function() {
5393            return domManip(this, arguments, function(elem) {
5394              if (this.parentNode) {
5395                this.parentNode.insertBefore(elem, this);
5396              }
5397            });
5398          },
5399          after: function() {
5400            return domManip(this, arguments, function(elem) {
5401              if (this.parentNode) {
5402                this.parentNode.insertBefore(elem, this.nextSibling);
5403              }
5404            });
5405          },
5406          empty: function() {
5407            var elem, i = 0;
5408            for (; (elem = this[i]) != null; i++) {
5409              if (elem.nodeType === 1) {
5410                jQuery2.cleanData(getAll(elem, false));
5411                elem.textContent = "";
5412              }
5413            }
5414            return this;
5415          },
5416          clone: function(dataAndEvents, deepDataAndEvents) {
5417            dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
5418            deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
5419            return this.map(function() {
5420              return jQuery2.clone(this, dataAndEvents, deepDataAndEvents);
5421            });
5422          },
5423          html: function(value) {
5424            return access(this, function(value2) {
5425              var elem = this[0] || {}, i = 0, l = this.length;
5426              if (value2 === void 0 && elem.nodeType === 1) {
5427                return elem.innerHTML;
5428              }
5429              if (typeof value2 === "string" && !rnoInnerhtml.test(value2) && !wrapMap[(rtagName.exec(value2) || ["", ""])[1].toLowerCase()]) {
5430                value2 = jQuery2.htmlPrefilter(value2);
5431                try {
5432                  for (; i < l; i++) {
5433                    elem = this[i] || {};
5434                    if (elem.nodeType === 1) {
5435                      jQuery2.cleanData(getAll(elem, false));
5436                      elem.innerHTML = value2;
5437                    }
5438                  }
5439                  elem = 0;
5440                } catch (e) {
5441                }
5442              }
5443              if (elem) {
5444                this.empty().append(value2);
5445              }
5446            }, null, value, arguments.length);
5447          },
5448          replaceWith: function() {
5449            var ignored = [];
5450            return domManip(this, arguments, function(elem) {
5451              var parent = this.parentNode;
5452              if (jQuery2.inArray(this, ignored) < 0) {
5453                jQuery2.cleanData(getAll(this));
5454                if (parent) {
5455                  parent.replaceChild(elem, this);
5456                }
5457              }
5458            }, ignored);
5459          }
5460        });
5461        jQuery2.each({
5462          appendTo: "append",
5463          prependTo: "prepend",
5464          insertBefore: "before",
5465          insertAfter: "after",
5466          replaceAll: "replaceWith"
5467        }, function(name, original) {
5468          jQuery2.fn[name] = function(selector) {
5469            var elems, ret = [], insert = jQuery2(selector), last = insert.length - 1, i = 0;
5470            for (; i <= last; i++) {
5471              elems = i === last ? this : this.clone(true);
5472              jQuery2(insert[i])[original](elems);
5473              push.apply(ret, elems.get());
5474            }
5475            return this.pushStack(ret);
5476          };
5477        });
5478        var rnumnonpx = new RegExp("^(" + pnum + ")(?!px)[a-z%]+$", "i");
5479        var rcustomProp = /^--/;
5480        var getStyles = function(elem) {
5481          var view = elem.ownerDocument.defaultView;
5482          if (!view || !view.opener) {
5483            view = window2;
5484          }
5485          return view.getComputedStyle(elem);
5486        };
5487        var swap = function(elem, options, callback) {
5488          var ret, name, old = {};
5489          for (name in options) {
5490            old[name] = elem.style[name];
5491            elem.style[name] = options[name];
5492          }
5493          ret = callback.call(elem);
5494          for (name in options) {
5495            elem.style[name] = old[name];
5496          }
5497          return ret;
5498        };
5499        var rboxStyle = new RegExp(cssExpand.join("|"), "i");
5500        (function() {
5501          function computeStyleTests() {
5502            if (!div) {
5503              return;
5504            }
5505            container.style.cssText = "position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0";
5506            div.style.cssText = "position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%";
5507            documentElement.appendChild(container).appendChild(div);
5508            var divStyle = window2.getComputedStyle(div);
5509            pixelPositionVal = divStyle.top !== "1%";
5510            reliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12;
5511            div.style.right = "60%";
5512            pixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36;
5513            boxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36;
5514            div.style.position = "absolute";
5515            scrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;
5516            documentElement.removeChild(container);
5517            div = null;
5518          }
5519          function roundPixelMeasures(measure) {
5520            return Math.round(parseFloat(measure));
5521          }
5522          var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, reliableTrDimensionsVal, reliableMarginLeftVal, container = document2.createElement("div"), div = document2.createElement("div");
5523          if (!div.style) {
5524            return;
5525          }
5526          div.style.backgroundClip = "content-box";
5527          div.cloneNode(true).style.backgroundClip = "";
5528          support.clearCloneStyle = div.style.backgroundClip === "content-box";
5529          jQuery2.extend(support, {
5530            boxSizingReliable: function() {
5531              computeStyleTests();
5532              return boxSizingReliableVal;
5533            },
5534            pixelBoxStyles: function() {
5535              computeStyleTests();
5536              return pixelBoxStylesVal;
5537            },
5538            pixelPosition: function() {
5539              computeStyleTests();
5540              return pixelPositionVal;
5541            },
5542            reliableMarginLeft: function() {
5543              computeStyleTests();
5544              return reliableMarginLeftVal;
5545            },
5546            scrollboxSize: function() {
5547              computeStyleTests();
5548              return scrollboxSizeVal;
5549            },
5550            // Support: IE 9 - 11+, Edge 15 - 18+
5551            // IE/Edge misreport `getComputedStyle` of table rows with width/height
5552            // set in CSS while `offset*` properties report correct values.
5553            // Behavior in IE 9 is more subtle than in newer versions & it passes
5554            // some versions of this test; make sure not to make it pass there!
5555            //
5556            // Support: Firefox 70+
5557            // Only Firefox includes border widths
5558            // in computed dimensions. (gh-4529)
5559            reliableTrDimensions: function() {
5560              var table, tr, trChild, trStyle;
5561              if (reliableTrDimensionsVal == null) {
5562                table = document2.createElement("table");
5563                tr = document2.createElement("tr");
5564                trChild = document2.createElement("div");
5565                table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";
5566                tr.style.cssText = "box-sizing:content-box;border:1px solid";
5567                tr.style.height = "1px";
5568                trChild.style.height = "9px";
5569                trChild.style.display = "block";
5570                documentElement.appendChild(table).appendChild(tr).appendChild(trChild);
5571                trStyle = window2.getComputedStyle(tr);
5572                reliableTrDimensionsVal = parseInt(trStyle.height, 10) + parseInt(trStyle.borderTopWidth, 10) + parseInt(trStyle.borderBottomWidth, 10) === tr.offsetHeight;
5573                documentElement.removeChild(table);
5574              }
5575              return reliableTrDimensionsVal;
5576            }
5577          });
5578        })();
5579        function curCSS(elem, name, computed) {
5580          var width, minWidth, maxWidth, ret, isCustomProp = rcustomProp.test(name), style = elem.style;
5581          computed = computed || getStyles(elem);
5582          if (computed) {
5583            ret = computed.getPropertyValue(name) || computed[name];
5584            if (isCustomProp && ret) {
5585              ret = ret.replace(rtrimCSS, "$1") || void 0;
5586            }
5587            if (ret === "" && !isAttached(elem)) {
5588              ret = jQuery2.style(elem, name);
5589            }
5590            if (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {
5591              width = style.width;
5592              minWidth = style.minWidth;
5593              maxWidth = style.maxWidth;
5594              style.minWidth = style.maxWidth = style.width = ret;
5595              ret = computed.width;
5596              style.width = width;
5597              style.minWidth = minWidth;
5598              style.maxWidth = maxWidth;
5599            }
5600          }
5601          return ret !== void 0 ? (
5602            // Support: IE <=9 - 11 only
5603            // IE returns zIndex value as an integer.
5604            ret + ""
5605          ) : ret;
5606        }
5607        function addGetHookIf(conditionFn, hookFn) {
5608          return {
5609            get: function() {
5610              if (conditionFn()) {
5611                delete this.get;
5612                return;
5613              }
5614              return (this.get = hookFn).apply(this, arguments);
5615            }
5616          };
5617        }
5618        var cssPrefixes = ["Webkit", "Moz", "ms"], emptyStyle = document2.createElement("div").style, vendorProps = {};
5619        function vendorPropName(name) {
5620          var capName = name[0].toUpperCase() + name.slice(1), i = cssPrefixes.length;
5621          while (i--) {
5622            name = cssPrefixes[i] + capName;
5623            if (name in emptyStyle) {
5624              return name;
5625            }
5626          }
5627        }
5628        function finalPropName(name) {
5629          var final = jQuery2.cssProps[name] || vendorProps[name];
5630          if (final) {
5631            return final;
5632          }
5633          if (name in emptyStyle) {
5634            return name;
5635          }
5636          return vendorProps[name] = vendorPropName(name) || name;
5637        }
5638        var rdisplayswap = /^(none|table(?!-c[ea]).+)/, cssShow = { position: "absolute", visibility: "hidden", display: "block" }, cssNormalTransform = {
5639          letterSpacing: "0",
5640          fontWeight: "400"
5641        };
5642        function setPositiveNumber(_elem, value, subtract) {
5643          var matches = rcssNum.exec(value);
5644          return matches ? (
5645            // Guard against undefined "subtract", e.g., when used as in cssHooks
5646            Math.max(0, matches[2] - (subtract || 0)) + (matches[3] || "px")
5647          ) : value;
5648        }
5649        function boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {
5650          var i = dimension === "width" ? 1 : 0, extra = 0, delta = 0, marginDelta = 0;
5651          if (box === (isBorderBox ? "border" : "content")) {
5652            return 0;
5653          }
5654          for (; i < 4; i += 2) {
5655            if (box === "margin") {
5656              marginDelta += jQuery2.css(elem, box + cssExpand[i], true, styles);
5657            }
5658            if (!isBorderBox) {
5659              delta += jQuery2.css(elem, "padding" + cssExpand[i], true, styles);
5660              if (box !== "padding") {
5661                delta += jQuery2.css(elem, "border" + cssExpand[i] + "Width", true, styles);
5662              } else {
5663                extra += jQuery2.css(elem, "border" + cssExpand[i] + "Width", true, styles);
5664              }
5665            } else {
5666              if (box === "content") {
5667                delta -= jQuery2.css(elem, "padding" + cssExpand[i], true, styles);
5668              }
5669              if (box !== "margin") {
5670                delta -= jQuery2.css(elem, "border" + cssExpand[i] + "Width", true, styles);
5671              }
5672            }
5673          }
5674          if (!isBorderBox && computedVal >= 0) {
5675            delta += Math.max(0, Math.ceil(
5676              elem["offset" + dimension[0].toUpperCase() + dimension.slice(1)] - computedVal - delta - extra - 0.5
5677              // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter
5678              // Use an explicit zero to avoid NaN (gh-3964)
5679            )) || 0;
5680          }
5681          return delta + marginDelta;
5682        }
5683        function getWidthOrHeight(elem, dimension, extra) {
5684          var styles = getStyles(elem), boxSizingNeeded = !support.boxSizingReliable() || extra, isBorderBox = boxSizingNeeded && jQuery2.css(elem, "boxSizing", false, styles) === "border-box", valueIsBorderBox = isBorderBox, val = curCSS(elem, dimension, styles), offsetProp = "offset" + dimension[0].toUpperCase() + dimension.slice(1);
5685          if (rnumnonpx.test(val)) {
5686            if (!extra) {
5687              return val;
5688            }
5689            val = "auto";
5690          }
5691          if ((!support.boxSizingReliable() && isBorderBox || // Support: IE 10 - 11+, Edge 15 - 18+
5692          // IE/Edge misreport `getComputedStyle` of table rows with width/height
5693          // set in CSS while `offset*` properties report correct values.
5694          // Interestingly, in some cases IE 9 doesn't suffer from this issue.
5695          !support.reliableTrDimensions() && nodeName(elem, "tr") || // Fall back to offsetWidth/offsetHeight when value is "auto"
5696          // This happens for inline elements with no explicit setting (gh-3571)
5697          val === "auto" || // Support: Android <=4.1 - 4.3 only
5698          // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
5699          !parseFloat(val) && jQuery2.css(elem, "display", false, styles) === "inline") && // Make sure the element is visible & connected
5700          elem.getClientRects().length) {
5701            isBorderBox = jQuery2.css(elem, "boxSizing", false, styles) === "border-box";
5702            valueIsBorderBox = offsetProp in elem;
5703            if (valueIsBorderBox) {
5704              val = elem[offsetProp];
5705            }
5706          }
5707          val = parseFloat(val) || 0;
5708          return val + boxModelAdjustment(
5709            elem,
5710            dimension,
5711            extra || (isBorderBox ? "border" : "content"),
5712            valueIsBorderBox,
5713            styles,
5714            // Provide the current computed size to request scroll gutter calculation (gh-3589)
5715            val
5716          ) + "px";
5717        }
5718        jQuery2.extend({
5719          // Add in style property hooks for overriding the default
5720          // behavior of getting and setting a style property
5721          cssHooks: {
5722            opacity: {
5723              get: function(elem, computed) {
5724                if (computed) {
5725                  var ret = curCSS(elem, "opacity");
5726                  return ret === "" ? "1" : ret;
5727                }
5728              }
5729            }
5730          },
5731          // Don't automatically add "px" to these possibly-unitless properties
5732          cssNumber: {
5733            animationIterationCount: true,
5734            aspectRatio: true,
5735            borderImageSlice: true,
5736            columnCount: true,
5737            flexGrow: true,
5738            flexShrink: true,
5739            fontWeight: true,
5740            gridArea: true,
5741            gridColumn: true,
5742            gridColumnEnd: true,
5743            gridColumnStart: true,
5744            gridRow: true,
5745            gridRowEnd: true,
5746            gridRowStart: true,
5747            lineHeight: true,
5748            opacity: true,
5749            order: true,
5750            orphans: true,
5751            scale: true,
5752            widows: true,
5753            zIndex: true,
5754            zoom: true,
5755            // SVG-related
5756            fillOpacity: true,
5757            floodOpacity: true,
5758            stopOpacity: true,
5759            strokeMiterlimit: true,
5760            strokeOpacity: true
5761          },
5762          // Add in properties whose names you wish to fix before
5763          // setting or getting the value
5764          cssProps: {},
5765          // Get and set the style property on a DOM Node
5766          style: function(elem, name, value, extra) {
5767            if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {
5768              return;
5769            }
5770            var ret, type, hooks, origName = camelCase(name), isCustomProp = rcustomProp.test(name), style = elem.style;
5771            if (!isCustomProp) {
5772              name = finalPropName(origName);
5773            }
5774            hooks = jQuery2.cssHooks[name] || jQuery2.cssHooks[origName];
5775            if (value !== void 0) {
5776              type = typeof value;
5777              if (type === "string" && (ret = rcssNum.exec(value)) && ret[1]) {
5778                value = adjustCSS(elem, name, ret);
5779                type = "number";
5780              }
5781              if (value == null || value !== value) {
5782                return;
5783              }
5784              if (type === "number" && !isCustomProp) {
5785                value += ret && ret[3] || (jQuery2.cssNumber[origName] ? "" : "px");
5786              }
5787              if (!support.clearCloneStyle && value === "" && name.indexOf("background") === 0) {
5788                style[name] = "inherit";
5789              }
5790              if (!hooks || !("set" in hooks) || (value = hooks.set(elem, value, extra)) !== void 0) {
5791                if (isCustomProp) {
5792                  style.setProperty(name, value);
5793                } else {
5794                  style[name] = value;
5795                }
5796              }
5797            } else {
5798              if (hooks && "get" in hooks && (ret = hooks.get(elem, false, extra)) !== void 0) {
5799                return ret;
5800              }
5801              return style[name];
5802            }
5803          },
5804          css: function(elem, name, extra, styles) {
5805            var val, num, hooks, origName = camelCase(name), isCustomProp = rcustomProp.test(name);
5806            if (!isCustomProp) {
5807              name = finalPropName(origName);
5808            }
5809            hooks = jQuery2.cssHooks[name] || jQuery2.cssHooks[origName];
5810            if (hooks && "get" in hooks) {
5811              val = hooks.get(elem, true, extra);
5812            }
5813            if (val === void 0) {
5814              val = curCSS(elem, name, styles);
5815            }
5816            if (val === "normal" && name in cssNormalTransform) {
5817              val = cssNormalTransform[name];
5818            }
5819            if (extra === "" || extra) {
5820              num = parseFloat(val);
5821              return extra === true || isFinite(num) ? num || 0 : val;
5822            }
5823            return val;
5824          }
5825        });
5826        jQuery2.each(["height", "width"], function(_i, dimension) {
5827          jQuery2.cssHooks[dimension] = {
5828            get: function(elem, computed, extra) {
5829              if (computed) {
5830                return rdisplayswap.test(jQuery2.css(elem, "display")) && // Support: Safari 8+
5831                // Table columns in Safari have non-zero offsetWidth & zero
5832                // getBoundingClientRect().width unless display is changed.
5833                // Support: IE <=11 only
5834                // Running getBoundingClientRect on a disconnected node
5835                // in IE throws an error.
5836                (!elem.getClientRects().length || !elem.getBoundingClientRect().width) ? swap(elem, cssShow, function() {
5837                  return getWidthOrHeight(elem, dimension, extra);
5838                }) : getWidthOrHeight(elem, dimension, extra);
5839              }
5840            },
5841            set: function(elem, value, extra) {
5842              var matches, styles = getStyles(elem), scrollboxSizeBuggy = !support.scrollboxSize() && styles.position === "absolute", boxSizingNeeded = scrollboxSizeBuggy || extra, isBorderBox = boxSizingNeeded && jQuery2.css(elem, "boxSizing", false, styles) === "border-box", subtract = extra ? boxModelAdjustment(
5843                elem,
5844                dimension,
5845                extra,
5846                isBorderBox,
5847                styles
5848              ) : 0;
5849              if (isBorderBox && scrollboxSizeBuggy) {
5850                subtract -= Math.ceil(
5851                  elem["offset" + dimension[0].toUpperCase() + dimension.slice(1)] - parseFloat(styles[dimension]) - boxModelAdjustment(elem, dimension, "border", false, styles) - 0.5
5852                );
5853              }
5854              if (subtract && (matches = rcssNum.exec(value)) && (matches[3] || "px") !== "px") {
5855                elem.style[dimension] = value;
5856                value = jQuery2.css(elem, dimension);
5857              }
5858              return setPositiveNumber(elem, value, subtract);
5859            }
5860          };
5861        });
5862        jQuery2.cssHooks.marginLeft = addGetHookIf(
5863          support.reliableMarginLeft,
5864          function(elem, computed) {
5865            if (computed) {
5866              return (parseFloat(curCSS(elem, "marginLeft")) || elem.getBoundingClientRect().left - swap(elem, { marginLeft: 0 }, function() {
5867                return elem.getBoundingClientRect().left;
5868              })) + "px";
5869            }
5870          }
5871        );
5872        jQuery2.each({
5873          margin: "",
5874          padding: "",
5875          border: "Width"
5876        }, function(prefix, suffix) {
5877          jQuery2.cssHooks[prefix + suffix] = {
5878            expand: function(value) {
5879              var i = 0, expanded = {}, parts = typeof value === "string" ? value.split(" ") : [value];
5880              for (; i < 4; i++) {
5881                expanded[prefix + cssExpand[i] + suffix] = parts[i] || parts[i - 2] || parts[0];
5882              }
5883              return expanded;
5884            }
5885          };
5886          if (prefix !== "margin") {
5887            jQuery2.cssHooks[prefix + suffix].set = setPositiveNumber;
5888          }
5889        });
5890        jQuery2.fn.extend({
5891          css: function(name, value) {
5892            return access(this, function(elem, name2, value2) {
5893              var styles, len, map = {}, i = 0;
5894              if (Array.isArray(name2)) {
5895                styles = getStyles(elem);
5896                len = name2.length;
5897                for (; i < len; i++) {
5898                  map[name2[i]] = jQuery2.css(elem, name2[i], false, styles);
5899                }
5900                return map;
5901              }
5902              return value2 !== void 0 ? jQuery2.style(elem, name2, value2) : jQuery2.css(elem, name2);
5903            }, name, value, arguments.length > 1);
5904          }
5905        });
5906        function Tween(elem, options, prop, end, easing) {
5907          return new Tween.prototype.init(elem, options, prop, end, easing);
5908        }
5909        jQuery2.Tween = Tween;
5910        Tween.prototype = {
5911          constructor: Tween,
5912          init: function(elem, options, prop, end, easing, unit) {
5913            this.elem = elem;
5914            this.prop = prop;
5915            this.easing = easing || jQuery2.easing._default;
5916            this.options = options;
5917            this.start = this.now = this.cur();
5918            this.end = end;
5919            this.unit = unit || (jQuery2.cssNumber[prop] ? "" : "px");
5920          },
5921          cur: function() {
5922            var hooks = Tween.propHooks[this.prop];
5923            return hooks && hooks.get ? hooks.get(this) : Tween.propHooks._default.get(this);
5924          },
5925          run: function(percent) {
5926            var eased, hooks = Tween.propHooks[this.prop];
5927            if (this.options.duration) {
5928              this.pos = eased = jQuery2.easing[this.easing](
5929                percent,
5930                this.options.duration * percent,
5931                0,
5932                1,
5933                this.options.duration
5934              );
5935            } else {
5936              this.pos = eased = percent;
5937            }
5938            this.now = (this.end - this.start) * eased + this.start;
5939            if (this.options.step) {
5940              this.options.step.call(this.elem, this.now, this);
5941            }
5942            if (hooks && hooks.set) {
5943              hooks.set(this);
5944            } else {
5945              Tween.propHooks._default.set(this);
5946            }
5947            return this;
5948          }
5949        };
5950        Tween.prototype.init.prototype = Tween.prototype;
5951        Tween.propHooks = {
5952          _default: {
5953            get: function(tween) {
5954              var result;
5955              if (tween.elem.nodeType !== 1 || tween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {
5956                return tween.elem[tween.prop];
5957              }
5958              result = jQuery2.css(tween.elem, tween.prop, "");
5959              return !result || result === "auto" ? 0 : result;
5960            },
5961            set: function(tween) {
5962              if (jQuery2.fx.step[tween.prop]) {
5963                jQuery2.fx.step[tween.prop](tween);
5964              } else if (tween.elem.nodeType === 1 && (jQuery2.cssHooks[tween.prop] || tween.elem.style[finalPropName(tween.prop)] != null)) {
5965                jQuery2.style(tween.elem, tween.prop, tween.now + tween.unit);
5966              } else {
5967                tween.elem[tween.prop] = tween.now;
5968              }
5969            }
5970          }
5971        };
5972        Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
5973          set: function(tween) {
5974            if (tween.elem.nodeType && tween.elem.parentNode) {
5975              tween.elem[tween.prop] = tween.now;
5976            }
5977          }
5978        };
5979        jQuery2.easing = {
5980          linear: function(p) {
5981            return p;
5982          },
5983          swing: function(p) {
5984            return 0.5 - Math.cos(p * Math.PI) / 2;
5985          },
5986          _default: "swing"
5987        };
5988        jQuery2.fx = Tween.prototype.init;
5989        jQuery2.fx.step = {};
5990        var fxNow, inProgress, rfxtypes = /^(?:toggle|show|hide)$/, rrun = /queueHooks$/;
5991        function schedule() {
5992          if (inProgress) {
5993            if (document2.hidden === false && window2.requestAnimationFrame) {
5994              window2.requestAnimationFrame(schedule);
5995            } else {
5996              window2.setTimeout(schedule, jQuery2.fx.interval);
5997            }
5998            jQuery2.fx.tick();
5999          }
6000        }
6001        function createFxNow() {
6002          window2.setTimeout(function() {
6003            fxNow = void 0;
6004          });
6005          return fxNow = Date.now();
6006        }
6007        function genFx(type, includeWidth) {
6008          var which, i = 0, attrs = { height: type };
6009          includeWidth = includeWidth ? 1 : 0;
6010          for (; i < 4; i += 2 - includeWidth) {
6011            which = cssExpand[i];
6012            attrs["margin" + which] = attrs["padding" + which] = type;
6013          }
6014          if (includeWidth) {
6015            attrs.opacity = attrs.width = type;
6016          }
6017          return attrs;
6018        }
6019        function createTween(value, prop, animation) {
6020          var tween, collection = (Animation.tweeners[prop] || []).concat(Animation.tweeners["*"]), index = 0, length = collection.length;
6021          for (; index < length; index++) {
6022            if (tween = collection[index].call(animation, prop, value)) {
6023              return tween;
6024            }
6025          }
6026        }
6027        function defaultPrefilter(elem, props, opts) {
6028          var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, isBox = "width" in props || "height" in props, anim = this, orig = {}, style = elem.style, hidden = elem.nodeType && isHiddenWithinTree(elem), dataShow = dataPriv.get(elem, "fxshow");
6029          if (!opts.queue) {
6030            hooks = jQuery2._queueHooks(elem, "fx");
6031            if (hooks.unqueued == null) {
6032              hooks.unqueued = 0;
6033              oldfire = hooks.empty.fire;
6034              hooks.empty.fire = function() {
6035                if (!hooks.unqueued) {
6036                  oldfire();
6037                }
6038              };
6039            }
6040            hooks.unqueued++;
6041            anim.always(function() {
6042              anim.always(function() {
6043                hooks.unqueued--;
6044                if (!jQuery2.queue(elem, "fx").length) {
6045                  hooks.empty.fire();
6046                }
6047              });
6048            });
6049          }
6050          for (prop in props) {
6051            value = props[prop];
6052            if (rfxtypes.test(value)) {
6053              delete props[prop];
6054              toggle = toggle || value === "toggle";
6055              if (value === (hidden ? "hide" : "show")) {
6056                if (value === "show" && dataShow && dataShow[prop] !== void 0) {
6057                  hidden = true;
6058                } else {
6059                  continue;
6060                }
6061              }
6062              orig[prop] = dataShow && dataShow[prop] || jQuery2.style(elem, prop);
6063            }
6064          }
6065          propTween = !jQuery2.isEmptyObject(props);
6066          if (!propTween && jQuery2.isEmptyObject(orig)) {
6067            return;
6068          }
6069          if (isBox && elem.nodeType === 1) {
6070            opts.overflow = [style.overflow, style.overflowX, style.overflowY];
6071            restoreDisplay = dataShow && dataShow.display;
6072            if (restoreDisplay == null) {
6073              restoreDisplay = dataPriv.get(elem, "display");
6074            }
6075            display = jQuery2.css(elem, "display");
6076            if (display === "none") {
6077              if (restoreDisplay) {
6078                display = restoreDisplay;
6079              } else {
6080                showHide([elem], true);
6081                restoreDisplay = elem.style.display || restoreDisplay;
6082                display = jQuery2.css(elem, "display");
6083                showHide([elem]);
6084              }
6085            }
6086            if (display === "inline" || display === "inline-block" && restoreDisplay != null) {
6087              if (jQuery2.css(elem, "float") === "none") {
6088                if (!propTween) {
6089                  anim.done(function() {
6090                    style.display = restoreDisplay;
6091                  });
6092                  if (restoreDisplay == null) {
6093                    display = style.display;
6094                    restoreDisplay = display === "none" ? "" : display;
6095                  }
6096                }
6097                style.display = "inline-block";
6098              }
6099            }
6100          }
6101          if (opts.overflow) {
6102            style.overflow = "hidden";
6103            anim.always(function() {
6104              style.overflow = opts.overflow[0];
6105              style.overflowX = opts.overflow[1];
6106              style.overflowY = opts.overflow[2];
6107            });
6108          }
6109          propTween = false;
6110          for (prop in orig) {
6111            if (!propTween) {
6112              if (dataShow) {
6113                if ("hidden" in dataShow) {
6114                  hidden = dataShow.hidden;
6115                }
6116              } else {
6117                dataShow = dataPriv.access(elem, "fxshow", { display: restoreDisplay });
6118              }
6119              if (toggle) {
6120                dataShow.hidden = !hidden;
6121              }
6122              if (hidden) {
6123                showHide([elem], true);
6124              }
6125              anim.done(function() {
6126                if (!hidden) {
6127                  showHide([elem]);
6128                }
6129                dataPriv.remove(elem, "fxshow");
6130                for (prop in orig) {
6131                  jQuery2.style(elem, prop, orig[prop]);
6132                }
6133              });
6134            }
6135            propTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);
6136            if (!(prop in dataShow)) {
6137              dataShow[prop] = propTween.start;
6138              if (hidden) {
6139                propTween.end = propTween.start;
6140                propTween.start = 0;
6141              }
6142            }
6143          }
6144        }
6145        function propFilter(props, specialEasing) {
6146          var index, name, easing, value, hooks;
6147          for (index in props) {
6148            name = camelCase(index);
6149            easing = specialEasing[name];
6150            value = props[index];
6151            if (Array.isArray(value)) {
6152              easing = value[1];
6153              value = props[index] = value[0];
6154            }
6155            if (index !== name) {
6156              props[name] = value;
6157              delete props[index];
6158            }
6159            hooks = jQuery2.cssHooks[name];
6160            if (hooks && "expand" in hooks) {
6161              value = hooks.expand(value);
6162              delete props[name];
6163              for (index in value) {
6164                if (!(index in props)) {
6165                  props[index] = value[index];
6166                  specialEasing[index] = easing;
6167                }
6168              }
6169            } else {
6170              specialEasing[name] = easing;
6171            }
6172          }
6173        }
6174        function Animation(elem, properties, options) {
6175          var result, stopped, index = 0, length = Animation.prefilters.length, deferred = jQuery2.Deferred().always(function() {
6176            delete tick.elem;
6177          }), tick = function() {
6178            if (stopped) {
6179              return false;
6180            }
6181            var currentTime = fxNow || createFxNow(), remaining = Math.max(0, animation.startTime + animation.duration - currentTime), temp = remaining / animation.duration || 0, percent = 1 - temp, index2 = 0, length2 = animation.tweens.length;
6182            for (; index2 < length2; index2++) {
6183              animation.tweens[index2].run(percent);
6184            }
6185            deferred.notifyWith(elem, [animation, percent, remaining]);
6186            if (percent < 1 && length2) {
6187              return remaining;
6188            }
6189            if (!length2) {
6190              deferred.notifyWith(elem, [animation, 1, 0]);
6191            }
6192            deferred.resolveWith(elem, [animation]);
6193            return false;
6194          }, animation = deferred.promise({
6195            elem,
6196            props: jQuery2.extend({}, properties),
6197            opts: jQuery2.extend(true, {
6198              specialEasing: {},
6199              easing: jQuery2.easing._default
6200            }, options),
6201            originalProperties: properties,
6202            originalOptions: options,
6203            startTime: fxNow || createFxNow(),
6204            duration: options.duration,
6205            tweens: [],
6206            createTween: function(prop, end) {
6207              var tween = jQuery2.Tween(
6208                elem,
6209                animation.opts,
6210                prop,
6211                end,
6212                animation.opts.specialEasing[prop] || animation.opts.easing
6213              );
6214              animation.tweens.push(tween);
6215              return tween;
6216            },
6217            stop: function(gotoEnd) {
6218              var index2 = 0, length2 = gotoEnd ? animation.tweens.length : 0;
6219              if (stopped) {
6220                return this;
6221              }
6222              stopped = true;
6223              for (; index2 < length2; index2++) {
6224                animation.tweens[index2].run(1);
6225              }
6226              if (gotoEnd) {
6227                deferred.notifyWith(elem, [animation, 1, 0]);
6228                deferred.resolveWith(elem, [animation, gotoEnd]);
6229              } else {
6230                deferred.rejectWith(elem, [animation, gotoEnd]);
6231              }
6232              return this;
6233            }
6234          }), props = animation.props;
6235          propFilter(props, animation.opts.specialEasing);
6236          for (; index < length; index++) {
6237            result = Animation.prefilters[index].call(animation, elem, props, animation.opts);
6238            if (result) {
6239              if (isFunction(result.stop)) {
6240                jQuery2._queueHooks(animation.elem, animation.opts.queue).stop = result.stop.bind(result);
6241              }
6242              return result;
6243            }
6244          }
6245          jQuery2.map(props, createTween, animation);
6246          if (isFunction(animation.opts.start)) {
6247            animation.opts.start.call(elem, animation);
6248          }
6249          animation.progress(animation.opts.progress).done(animation.opts.done, animation.opts.complete).fail(animation.opts.fail).always(animation.opts.always);
6250          jQuery2.fx.timer(
6251            jQuery2.extend(tick, {
6252              elem,
6253              anim: animation,
6254              queue: animation.opts.queue
6255            })
6256          );
6257          return animation;
6258        }
6259        jQuery2.Animation = jQuery2.extend(Animation, {
6260          tweeners: {
6261            "*": [function(prop, value) {
6262              var tween = this.createTween(prop, value);
6263              adjustCSS(tween.elem, prop, rcssNum.exec(value), tween);
6264              return tween;
6265            }]
6266          },
6267          tweener: function(props, callback) {
6268            if (isFunction(props)) {
6269              callback = props;
6270              props = ["*"];
6271            } else {
6272              props = props.match(rnothtmlwhite);
6273            }
6274            var prop, index = 0, length = props.length;
6275            for (; index < length; index++) {
6276              prop = props[index];
6277              Animation.tweeners[prop] = Animation.tweeners[prop] || [];
6278              Animation.tweeners[prop].unshift(callback);
6279            }
6280          },
6281          prefilters: [defaultPrefilter],
6282          prefilter: function(callback, prepend) {
6283            if (prepend) {
6284              Animation.prefilters.unshift(callback);
6285            } else {
6286              Animation.prefilters.push(callback);
6287            }
6288          }
6289        });
6290        jQuery2.speed = function(speed, easing, fn) {
6291          var opt = speed && typeof speed === "object" ? jQuery2.extend({}, speed) : {
6292            complete: fn || !fn && easing || isFunction(speed) && speed,
6293            duration: speed,
6294            easing: fn && easing || easing && !isFunction(easing) && easing
6295          };
6296          if (jQuery2.fx.off) {
6297            opt.duration = 0;
6298          } else {
6299            if (typeof opt.duration !== "number") {
6300              if (opt.duration in jQuery2.fx.speeds) {
6301                opt.duration = jQuery2.fx.speeds[opt.duration];
6302              } else {
6303                opt.duration = jQuery2.fx.speeds._default;
6304              }
6305            }
6306          }
6307          if (opt.queue == null || opt.queue === true) {
6308            opt.queue = "fx";
6309          }
6310          opt.old = opt.complete;
6311          opt.complete = function() {
6312            if (isFunction(opt.old)) {
6313              opt.old.call(this);
6314            }
6315            if (opt.queue) {
6316              jQuery2.dequeue(this, opt.queue);
6317            }
6318          };
6319          return opt;
6320        };
6321        jQuery2.fn.extend({
6322          fadeTo: function(speed, to, easing, callback) {
6323            return this.filter(isHiddenWithinTree).css("opacity", 0).show().end().animate({ opacity: to }, speed, easing, callback);
6324          },
6325          animate: function(prop, speed, easing, callback) {
6326            var empty = jQuery2.isEmptyObject(prop), optall = jQuery2.speed(speed, easing, callback), doAnimation = function() {
6327              var anim = Animation(this, jQuery2.extend({}, prop), optall);
6328              if (empty || dataPriv.get(this, "finish")) {
6329                anim.stop(true);
6330              }
6331            };
6332            doAnimation.finish = doAnimation;
6333            return empty || optall.queue === false ? this.each(doAnimation) : this.queue(optall.queue, doAnimation);
6334          },
6335          stop: function(type, clearQueue, gotoEnd) {
6336            var stopQueue = function(hooks) {
6337              var stop = hooks.stop;
6338              delete hooks.stop;
6339              stop(gotoEnd);
6340            };
6341            if (typeof type !== "string") {
6342              gotoEnd = clearQueue;
6343              clearQueue = type;
6344              type = void 0;
6345            }
6346            if (clearQueue) {
6347              this.queue(type || "fx", []);
6348            }
6349            return this.each(function() {
6350              var dequeue = true, index = type != null && type + "queueHooks", timers = jQuery2.timers, data = dataPriv.get(this);
6351              if (index) {
6352                if (data[index] && data[index].stop) {
6353                  stopQueue(data[index]);
6354                }
6355              } else {
6356                for (index in data) {
6357                  if (data[index] && data[index].stop && rrun.test(index)) {
6358                    stopQueue(data[index]);
6359                  }
6360                }
6361              }
6362              for (index = timers.length; index--; ) {
6363                if (timers[index].elem === this && (type == null || timers[index].queue === type)) {
6364                  timers[index].anim.stop(gotoEnd);
6365                  dequeue = false;
6366                  timers.splice(index, 1);
6367                }
6368              }
6369              if (dequeue || !gotoEnd) {
6370                jQuery2.dequeue(this, type);
6371              }
6372            });
6373          },
6374          finish: function(type) {
6375            if (type !== false) {
6376              type = type || "fx";
6377            }
6378            return this.each(function() {
6379              var index, data = dataPriv.get(this), queue = data[type + "queue"], hooks = data[type + "queueHooks"], timers = jQuery2.timers, length = queue ? queue.length : 0;
6380              data.finish = true;
6381              jQuery2.queue(this, type, []);
6382              if (hooks && hooks.stop) {
6383                hooks.stop.call(this, true);
6384              }
6385              for (index = timers.length; index--; ) {
6386                if (timers[index].elem === this && timers[index].queue === type) {
6387                  timers[index].anim.stop(true);
6388                  timers.splice(index, 1);
6389                }
6390              }
6391              for (index = 0; index < length; index++) {
6392                if (queue[index] && queue[index].finish) {
6393                  queue[index].finish.call(this);
6394                }
6395              }
6396              delete data.finish;
6397            });
6398          }
6399        });
6400        jQuery2.each(["toggle", "show", "hide"], function(_i, name) {
6401          var cssFn = jQuery2.fn[name];
6402          jQuery2.fn[name] = function(speed, easing, callback) {
6403            return speed == null || typeof speed === "boolean" ? cssFn.apply(this, arguments) : this.animate(genFx(name, true), speed, easing, callback);
6404          };
6405        });
6406        jQuery2.each({
6407          slideDown: genFx("show"),
6408          slideUp: genFx("hide"),
6409          slideToggle: genFx("toggle"),
6410          fadeIn: { opacity: "show" },
6411          fadeOut: { opacity: "hide" },
6412          fadeToggle: { opacity: "toggle" }
6413        }, function(name, props) {
6414          jQuery2.fn[name] = function(speed, easing, callback) {
6415            return this.animate(props, speed, easing, callback);
6416          };
6417        });
6418        jQuery2.timers = [];
6419        jQuery2.fx.tick = function() {
6420          var timer, i = 0, timers = jQuery2.timers;
6421          fxNow = Date.now();
6422          for (; i < timers.length; i++) {
6423            timer = timers[i];
6424            if (!timer() && timers[i] === timer) {
6425              timers.splice(i--, 1);
6426            }
6427          }
6428          if (!timers.length) {
6429            jQuery2.fx.stop();
6430          }
6431          fxNow = void 0;
6432        };
6433        jQuery2.fx.timer = function(timer) {
6434          jQuery2.timers.push(timer);
6435          jQuery2.fx.start();
6436        };
6437        jQuery2.fx.interval = 13;
6438        jQuery2.fx.start = function() {
6439          if (inProgress) {
6440            return;
6441          }
6442          inProgress = true;
6443          schedule();
6444        };
6445        jQuery2.fx.stop = function() {
6446          inProgress = null;
6447        };
6448        jQuery2.fx.speeds = {
6449          slow: 600,
6450          fast: 200,
6451          // Default speed
6452          _default: 400
6453        };
6454        jQuery2.fn.delay = function(time, type) {
6455          time = jQuery2.fx ? jQuery2.fx.speeds[time] || time : time;
6456          type = type || "fx";
6457          return this.queue(type, function(next, hooks) {
6458            var timeout = window2.setTimeout(next, time);
6459            hooks.stop = function() {
6460              window2.clearTimeout(timeout);
6461            };
6462          });
6463        };
6464        (function() {
6465          var input = document2.createElement("input"), select = document2.createElement("select"), opt = select.appendChild(document2.createElement("option"));
6466          input.type = "checkbox";
6467          support.checkOn = input.value !== "";
6468          support.optSelected = opt.selected;
6469          input = document2.createElement("input");
6470          input.value = "t";
6471          input.type = "radio";
6472          support.radioValue = input.value === "t";
6473        })();
6474        var boolHook, attrHandle = jQuery2.expr.attrHandle;
6475        jQuery2.fn.extend({
6476          attr: function(name, value) {
6477            return access(this, jQuery2.attr, name, value, arguments.length > 1);
6478          },
6479          removeAttr: function(name) {
6480            return this.each(function() {
6481              jQuery2.removeAttr(this, name);
6482            });
6483          }
6484        });
6485        jQuery2.extend({
6486          attr: function(elem, name, value) {
6487            var ret, hooks, nType = elem.nodeType;
6488            if (nType === 3 || nType === 8 || nType === 2) {
6489              return;
6490            }
6491            if (typeof elem.getAttribute === "undefined") {
6492              return jQuery2.prop(elem, name, value);
6493            }
6494            if (nType !== 1 || !jQuery2.isXMLDoc(elem)) {
6495              hooks = jQuery2.attrHooks[name.toLowerCase()] || (jQuery2.expr.match.bool.test(name) ? boolHook : void 0);
6496            }
6497            if (value !== void 0) {
6498              if (value === null) {
6499                jQuery2.removeAttr(elem, name);
6500                return;
6501              }
6502              if (hooks && "set" in hooks && (ret = hooks.set(elem, value, name)) !== void 0) {
6503                return ret;
6504              }
6505              elem.setAttribute(name, value + "");
6506              return value;
6507            }
6508            if (hooks && "get" in hooks && (ret = hooks.get(elem, name)) !== null) {
6509              return ret;
6510            }
6511            ret = jQuery2.find.attr(elem, name);
6512            return ret == null ? void 0 : ret;
6513          },
6514          attrHooks: {
6515            type: {
6516              set: function(elem, value) {
6517                if (!support.radioValue && value === "radio" && nodeName(elem, "input")) {
6518                  var val = elem.value;
6519                  elem.setAttribute("type", value);
6520                  if (val) {
6521                    elem.value = val;
6522                  }
6523                  return value;
6524                }
6525              }
6526            }
6527          },
6528          removeAttr: function(elem, value) {
6529            var name, i = 0, attrNames = value && value.match(rnothtmlwhite);
6530            if (attrNames && elem.nodeType === 1) {
6531              while (name = attrNames[i++]) {
6532                elem.removeAttribute(name);
6533              }
6534            }
6535          }
6536        });
6537        boolHook = {
6538          set: function(elem, value, name) {
6539            if (value === false) {
6540              jQuery2.removeAttr(elem, name);
6541            } else {
6542              elem.setAttribute(name, name);
6543            }
6544            return name;
6545          }
6546        };
6547        jQuery2.each(jQuery2.expr.match.bool.source.match(/\w+/g), function(_i, name) {
6548          var getter = attrHandle[name] || jQuery2.find.attr;
6549          attrHandle[name] = function(elem, name2, isXML) {
6550            var ret, handle, lowercaseName = name2.toLowerCase();
6551            if (!isXML) {
6552              handle = attrHandle[lowercaseName];
6553              attrHandle[lowercaseName] = ret;
6554              ret = getter(elem, name2, isXML) != null ? lowercaseName : null;
6555              attrHandle[lowercaseName] = handle;
6556            }
6557            return ret;
6558          };
6559        });
6560        var rfocusable = /^(?:input|select|textarea|button)$/i, rclickable = /^(?:a|area)$/i;
6561        jQuery2.fn.extend({
6562          prop: function(name, value) {
6563            return access(this, jQuery2.prop, name, value, arguments.length > 1);
6564          },
6565          removeProp: function(name) {
6566            return this.each(function() {
6567              delete this[jQuery2.propFix[name] || name];
6568            });
6569          }
6570        });
6571        jQuery2.extend({
6572          prop: function(elem, name, value) {
6573            var ret, hooks, nType = elem.nodeType;
6574            if (nType === 3 || nType === 8 || nType === 2) {
6575              return;
6576            }
6577            if (nType !== 1 || !jQuery2.isXMLDoc(elem)) {
6578              name = jQuery2.propFix[name] || name;
6579              hooks = jQuery2.propHooks[name];
6580            }
6581            if (value !== void 0) {
6582              if (hooks && "set" in hooks && (ret = hooks.set(elem, value, name)) !== void 0) {
6583                return ret;
6584              }
6585              return elem[name] = value;
6586            }
6587            if (hooks && "get" in hooks && (ret = hooks.get(elem, name)) !== null) {
6588              return ret;
6589            }
6590            return elem[name];
6591          },
6592          propHooks: {
6593            tabIndex: {
6594              get: function(elem) {
6595                var tabindex = jQuery2.find.attr(elem, "tabindex");
6596                if (tabindex) {
6597                  return parseInt(tabindex, 10);
6598                }
6599                if (rfocusable.test(elem.nodeName) || rclickable.test(elem.nodeName) && elem.href) {
6600                  return 0;
6601                }
6602                return -1;
6603              }
6604            }
6605          },
6606          propFix: {
6607            "for": "htmlFor",
6608            "class": "className"
6609          }
6610        });
6611        if (!support.optSelected) {
6612          jQuery2.propHooks.selected = {
6613            get: function(elem) {
6614              var parent = elem.parentNode;
6615              if (parent && parent.parentNode) {
6616                parent.parentNode.selectedIndex;
6617              }
6618              return null;
6619            },
6620            set: function(elem) {
6621              var parent = elem.parentNode;
6622              if (parent) {
6623                parent.selectedIndex;
6624                if (parent.parentNode) {
6625                  parent.parentNode.selectedIndex;
6626                }
6627              }
6628            }
6629          };
6630        }
6631        jQuery2.each([
6632          "tabIndex",
6633          "readOnly",
6634          "maxLength",
6635          "cellSpacing",
6636          "cellPadding",
6637          "rowSpan",
6638          "colSpan",
6639          "useMap",
6640          "frameBorder",
6641          "contentEditable"
6642        ], function() {
6643          jQuery2.propFix[this.toLowerCase()] = this;
6644        });
6645        function stripAndCollapse(value) {
6646          var tokens = value.match(rnothtmlwhite) || [];
6647          return tokens.join(" ");
6648        }
6649        function getClass(elem) {
6650          return elem.getAttribute && elem.getAttribute("class") || "";
6651        }
6652        function classesToArray(value) {
6653          if (Array.isArray(value)) {
6654            return value;
6655          }
6656          if (typeof value === "string") {
6657            return value.match(rnothtmlwhite) || [];
6658          }
6659          return [];
6660        }
6661        jQuery2.fn.extend({
6662          addClass: function(value) {
6663            var classNames, cur, curValue, className, i, finalValue;
6664            if (isFunction(value)) {
6665              return this.each(function(j) {
6666                jQuery2(this).addClass(value.call(this, j, getClass(this)));
6667              });
6668            }
6669            classNames = classesToArray(value);
6670            if (classNames.length) {
6671              return this.each(function() {
6672                curValue = getClass(this);
6673                cur = this.nodeType === 1 && " " + stripAndCollapse(curValue) + " ";
6674                if (cur) {
6675                  for (i = 0; i < classNames.length; i++) {
6676                    className = classNames[i];
6677                    if (cur.indexOf(" " + className + " ") < 0) {
6678                      cur += className + " ";
6679                    }
6680                  }
6681                  finalValue = stripAndCollapse(cur);
6682                  if (curValue !== finalValue) {
6683                    this.setAttribute("class", finalValue);
6684                  }
6685                }
6686              });
6687            }
6688            return this;
6689          },
6690          removeClass: function(value) {
6691            var classNames, cur, curValue, className, i, finalValue;
6692            if (isFunction(value)) {
6693              return this.each(function(j) {
6694                jQuery2(this).removeClass(value.call(this, j, getClass(this)));
6695              });
6696            }
6697            if (!arguments.length) {
6698              return this.attr("class", "");
6699            }
6700            classNames = classesToArray(value);
6701            if (classNames.length) {
6702              return this.each(function() {
6703                curValue = getClass(this);
6704                cur = this.nodeType === 1 && " " + stripAndCollapse(curValue) + " ";
6705                if (cur) {
6706                  for (i = 0; i < classNames.length; i++) {
6707                    className = classNames[i];
6708                    while (cur.indexOf(" " + className + " ") > -1) {
6709                      cur = cur.replace(" " + className + " ", " ");
6710                    }
6711                  }
6712                  finalValue = stripAndCollapse(cur);
6713                  if (curValue !== finalValue) {
6714                    this.setAttribute("class", finalValue);
6715                  }
6716                }
6717              });
6718            }
6719            return this;
6720          },
6721          toggleClass: function(value, stateVal) {
6722            var classNames, className, i, self2, type = typeof value, isValidValue = type === "string" || Array.isArray(value);
6723            if (isFunction(value)) {
6724              return this.each(function(i2) {
6725                jQuery2(this).toggleClass(
6726                  value.call(this, i2, getClass(this), stateVal),
6727                  stateVal
6728                );
6729              });
6730            }
6731            if (typeof stateVal === "boolean" && isValidValue) {
6732              return stateVal ? this.addClass(value) : this.removeClass(value);
6733            }
6734            classNames = classesToArray(value);
6735            return this.each(function() {
6736              if (isValidValue) {
6737                self2 = jQuery2(this);
6738                for (i = 0; i < classNames.length; i++) {
6739                  className = classNames[i];
6740                  if (self2.hasClass(className)) {
6741                    self2.removeClass(className);
6742                  } else {
6743                    self2.addClass(className);
6744                  }
6745                }
6746              } else if (value === void 0 || type === "boolean") {
6747                className = getClass(this);
6748                if (className) {
6749                  dataPriv.set(this, "__className__", className);
6750                }
6751                if (this.setAttribute) {
6752                  this.setAttribute(
6753                    "class",
6754                    className || value === false ? "" : dataPriv.get(this, "__className__") || ""
6755                  );
6756                }
6757              }
6758            });
6759          },
6760          hasClass: function(selector) {
6761            var className, elem, i = 0;
6762            className = " " + selector + " ";
6763            while (elem = this[i++]) {
6764              if (elem.nodeType === 1 && (" " + stripAndCollapse(getClass(elem)) + " ").indexOf(className) > -1) {
6765                return true;
6766              }
6767            }
6768            return false;
6769          }
6770        });
6771        var rreturn = /\r/g;
6772        jQuery2.fn.extend({
6773          val: function(value) {
6774            var hooks, ret, valueIsFunction, elem = this[0];
6775            if (!arguments.length) {
6776              if (elem) {
6777                hooks = jQuery2.valHooks[elem.type] || jQuery2.valHooks[elem.nodeName.toLowerCase()];
6778                if (hooks && "get" in hooks && (ret = hooks.get(elem, "value")) !== void 0) {
6779                  return ret;
6780                }
6781                ret = elem.value;
6782                if (typeof ret === "string") {
6783                  return ret.replace(rreturn, "");
6784                }
6785                return ret == null ? "" : ret;
6786              }
6787              return;
6788            }
6789            valueIsFunction = isFunction(value);
6790            return this.each(function(i) {
6791              var val;
6792              if (this.nodeType !== 1) {
6793                return;
6794              }
6795              if (valueIsFunction) {
6796                val = value.call(this, i, jQuery2(this).val());
6797              } else {
6798                val = value;
6799              }
6800              if (val == null) {
6801                val = "";
6802              } else if (typeof val === "number") {
6803                val += "";
6804              } else if (Array.isArray(val)) {
6805                val = jQuery2.map(val, function(value2) {
6806                  return value2 == null ? "" : value2 + "";
6807                });
6808              }
6809              hooks = jQuery2.valHooks[this.type] || jQuery2.valHooks[this.nodeName.toLowerCase()];
6810              if (!hooks || !("set" in hooks) || hooks.set(this, val, "value") === void 0) {
6811                this.value = val;
6812              }
6813            });
6814          }
6815        });
6816        jQuery2.extend({
6817          valHooks: {
6818            option: {
6819              get: function(elem) {
6820                var val = jQuery2.find.attr(elem, "value");
6821                return val != null ? val : (
6822                  // Support: IE <=10 - 11 only
6823                  // option.text throws exceptions (trac-14686, trac-14858)
6824                  // Strip and collapse whitespace
6825                  // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
6826                  stripAndCollapse(jQuery2.text(elem))
6827                );
6828              }
6829            },
6830            select: {
6831              get: function(elem) {
6832                var value, option, i, options = elem.options, index = elem.selectedIndex, one = elem.type === "select-one", values = one ? null : [], max = one ? index + 1 : options.length;
6833                if (index < 0) {
6834                  i = max;
6835                } else {
6836                  i = one ? index : 0;
6837                }
6838                for (; i < max; i++) {
6839                  option = options[i];
6840                  if ((option.selected || i === index) && // Don't return options that are disabled or in a disabled optgroup
6841                  !option.disabled && (!option.parentNode.disabled || !nodeName(option.parentNode, "optgroup"))) {
6842                    value = jQuery2(option).val();
6843                    if (one) {
6844                      return value;
6845                    }
6846                    values.push(value);
6847                  }
6848                }
6849                return values;
6850              },
6851              set: function(elem, value) {
6852                var optionSet, option, options = elem.options, values = jQuery2.makeArray(value), i = options.length;
6853                while (i--) {
6854                  option = options[i];
6855                  if (option.selected = jQuery2.inArray(jQuery2.valHooks.option.get(option), values) > -1) {
6856                    optionSet = true;
6857                  }
6858                }
6859                if (!optionSet) {
6860                  elem.selectedIndex = -1;
6861                }
6862                return values;
6863              }
6864            }
6865          }
6866        });
6867        jQuery2.each(["radio", "checkbox"], function() {
6868          jQuery2.valHooks[this] = {
6869            set: function(elem, value) {
6870              if (Array.isArray(value)) {
6871                return elem.checked = jQuery2.inArray(jQuery2(elem).val(), value) > -1;
6872              }
6873            }
6874          };
6875          if (!support.checkOn) {
6876            jQuery2.valHooks[this].get = function(elem) {
6877              return elem.getAttribute("value") === null ? "on" : elem.value;
6878            };
6879          }
6880        });
6881        var location2 = window2.location;
6882        var nonce = { guid: Date.now() };
6883        var rquery = /\?/;
6884        jQuery2.parseXML = function(data) {
6885          var xml, parserErrorElem;
6886          if (!data || typeof data !== "string") {
6887            return null;
6888          }
6889          try {
6890            xml = new window2.DOMParser().parseFromString(data, "text/xml");
6891          } catch (e) {
6892          }
6893          parserErrorElem = xml && xml.getElementsByTagName("parsererror")[0];
6894          if (!xml || parserErrorElem) {
6895            jQuery2.error("Invalid XML: " + (parserErrorElem ? jQuery2.map(parserErrorElem.childNodes, function(el) {
6896              return el.textContent;
6897            }).join("\n") : data));
6898          }
6899          return xml;
6900        };
6901        var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, stopPropagationCallback = function(e) {
6902          e.stopPropagation();
6903        };
6904        jQuery2.extend(jQuery2.event, {
6905          trigger: function(event2, data, elem, onlyHandlers) {
6906            var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, eventPath = [elem || document2], type = hasOwn.call(event2, "type") ? event2.type : event2, namespaces = hasOwn.call(event2, "namespace") ? event2.namespace.split(".") : [];
6907            cur = lastElement = tmp = elem = elem || document2;
6908            if (elem.nodeType === 3 || elem.nodeType === 8) {
6909              return;
6910            }
6911            if (rfocusMorph.test(type + jQuery2.event.triggered)) {
6912              return;
6913            }
6914            if (type.indexOf(".") > -1) {
6915              namespaces = type.split(".");
6916              type = namespaces.shift();
6917              namespaces.sort();
6918            }
6919            ontype = type.indexOf(":") < 0 && "on" + type;
6920            event2 = event2[jQuery2.expando] ? event2 : new jQuery2.Event(type, typeof event2 === "object" && event2);
6921            event2.isTrigger = onlyHandlers ? 2 : 3;
6922            event2.namespace = namespaces.join(".");
6923            event2.rnamespace = event2.namespace ? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null;
6924            event2.result = void 0;
6925            if (!event2.target) {
6926              event2.target = elem;
6927            }
6928            data = data == null ? [event2] : jQuery2.makeArray(data, [event2]);
6929            special = jQuery2.event.special[type] || {};
6930            if (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {
6931              return;
6932            }
6933            if (!onlyHandlers && !special.noBubble && !isWindow(elem)) {
6934              bubbleType = special.delegateType || type;
6935              if (!rfocusMorph.test(bubbleType + type)) {
6936                cur = cur.parentNode;
6937              }
6938              for (; cur; cur = cur.parentNode) {
6939                eventPath.push(cur);
6940                tmp = cur;
6941              }
6942              if (tmp === (elem.ownerDocument || document2)) {
6943                eventPath.push(tmp.defaultView || tmp.parentWindow || window2);
6944              }
6945            }
6946            i = 0;
6947            while ((cur = eventPath[i++]) && !event2.isPropagationStopped()) {
6948              lastElement = cur;
6949              event2.type = i > 1 ? bubbleType : special.bindType || type;
6950              handle = (dataPriv.get(cur, "events") || /* @__PURE__ */ Object.create(null))[event2.type] && dataPriv.get(cur, "handle");
6951              if (handle) {
6952                handle.apply(cur, data);
6953              }
6954              handle = ontype && cur[ontype];
6955              if (handle && handle.apply && acceptData(cur)) {
6956                event2.result = handle.apply(cur, data);
6957                if (event2.result === false) {
6958                  event2.preventDefault();
6959                }
6960              }
6961            }
6962            event2.type = type;
6963            if (!onlyHandlers && !event2.isDefaultPrevented()) {
6964              if ((!special._default || special._default.apply(eventPath.pop(), data) === false) && acceptData(elem)) {
6965                if (ontype && isFunction(elem[type]) && !isWindow(elem)) {
6966                  tmp = elem[ontype];
6967                  if (tmp) {
6968                    elem[ontype] = null;
6969                  }
6970                  jQuery2.event.triggered = type;
6971                  if (event2.isPropagationStopped()) {
6972                    lastElement.addEventListener(type, stopPropagationCallback);
6973                  }
6974                  elem[type]();
6975                  if (event2.isPropagationStopped()) {
6976                    lastElement.removeEventListener(type, stopPropagationCallback);
6977                  }
6978                  jQuery2.event.triggered = void 0;
6979                  if (tmp) {
6980                    elem[ontype] = tmp;
6981                  }
6982                }
6983              }
6984            }
6985            return event2.result;
6986          },
6987          // Piggyback on a donor event to simulate a different one
6988          // Used only for `focus(in | out)` events
6989          simulate: function(type, elem, event2) {
6990            var e = jQuery2.extend(
6991              new jQuery2.Event(),
6992              event2,
6993              {
6994                type,
6995                isSimulated: true
6996              }
6997            );
6998            jQuery2.event.trigger(e, null, elem);
6999          }
7000        });
7001        jQuery2.fn.extend({
7002          trigger: function(type, data) {
7003            return this.each(function() {
7004              jQuery2.event.trigger(type, data, this);
7005            });
7006          },
7007          triggerHandler: function(type, data) {
7008            var elem = this[0];
7009            if (elem) {
7010              return jQuery2.event.trigger(type, data, elem, true);
7011            }
7012          }
7013        });
7014        var rbracket = /\[\]$/, rCRLF = /\r?\n/g, rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, rsubmittable = /^(?:input|select|textarea|keygen)/i;
7015        function buildParams(prefix, obj, traditional, add) {
7016          var name;
7017          if (Array.isArray(obj)) {
7018            jQuery2.each(obj, function(i, v) {
7019              if (traditional || rbracket.test(prefix)) {
7020                add(prefix, v);
7021              } else {
7022                buildParams(
7023                  prefix + "[" + (typeof v === "object" && v != null ? i : "") + "]",
7024                  v,
7025                  traditional,
7026                  add
7027                );
7028              }
7029            });
7030          } else if (!traditional && toType(obj) === "object") {
7031            for (name in obj) {
7032              buildParams(prefix + "[" + name + "]", obj[name], traditional, add);
7033            }
7034          } else {
7035            add(prefix, obj);
7036          }
7037        }
7038        jQuery2.param = function(a, traditional) {
7039          var prefix, s = [], add = function(key, valueOrFunction) {
7040            var value = isFunction(valueOrFunction) ? valueOrFunction() : valueOrFunction;
7041            s[s.length] = encodeURIComponent(key) + "=" + encodeURIComponent(value == null ? "" : value);
7042          };
7043          if (a == null) {
7044            return "";
7045          }
7046          if (Array.isArray(a) || a.jquery && !jQuery2.isPlainObject(a)) {
7047            jQuery2.each(a, function() {
7048              add(this.name, this.value);
7049            });
7050          } else {
7051            for (prefix in a) {
7052              buildParams(prefix, a[prefix], traditional, add);
7053            }
7054          }
7055          return s.join("&");
7056        };
7057        jQuery2.fn.extend({
7058          serialize: function() {
7059            return jQuery2.param(this.serializeArray());
7060          },
7061          serializeArray: function() {
7062            return this.map(function() {
7063              var elements = jQuery2.prop(this, "elements");
7064              return elements ? jQuery2.makeArray(elements) : this;
7065            }).filter(function() {
7066              var type = this.type;
7067              return this.name && !jQuery2(this).is(":disabled") && rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) && (this.checked || !rcheckableType.test(type));
7068            }).map(function(_i, elem) {
7069              var val = jQuery2(this).val();
7070              if (val == null) {
7071                return null;
7072              }
7073              if (Array.isArray(val)) {
7074                return jQuery2.map(val, function(val2) {
7075                  return { name: elem.name, value: val2.replace(rCRLF, "\r\n") };
7076                });
7077              }
7078              return { name: elem.name, value: val.replace(rCRLF, "\r\n") };
7079            }).get();
7080          }
7081        });
7082        var r20 = /%20/g, rhash = /#.*$/, rantiCache = /([?&])_=[^&]*/, rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, rnoContent = /^(?:GET|HEAD)$/, rprotocol = /^\/\//, prefilters = {}, transports = {}, allTypes = "*/".concat("*"), originAnchor = document2.createElement("a");
7083        originAnchor.href = location2.href;
7084        function addToPrefiltersOrTransports(structure) {
7085          return function(dataTypeExpression, func) {
7086            if (typeof dataTypeExpression !== "string") {
7087              func = dataTypeExpression;
7088              dataTypeExpression = "*";
7089            }
7090            var dataType, i = 0, dataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];
7091            if (isFunction(func)) {
7092              while (dataType = dataTypes[i++]) {
7093                if (dataType[0] === "+") {
7094                  dataType = dataType.slice(1) || "*";
7095                  (structure[dataType] = structure[dataType] || []).unshift(func);
7096                } else {
7097                  (structure[dataType] = structure[dataType] || []).push(func);
7098                }
7099              }
7100            }
7101          };
7102        }
7103        function inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {
7104          var inspected = {}, seekingTransport = structure === transports;
7105          function inspect(dataType) {
7106            var selected;
7107            inspected[dataType] = true;
7108            jQuery2.each(structure[dataType] || [], function(_, prefilterOrFactory) {
7109              var dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);
7110              if (typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[dataTypeOrTransport]) {
7111                options.dataTypes.unshift(dataTypeOrTransport);
7112                inspect(dataTypeOrTransport);
7113                return false;
7114              } else if (seekingTransport) {
7115                return !(selected = dataTypeOrTransport);
7116              }
7117            });
7118            return selected;
7119          }
7120          return inspect(options.dataTypes[0]) || !inspected["*"] && inspect("*");
7121        }
7122        function ajaxExtend(target, src) {
7123          var key, deep, flatOptions = jQuery2.ajaxSettings.flatOptions || {};
7124          for (key in src) {
7125            if (src[key] !== void 0) {
7126              (flatOptions[key] ? target : deep || (deep = {}))[key] = src[key];
7127            }
7128          }
7129          if (deep) {
7130            jQuery2.extend(true, target, deep);
7131          }
7132          return target;
7133        }
7134        function ajaxHandleResponses(s, jqXHR, responses) {
7135          var ct, type, finalDataType, firstDataType, contents = s.contents, dataTypes = s.dataTypes;
7136          while (dataTypes[0] === "*") {
7137            dataTypes.shift();
7138            if (ct === void 0) {
7139              ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
7140            }
7141          }
7142          if (ct) {
7143            for (type in contents) {
7144              if (contents[type] && contents[type].test(ct)) {
7145                dataTypes.unshift(type);
7146                break;
7147              }
7148            }
7149          }
7150          if (dataTypes[0] in responses) {
7151            finalDataType = dataTypes[0];
7152          } else {
7153            for (type in responses) {
7154              if (!dataTypes[0] || s.converters[type + " " + dataTypes[0]]) {
7155                finalDataType = type;
7156                break;
7157              }
7158              if (!firstDataType) {
7159                firstDataType = type;
7160              }
7161            }
7162            finalDataType = finalDataType || firstDataType;
7163          }
7164          if (finalDataType) {
7165            if (finalDataType !== dataTypes[0]) {
7166              dataTypes.unshift(finalDataType);
7167            }
7168            return responses[finalDataType];
7169          }
7170        }
7171        function ajaxConvert(s, response, jqXHR, isSuccess) {
7172          var conv2, current, conv, tmp, prev, converters = {}, dataTypes = s.dataTypes.slice();
7173          if (dataTypes[1]) {
7174            for (conv in s.converters) {
7175              converters[conv.toLowerCase()] = s.converters[conv];
7176            }
7177          }
7178          current = dataTypes.shift();
7179          while (current) {
7180            if (s.responseFields[current]) {
7181              jqXHR[s.responseFields[current]] = response;
7182            }
7183            if (!prev && isSuccess && s.dataFilter) {
7184              response = s.dataFilter(response, s.dataType);
7185            }
7186            prev = current;
7187            current = dataTypes.shift();
7188            if (current) {
7189              if (current === "*") {
7190                current = prev;
7191              } else if (prev !== "*" && prev !== current) {
7192                conv = converters[prev + " " + current] || converters["* " + current];
7193                if (!conv) {
7194                  for (conv2 in converters) {
7195                    tmp = conv2.split(" ");
7196                    if (tmp[1] === current) {
7197                      conv = converters[prev + " " + tmp[0]] || converters["* " + tmp[0]];
7198                      if (conv) {
7199                        if (conv === true) {
7200                          conv = converters[conv2];
7201                        } else if (converters[conv2] !== true) {
7202                          current = tmp[0];
7203                          dataTypes.unshift(tmp[1]);
7204                        }
7205                        break;
7206                      }
7207                    }
7208                  }
7209                }
7210                if (conv !== true) {
7211                  if (conv && s.throws) {
7212                    response = conv(response);
7213                  } else {
7214                    try {
7215                      response = conv(response);
7216                    } catch (e) {
7217                      return {
7218                        state: "parsererror",
7219                        error: conv ? e : "No conversion from " + prev + " to " + current
7220                      };
7221                    }
7222                  }
7223                }
7224              }
7225            }
7226          }
7227          return { state: "success", data: response };
7228        }
7229        jQuery2.extend({
7230          // Counter for holding the number of active queries
7231          active: 0,
7232          // Last-Modified header cache for next request
7233          lastModified: {},
7234          etag: {},
7235          ajaxSettings: {
7236            url: location2.href,
7237            type: "GET",
7238            isLocal: rlocalProtocol.test(location2.protocol),
7239            global: true,
7240            processData: true,
7241            async: true,
7242            contentType: "application/x-www-form-urlencoded; charset=UTF-8",
7243            /*
7244            timeout: 0,
7245            data: null,
7246            dataType: null,
7247            username: null,
7248            password: null,
7249            cache: null,
7250            throws: false,
7251            traditional: false,
7252            headers: {},
7253            */
7254            accepts: {
7255              "*": allTypes,
7256              text: "text/plain",
7257              html: "text/html",
7258              xml: "application/xml, text/xml",
7259              json: "application/json, text/javascript"
7260            },
7261            contents: {
7262              xml: /\bxml\b/,
7263              html: /\bhtml/,
7264              json: /\bjson\b/
7265            },
7266            responseFields: {
7267              xml: "responseXML",
7268              text: "responseText",
7269              json: "responseJSON"
7270            },
7271            // Data converters
7272            // Keys separate source (or catchall "*") and destination types with a single space
7273            converters: {
7274              // Convert anything to text
7275              "* text": String,
7276              // Text to html (true = no transformation)
7277              "text html": true,
7278              // Evaluate text as a json expression
7279              "text json": JSON.parse,
7280              // Parse text as xml
7281              "text xml": jQuery2.parseXML
7282            },
7283            // For options that shouldn't be deep extended:
7284            // you can add your own custom options here if
7285            // and when you create one that shouldn't be
7286            // deep extended (see ajaxExtend)
7287            flatOptions: {
7288              url: true,
7289              context: true
7290            }
7291          },
7292          // Creates a full fledged settings object into target
7293          // with both ajaxSettings and settings fields.
7294          // If target is omitted, writes into ajaxSettings.
7295          ajaxSetup: function(target, settings) {
7296            return settings ? (
7297              // Building a settings object
7298              ajaxExtend(ajaxExtend(target, jQuery2.ajaxSettings), settings)
7299            ) : (
7300              // Extending ajaxSettings
7301              ajaxExtend(jQuery2.ajaxSettings, target)
7302            );
7303          },
7304          ajaxPrefilter: addToPrefiltersOrTransports(prefilters),
7305          ajaxTransport: addToPrefiltersOrTransports(transports),
7306          // Main method
7307          ajax: function(url, options) {
7308            if (typeof url === "object") {
7309              options = url;
7310              url = void 0;
7311            }
7312            options = options || {};
7313            var transport, cacheURL, responseHeadersString, responseHeaders, timeoutTimer, urlAnchor, completed2, fireGlobals, i, uncached, s = jQuery2.ajaxSetup({}, options), callbackContext = s.context || s, globalEventContext = s.context && (callbackContext.nodeType || callbackContext.jquery) ? jQuery2(callbackContext) : jQuery2.event, deferred = jQuery2.Deferred(), completeDeferred = jQuery2.Callbacks("once memory"), statusCode = s.statusCode || {}, requestHeaders = {}, requestHeadersNames = {}, strAbort = "canceled", jqXHR = {
7314              readyState: 0,
7315              // Builds headers hashtable if needed
7316              getResponseHeader: function(key) {
7317                var match;
7318                if (completed2) {
7319                  if (!responseHeaders) {
7320                    responseHeaders = {};
7321                    while (match = rheaders.exec(responseHeadersString)) {
7322                      responseHeaders[match[1].toLowerCase() + " "] = (responseHeaders[match[1].toLowerCase() + " "] || []).concat(match[2]);
7323                    }
7324                  }
7325                  match = responseHeaders[key.toLowerCase() + " "];
7326                }
7327                return match == null ? null : match.join(", ");
7328              },
7329              // Raw string
7330              getAllResponseHeaders: function() {
7331                return completed2 ? responseHeadersString : null;
7332              },
7333              // Caches the header
7334              setRequestHeader: function(name, value) {
7335                if (completed2 == null) {
7336                  name = requestHeadersNames[name.toLowerCase()] = requestHeadersNames[name.toLowerCase()] || name;
7337                  requestHeaders[name] = value;
7338                }
7339                return this;
7340              },
7341              // Overrides response content-type header
7342              overrideMimeType: function(type) {
7343                if (completed2 == null) {
7344                  s.mimeType = type;
7345                }
7346                return this;
7347              },
7348              // Status-dependent callbacks
7349              statusCode: function(map) {
7350                var code;
7351                if (map) {
7352                  if (completed2) {
7353                    jqXHR.always(map[jqXHR.status]);
7354                  } else {
7355                    for (code in map) {
7356                      statusCode[code] = [statusCode[code], map[code]];
7357                    }
7358                  }
7359                }
7360                return this;
7361              },
7362              // Cancel the request
7363              abort: function(statusText) {
7364                var finalText = statusText || strAbort;
7365                if (transport) {
7366                  transport.abort(finalText);
7367                }
7368                done(0, finalText);
7369                return this;
7370              }
7371            };
7372            deferred.promise(jqXHR);
7373            s.url = ((url || s.url || location2.href) + "").replace(rprotocol, location2.protocol + "//");
7374            s.type = options.method || options.type || s.method || s.type;
7375            s.dataTypes = (s.dataType || "*").toLowerCase().match(rnothtmlwhite) || [""];
7376            if (s.crossDomain == null) {
7377              urlAnchor = document2.createElement("a");
7378              try {
7379                urlAnchor.href = s.url;
7380                urlAnchor.href = urlAnchor.href;
7381                s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== urlAnchor.protocol + "//" + urlAnchor.host;
7382              } catch (e) {
7383                s.crossDomain = true;
7384              }
7385            }
7386            if (s.data && s.processData && typeof s.data !== "string") {
7387              s.data = jQuery2.param(s.data, s.traditional);
7388            }
7389            inspectPrefiltersOrTransports(prefilters, s, options, jqXHR);
7390            if (completed2) {
7391              return jqXHR;
7392            }
7393            fireGlobals = jQuery2.event && s.global;
7394            if (fireGlobals && jQuery2.active++ === 0) {
7395              jQuery2.event.trigger("ajaxStart");
7396            }
7397            s.type = s.type.toUpperCase();
7398            s.hasContent = !rnoContent.test(s.type);
7399            cacheURL = s.url.replace(rhash, "");
7400            if (!s.hasContent) {
7401              uncached = s.url.slice(cacheURL.length);
7402              if (s.data && (s.processData || typeof s.data === "string")) {
7403                cacheURL += (rquery.test(cacheURL) ? "&" : "?") + s.data;
7404                delete s.data;
7405              }
7406              if (s.cache === false) {
7407                cacheURL = cacheURL.replace(rantiCache, "$1");
7408                uncached = (rquery.test(cacheURL) ? "&" : "?") + "_=" + nonce.guid++ + uncached;
7409              }
7410              s.url = cacheURL + uncached;
7411            } else if (s.data && s.processData && (s.contentType || "").indexOf("application/x-www-form-urlencoded") === 0) {
7412              s.data = s.data.replace(r20, "+");
7413            }
7414            if (s.ifModified) {
7415              if (jQuery2.lastModified[cacheURL]) {
7416                jqXHR.setRequestHeader("If-Modified-Since", jQuery2.lastModified[cacheURL]);
7417              }
7418              if (jQuery2.etag[cacheURL]) {
7419                jqXHR.setRequestHeader("If-None-Match", jQuery2.etag[cacheURL]);
7420              }
7421            }
7422            if (s.data && s.hasContent && s.contentType !== false || options.contentType) {
7423              jqXHR.setRequestHeader("Content-Type", s.contentType);
7424            }
7425            jqXHR.setRequestHeader(
7426              "Accept",
7427              s.dataTypes[0] && s.accepts[s.dataTypes[0]] ? s.accepts[s.dataTypes[0]] + (s.dataTypes[0] !== "*" ? ", " + allTypes + "; q=0.01" : "") : s.accepts["*"]
7428            );
7429            for (i in s.headers) {
7430              jqXHR.setRequestHeader(i, s.headers[i]);
7431            }
7432            if (s.beforeSend && (s.beforeSend.call(callbackContext, jqXHR, s) === false || completed2)) {
7433              return jqXHR.abort();
7434            }
7435            strAbort = "abort";
7436            completeDeferred.add(s.complete);
7437            jqXHR.done(s.success);
7438            jqXHR.fail(s.error);
7439            transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);
7440            if (!transport) {
7441              done(-1, "No Transport");
7442            } else {
7443              jqXHR.readyState = 1;
7444              if (fireGlobals) {
7445                globalEventContext.trigger("ajaxSend", [jqXHR, s]);
7446              }
7447              if (completed2) {
7448                return jqXHR;
7449              }
7450              if (s.async && s.timeout > 0) {
7451                timeoutTimer = window2.setTimeout(function() {
7452                  jqXHR.abort("timeout");
7453                }, s.timeout);
7454              }
7455              try {
7456                completed2 = false;
7457                transport.send(requestHeaders, done);
7458              } catch (e) {
7459                if (completed2) {
7460                  throw e;
7461                }
7462                done(-1, e);
7463              }
7464            }
7465            function done(status, nativeStatusText, responses, headers) {
7466              var isSuccess, success, error, response, modified, statusText = nativeStatusText;
7467              if (completed2) {
7468                return;
7469              }
7470              completed2 = true;
7471              if (timeoutTimer) {
7472                window2.clearTimeout(timeoutTimer);
7473              }
7474              transport = void 0;
7475              responseHeadersString = headers || "";
7476              jqXHR.readyState = status > 0 ? 4 : 0;
7477              isSuccess = status >= 200 && status < 300 || status === 304;
7478              if (responses) {
7479                response = ajaxHandleResponses(s, jqXHR, responses);
7480              }
7481              if (!isSuccess && jQuery2.inArray("script", s.dataTypes) > -1 && jQuery2.inArray("json", s.dataTypes) < 0) {
7482                s.converters["text script"] = function() {
7483                };
7484              }
7485              response = ajaxConvert(s, response, jqXHR, isSuccess);
7486              if (isSuccess) {
7487                if (s.ifModified) {
7488                  modified = jqXHR.getResponseHeader("Last-Modified");
7489                  if (modified) {
7490                    jQuery2.lastModified[cacheURL] = modified;
7491                  }
7492                  modified = jqXHR.getResponseHeader("etag");
7493                  if (modified) {
7494                    jQuery2.etag[cacheURL] = modified;
7495                  }
7496                }
7497                if (status === 204 || s.type === "HEAD") {
7498                  statusText = "nocontent";
7499                } else if (status === 304) {
7500                  statusText = "notmodified";
7501                } else {
7502                  statusText = response.state;
7503                  success = response.data;
7504                  error = response.error;
7505                  isSuccess = !error;
7506                }
7507              } else {
7508                error = statusText;
7509                if (status || !statusText) {
7510                  statusText = "error";
7511                  if (status < 0) {
7512                    status = 0;
7513                  }
7514                }
7515              }
7516              jqXHR.status = status;
7517              jqXHR.statusText = (nativeStatusText || statusText) + "";
7518              if (isSuccess) {
7519                deferred.resolveWith(callbackContext, [success, statusText, jqXHR]);
7520              } else {
7521                deferred.rejectWith(callbackContext, [jqXHR, statusText, error]);
7522              }
7523              jqXHR.statusCode(statusCode);
7524              statusCode = void 0;
7525              if (fireGlobals) {
7526                globalEventContext.trigger(
7527                  isSuccess ? "ajaxSuccess" : "ajaxError",
7528                  [jqXHR, s, isSuccess ? success : error]
7529                );
7530              }
7531              completeDeferred.fireWith(callbackContext, [jqXHR, statusText]);
7532              if (fireGlobals) {
7533                globalEventContext.trigger("ajaxComplete", [jqXHR, s]);
7534                if (!--jQuery2.active) {
7535                  jQuery2.event.trigger("ajaxStop");
7536                }
7537              }
7538            }
7539            return jqXHR;
7540          },
7541          getJSON: function(url, data, callback) {
7542            return jQuery2.get(url, data, callback, "json");
7543          },
7544          getScript: function(url, callback) {
7545            return jQuery2.get(url, void 0, callback, "script");
7546          }
7547        });
7548        jQuery2.each(["get", "post"], function(_i, method) {
7549          jQuery2[method] = function(url, data, callback, type) {
7550            if (isFunction(data)) {
7551              type = type || callback;
7552              callback = data;
7553              data = void 0;
7554            }
7555            return jQuery2.ajax(jQuery2.extend({
7556              url,
7557              type: method,
7558              dataType: type,
7559              data,
7560              success: callback
7561            }, jQuery2.isPlainObject(url) && url));
7562          };
7563        });
7564        jQuery2.ajaxPrefilter(function(s) {
7565          var i;
7566          for (i in s.headers) {
7567            if (i.toLowerCase() === "content-type") {
7568              s.contentType = s.headers[i] || "";
7569            }
7570          }
7571        });
7572        jQuery2._evalUrl = function(url, options, doc) {
7573          return jQuery2.ajax({
7574            url,
7575            // Make this explicit, since user can override this through ajaxSetup (trac-11264)
7576            type: "GET",
7577            dataType: "script",
7578            cache: true,
7579            async: false,
7580            global: false,
7581            // Only evaluate the response if it is successful (gh-4126)
7582            // dataFilter is not invoked for failure responses, so using it instead
7583            // of the default converter is kludgy but it works.
7584            converters: {
7585              "text script": function() {
7586              }
7587            },
7588            dataFilter: function(response) {
7589              jQuery2.globalEval(response, options, doc);
7590            }
7591          });
7592        };
7593        jQuery2.fn.extend({
7594          wrapAll: function(html) {
7595            var wrap;
7596            if (this[0]) {
7597              if (isFunction(html)) {
7598                html = html.call(this[0]);
7599              }
7600              wrap = jQuery2(html, this[0].ownerDocument).eq(0).clone(true);
7601              if (this[0].parentNode) {
7602                wrap.insertBefore(this[0]);
7603              }
7604              wrap.map(function() {
7605                var elem = this;
7606                while (elem.firstElementChild) {
7607                  elem = elem.firstElementChild;
7608                }
7609                return elem;
7610              }).append(this);
7611            }
7612            return this;
7613          },
7614          wrapInner: function(html) {
7615            if (isFunction(html)) {
7616              return this.each(function(i) {
7617                jQuery2(this).wrapInner(html.call(this, i));
7618              });
7619            }
7620            return this.each(function() {
7621              var self2 = jQuery2(this), contents = self2.contents();
7622              if (contents.length) {
7623                contents.wrapAll(html);
7624              } else {
7625                self2.append(html);
7626              }
7627            });
7628          },
7629          wrap: function(html) {
7630            var htmlIsFunction = isFunction(html);
7631            return this.each(function(i) {
7632              jQuery2(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);
7633            });
7634          },
7635          unwrap: function(selector) {
7636            this.parent(selector).not("body").each(function() {
7637              jQuery2(this).replaceWith(this.childNodes);
7638            });
7639            return this;
7640          }
7641        });
7642        jQuery2.expr.pseudos.hidden = function(elem) {
7643          return !jQuery2.expr.pseudos.visible(elem);
7644        };
7645        jQuery2.expr.pseudos.visible = function(elem) {
7646          return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);
7647        };
7648        jQuery2.ajaxSettings.xhr = function() {
7649          try {
7650            return new window2.XMLHttpRequest();
7651          } catch (e) {
7652          }
7653        };
7654        var xhrSuccessStatus = {
7655          // File protocol always yields status code 0, assume 200
7656          0: 200,
7657          // Support: IE <=9 only
7658          // trac-1450: sometimes IE returns 1223 when it should be 204
7659          1223: 204
7660        }, xhrSupported = jQuery2.ajaxSettings.xhr();
7661        support.cors = !!xhrSupported && "withCredentials" in xhrSupported;
7662        support.ajax = xhrSupported = !!xhrSupported;
7663        jQuery2.ajaxTransport(function(options) {
7664          var callback, errorCallback;
7665          if (support.cors || xhrSupported && !options.crossDomain) {
7666            return {
7667              send: function(headers, complete) {
7668                var i, xhr = options.xhr();
7669                xhr.open(
7670                  options.type,
7671                  options.url,
7672                  options.async,
7673                  options.username,
7674                  options.password
7675                );
7676                if (options.xhrFields) {
7677                  for (i in options.xhrFields) {
7678                    xhr[i] = options.xhrFields[i];
7679                  }
7680                }
7681                if (options.mimeType && xhr.overrideMimeType) {
7682                  xhr.overrideMimeType(options.mimeType);
7683                }
7684                if (!options.crossDomain && !headers["X-Requested-With"]) {
7685                  headers["X-Requested-With"] = "XMLHttpRequest";
7686                }
7687                for (i in headers) {
7688                  xhr.setRequestHeader(i, headers[i]);
7689                }
7690                callback = function(type) {
7691                  return function() {
7692                    if (callback) {
7693                      callback = errorCallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = xhr.onreadystatechange = null;
7694                      if (type === "abort") {
7695                        xhr.abort();
7696                      } else if (type === "error") {
7697                        if (typeof xhr.status !== "number") {
7698                          complete(0, "error");
7699                        } else {
7700                          complete(
7701                            // File: protocol always yields status 0; see trac-8605, trac-14207
7702                            xhr.status,
7703                            xhr.statusText
7704                          );
7705                        }
7706                      } else {
7707                        complete(
7708                          xhrSuccessStatus[xhr.status] || xhr.status,
7709                          xhr.statusText,
7710                          // Support: IE <=9 only
7711                          // IE9 has no XHR2 but throws on binary (trac-11426)
7712                          // For XHR2 non-text, let the caller handle it (gh-2498)
7713                          (xhr.responseType || "text") !== "text" || typeof xhr.responseText !== "string" ? { binary: xhr.response } : { text: xhr.responseText },
7714                          xhr.getAllResponseHeaders()
7715                        );
7716                      }
7717                    }
7718                  };
7719                };
7720                xhr.onload = callback();
7721                errorCallback = xhr.onerror = xhr.ontimeout = callback("error");
7722                if (xhr.onabort !== void 0) {
7723                  xhr.onabort = errorCallback;
7724                } else {
7725                  xhr.onreadystatechange = function() {
7726                    if (xhr.readyState === 4) {
7727                      window2.setTimeout(function() {
7728                        if (callback) {
7729                          errorCallback();
7730                        }
7731                      });
7732                    }
7733                  };
7734                }
7735                callback = callback("abort");
7736                try {
7737                  xhr.send(options.hasContent && options.data || null);
7738                } catch (e) {
7739                  if (callback) {
7740                    throw e;
7741                  }
7742                }
7743              },
7744              abort: function() {
7745                if (callback) {
7746                  callback();
7747                }
7748              }
7749            };
7750          }
7751        });
7752        jQuery2.ajaxPrefilter(function(s) {
7753          if (s.crossDomain) {
7754            s.contents.script = false;
7755          }
7756        });
7757        jQuery2.ajaxSetup({
7758          accepts: {
7759            script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
7760          },
7761          contents: {
7762            script: /\b(?:java|ecma)script\b/
7763          },
7764          converters: {
7765            "text script": function(text) {
7766              jQuery2.globalEval(text);
7767              return text;
7768            }
7769          }
7770        });
7771        jQuery2.ajaxPrefilter("script", function(s) {
7772          if (s.cache === void 0) {
7773            s.cache = false;
7774          }
7775          if (s.crossDomain) {
7776            s.type = "GET";
7777          }
7778        });
7779        jQuery2.ajaxTransport("script", function(s) {
7780          if (s.crossDomain || s.scriptAttrs) {
7781            var script, callback;
7782            return {
7783              send: function(_, complete) {
7784                script = jQuery2("<script>").attr(s.scriptAttrs || {}).prop({ charset: s.scriptCharset, src: s.url }).on("load error", callback = function(evt) {
7785                  script.remove();
7786                  callback = null;
7787                  if (evt) {
7788                    complete(evt.type === "error" ? 404 : 200, evt.type);
7789                  }
7790                });
7791                document2.head.appendChild(script[0]);
7792              },
7793              abort: function() {
7794                if (callback) {
7795                  callback();
7796                }
7797              }
7798            };
7799          }
7800        });
7801        var oldCallbacks = [], rjsonp = /(=)\?(?=&|$)|\?\?/;
7802        jQuery2.ajaxSetup({
7803          jsonp: "callback",
7804          jsonpCallback: function() {
7805            var callback = oldCallbacks.pop() || jQuery2.expando + "_" + nonce.guid++;
7806            this[callback] = true;
7807            return callback;
7808          }
7809        });
7810        jQuery2.ajaxPrefilter("json jsonp", function(s, originalSettings, jqXHR) {
7811          var callbackName, overwritten, responseContainer, jsonProp = s.jsonp !== false && (rjsonp.test(s.url) ? "url" : typeof s.data === "string" && (s.contentType || "").indexOf("application/x-www-form-urlencoded") === 0 && rjsonp.test(s.data) && "data");
7812          if (jsonProp || s.dataTypes[0] === "jsonp") {
7813            callbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ? s.jsonpCallback() : s.jsonpCallback;
7814            if (jsonProp) {
7815              s[jsonProp] = s[jsonProp].replace(rjsonp, "$1" + callbackName);
7816            } else if (s.jsonp !== false) {
7817              s.url += (rquery.test(s.url) ? "&" : "?") + s.jsonp + "=" + callbackName;
7818            }
7819            s.converters["script json"] = function() {
7820              if (!responseContainer) {
7821                jQuery2.error(callbackName + " was not called");
7822              }
7823              return responseContainer[0];
7824            };
7825            s.dataTypes[0] = "json";
7826            overwritten = window2[callbackName];
7827            window2[callbackName] = function() {
7828              responseContainer = arguments;
7829            };
7830            jqXHR.always(function() {
7831              if (overwritten === void 0) {
7832                jQuery2(window2).removeProp(callbackName);
7833              } else {
7834                window2[callbackName] = overwritten;
7835              }
7836              if (s[callbackName]) {
7837                s.jsonpCallback = originalSettings.jsonpCallback;
7838                oldCallbacks.push(callbackName);
7839              }
7840              if (responseContainer && isFunction(overwritten)) {
7841                overwritten(responseContainer[0]);
7842              }
7843              responseContainer = overwritten = void 0;
7844            });
7845            return "script";
7846          }
7847        });
7848        support.createHTMLDocument = (function() {
7849          var body = document2.implementation.createHTMLDocument("").body;
7850          body.innerHTML = "<form></form><form></form>";
7851          return body.childNodes.length === 2;
7852        })();
7853        jQuery2.parseHTML = function(data, context, keepScripts) {
7854          if (typeof data !== "string") {
7855            return [];
7856          }
7857          if (typeof context === "boolean") {
7858            keepScripts = context;
7859            context = false;
7860          }
7861          var base, parsed, scripts;
7862          if (!context) {
7863            if (support.createHTMLDocument) {
7864              context = document2.implementation.createHTMLDocument("");
7865              base = context.createElement("base");
7866              base.href = document2.location.href;
7867              context.head.appendChild(base);
7868            } else {
7869              context = document2;
7870            }
7871          }
7872          parsed = rsingleTag.exec(data);
7873          scripts = !keepScripts && [];
7874          if (parsed) {
7875            return [context.createElement(parsed[1])];
7876          }
7877          parsed = buildFragment([data], context, scripts);
7878          if (scripts && scripts.length) {
7879            jQuery2(scripts).remove();
7880          }
7881          return jQuery2.merge([], parsed.childNodes);
7882        };
7883        jQuery2.fn.load = function(url, params, callback) {
7884          var selector, type, response, self2 = this, off = url.indexOf(" ");
7885          if (off > -1) {
7886            selector = stripAndCollapse(url.slice(off));
7887            url = url.slice(0, off);
7888          }
7889          if (isFunction(params)) {
7890            callback = params;
7891            params = void 0;
7892          } else if (params && typeof params === "object") {
7893            type = "POST";
7894          }
7895          if (self2.length > 0) {
7896            jQuery2.ajax({
7897              url,
7898              // If "type" variable is undefined, then "GET" method will be used.
7899              // Make value of this field explicit since
7900              // user can override it through ajaxSetup method
7901              type: type || "GET",
7902              dataType: "html",
7903              data: params
7904            }).done(function(responseText) {
7905              response = arguments;
7906              self2.html(selector ? (
7907                // If a selector was specified, locate the right elements in a dummy div
7908                // Exclude scripts to avoid IE 'Permission Denied' errors
7909                jQuery2("<div>").append(jQuery2.parseHTML(responseText)).find(selector)
7910              ) : (
7911                // Otherwise use the full result
7912                responseText
7913              ));
7914            }).always(callback && function(jqXHR, status) {
7915              self2.each(function() {
7916                callback.apply(this, response || [jqXHR.responseText, status, jqXHR]);
7917              });
7918            });
7919          }
7920          return this;
7921        };
7922        jQuery2.expr.pseudos.animated = function(elem) {
7923          return jQuery2.grep(jQuery2.timers, function(fn) {
7924            return elem === fn.elem;
7925          }).length;
7926        };
7927        jQuery2.offset = {
7928          setOffset: function(elem, options, i) {
7929            var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, position = jQuery2.css(elem, "position"), curElem = jQuery2(elem), props = {};
7930            if (position === "static") {
7931              elem.style.position = "relative";
7932            }
7933            curOffset = curElem.offset();
7934            curCSSTop = jQuery2.css(elem, "top");
7935            curCSSLeft = jQuery2.css(elem, "left");
7936            calculatePosition = (position === "absolute" || position === "fixed") && (curCSSTop + curCSSLeft).indexOf("auto") > -1;
7937            if (calculatePosition) {
7938              curPosition = curElem.position();
7939              curTop = curPosition.top;
7940              curLeft = curPosition.left;
7941            } else {
7942              curTop = parseFloat(curCSSTop) || 0;
7943              curLeft = parseFloat(curCSSLeft) || 0;
7944            }
7945            if (isFunction(options)) {
7946              options = options.call(elem, i, jQuery2.extend({}, curOffset));
7947            }
7948            if (options.top != null) {
7949              props.top = options.top - curOffset.top + curTop;
7950            }
7951            if (options.left != null) {
7952              props.left = options.left - curOffset.left + curLeft;
7953            }
7954            if ("using" in options) {
7955              options.using.call(elem, props);
7956            } else {
7957              curElem.css(props);
7958            }
7959          }
7960        };
7961        jQuery2.fn.extend({
7962          // offset() relates an element's border box to the document origin
7963          offset: function(options) {
7964            if (arguments.length) {
7965              return options === void 0 ? this : this.each(function(i) {
7966                jQuery2.offset.setOffset(this, options, i);
7967              });
7968            }
7969            var rect, win, elem = this[0];
7970            if (!elem) {
7971              return;
7972            }
7973            if (!elem.getClientRects().length) {
7974              return { top: 0, left: 0 };
7975            }
7976            rect = elem.getBoundingClientRect();
7977            win = elem.ownerDocument.defaultView;
7978            return {
7979              top: rect.top + win.pageYOffset,
7980              left: rect.left + win.pageXOffset
7981            };
7982          },
7983          // position() relates an element's margin box to its offset parent's padding box
7984          // This corresponds to the behavior of CSS absolute positioning
7985          position: function() {
7986            if (!this[0]) {
7987              return;
7988            }
7989            var offsetParent, offset, doc, elem = this[0], parentOffset = { top: 0, left: 0 };
7990            if (jQuery2.css(elem, "position") === "fixed") {
7991              offset = elem.getBoundingClientRect();
7992            } else {
7993              offset = this.offset();
7994              doc = elem.ownerDocument;
7995              offsetParent = elem.offsetParent || doc.documentElement;
7996              while (offsetParent && (offsetParent === doc.body || offsetParent === doc.documentElement) && jQuery2.css(offsetParent, "position") === "static") {
7997                offsetParent = offsetParent.parentNode;
7998              }
7999              if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {
8000                parentOffset = jQuery2(offsetParent).offset();
8001                parentOffset.top += jQuery2.css(offsetParent, "borderTopWidth", true);
8002                parentOffset.left += jQuery2.css(offsetParent, "borderLeftWidth", true);
8003              }
8004            }
8005            return {
8006              top: offset.top - parentOffset.top - jQuery2.css(elem, "marginTop", true),
8007              left: offset.left - parentOffset.left - jQuery2.css(elem, "marginLeft", true)
8008            };
8009          },
8010          // This method will return documentElement in the following cases:
8011          // 1) For the element inside the iframe without offsetParent, this method will return
8012          //    documentElement of the parent window
8013          // 2) For the hidden or detached element
8014          // 3) For body or html element, i.e. in case of the html node - it will return itself
8015          //
8016          // but those exceptions were never presented as a real life use-cases
8017          // and might be considered as more preferable results.
8018          //
8019          // This logic, however, is not guaranteed and can change at any point in the future
8020          offsetParent: function() {
8021            return this.map(function() {
8022              var offsetParent = this.offsetParent;
8023              while (offsetParent && jQuery2.css(offsetParent, "position") === "static") {
8024                offsetParent = offsetParent.offsetParent;
8025              }
8026              return offsetParent || documentElement;
8027            });
8028          }
8029        });
8030        jQuery2.each({ scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function(method, prop) {
8031          var top = "pageYOffset" === prop;
8032          jQuery2.fn[method] = function(val) {
8033            return access(this, function(elem, method2, val2) {
8034              var win;
8035              if (isWindow(elem)) {
8036                win = elem;
8037              } else if (elem.nodeType === 9) {
8038                win = elem.defaultView;
8039              }
8040              if (val2 === void 0) {
8041                return win ? win[prop] : elem[method2];
8042              }
8043              if (win) {
8044                win.scrollTo(
8045                  !top ? val2 : win.pageXOffset,
8046                  top ? val2 : win.pageYOffset
8047                );
8048              } else {
8049                elem[method2] = val2;
8050              }
8051            }, method, val, arguments.length);
8052          };
8053        });
8054        jQuery2.each(["top", "left"], function(_i, prop) {
8055          jQuery2.cssHooks[prop] = addGetHookIf(
8056            support.pixelPosition,
8057            function(elem, computed) {
8058              if (computed) {
8059                computed = curCSS(elem, prop);
8060                return rnumnonpx.test(computed) ? jQuery2(elem).position()[prop] + "px" : computed;
8061              }
8062            }
8063          );
8064        });
8065        jQuery2.each({ Height: "height", Width: "width" }, function(name, type) {
8066          jQuery2.each({
8067            padding: "inner" + name,
8068            content: type,
8069            "": "outer" + name
8070          }, function(defaultExtra, funcName) {
8071            jQuery2.fn[funcName] = function(margin, value) {
8072              var chainable = arguments.length && (defaultExtra || typeof margin !== "boolean"), extra = defaultExtra || (margin === true || value === true ? "margin" : "border");
8073              return access(this, function(elem, type2, value2) {
8074                var doc;
8075                if (isWindow(elem)) {
8076                  return funcName.indexOf("outer") === 0 ? elem["inner" + name] : elem.document.documentElement["client" + name];
8077                }
8078                if (elem.nodeType === 9) {
8079                  doc = elem.documentElement;
8080                  return Math.max(
8081                    elem.body["scroll" + name],
8082                    doc["scroll" + name],
8083                    elem.body["offset" + name],
8084                    doc["offset" + name],
8085                    doc["client" + name]
8086                  );
8087                }
8088                return value2 === void 0 ? (
8089                  // Get width or height on the element, requesting but not forcing parseFloat
8090                  jQuery2.css(elem, type2, extra)
8091                ) : (
8092                  // Set width or height on the element
8093                  jQuery2.style(elem, type2, value2, extra)
8094                );
8095              }, type, chainable ? margin : void 0, chainable);
8096            };
8097          });
8098        });
8099        jQuery2.each([
8100          "ajaxStart",
8101          "ajaxStop",
8102          "ajaxComplete",
8103          "ajaxError",
8104          "ajaxSuccess",
8105          "ajaxSend"
8106        ], function(_i, type) {
8107          jQuery2.fn[type] = function(fn) {
8108            return this.on(type, fn);
8109          };
8110        });
8111        jQuery2.fn.extend({
8112          bind: function(types, data, fn) {
8113            return this.on(types, null, data, fn);
8114          },
8115          unbind: function(types, fn) {
8116            return this.off(types, null, fn);
8117          },
8118          delegate: function(selector, types, data, fn) {
8119            return this.on(types, selector, data, fn);
8120          },
8121          undelegate: function(selector, types, fn) {
8122            return arguments.length === 1 ? this.off(selector, "**") : this.off(types, selector || "**", fn);
8123          },
8124          hover: function(fnOver, fnOut) {
8125            return this.on("mouseenter", fnOver).on("mouseleave", fnOut || fnOver);
8126          }
8127        });
8128        jQuery2.each(
8129          "blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),
8130          function(_i, name) {
8131            jQuery2.fn[name] = function(data, fn) {
8132              return arguments.length > 0 ? this.on(name, null, data, fn) : this.trigger(name);
8133            };
8134          }
8135        );
8136        var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;
8137        jQuery2.proxy = function(fn, context) {
8138          var tmp, args, proxy;
8139          if (typeof context === "string") {
8140            tmp = fn[context];
8141            context = fn;
8142            fn = tmp;
8143          }
8144          if (!isFunction(fn)) {
8145            return void 0;
8146          }
8147          args = slice.call(arguments, 2);
8148          proxy = function() {
8149            return fn.apply(context || this, args.concat(slice.call(arguments)));
8150          };
8151          proxy.guid = fn.guid = fn.guid || jQuery2.guid++;
8152          return proxy;
8153        };
8154        jQuery2.holdReady = function(hold) {
8155          if (hold) {
8156            jQuery2.readyWait++;
8157          } else {
8158            jQuery2.ready(true);
8159          }
8160        };
8161        jQuery2.isArray = Array.isArray;
8162        jQuery2.parseJSON = JSON.parse;
8163        jQuery2.nodeName = nodeName;
8164        jQuery2.isFunction = isFunction;
8165        jQuery2.isWindow = isWindow;
8166        jQuery2.camelCase = camelCase;
8167        jQuery2.type = toType;
8168        jQuery2.now = Date.now;
8169        jQuery2.isNumeric = function(obj) {
8170          var type = jQuery2.type(obj);
8171          return (type === "number" || type === "string") && // parseFloat NaNs numeric-cast false positives ("")
8172          // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
8173          // subtraction forces infinities to NaN
8174          !isNaN(obj - parseFloat(obj));
8175        };
8176        jQuery2.trim = function(text) {
8177          return text == null ? "" : (text + "").replace(rtrim, "$1");
8178        };
8179        if (typeof define === "function" && define.amd) {
8180          define("jquery", [], function() {
8181            return jQuery2;
8182          });
8183        }
8184        var _jQuery = window2.jQuery, _$ = window2.$;
8185        jQuery2.noConflict = function(deep) {
8186          if (window2.$ === jQuery2) {
8187            window2.$ = _$;
8188          }
8189          if (deep && window2.jQuery === jQuery2) {
8190            window2.jQuery = _jQuery;
8191          }
8192          return jQuery2;
8193        };
8194        if (typeof noGlobal === "undefined") {
8195          window2.jQuery = window2.$ = jQuery2;
8196        }
8197        return jQuery2;
8198      });
8199    }
8200  });
8201
8202  
vendor: 182,377 bytes, lines 8202-12757
8202// node_modules/select2/dist/js/select2.js
8203  var require_select2 = __commonJS({
8204    "node_modules/select2/dist/js/select2.js"(exports, module) {
8205      init_esbuild_shims();
8206      (function(factory) {
8207        if (typeof define === "function" && define.amd) {
8208          define(["jquery"], factory);
8209        } else if (typeof module === "object" && module.exports) {
8210          module.exports = function(root, jQuery2) {
8211            if (jQuery2 === void 0) {
8212              if (typeof window !== "undefined") {
8213                jQuery2 = require_jquery();
8214              } else {
8215                jQuery2 = require_jquery()(root);
8216              }
8217            }
8218            factory(jQuery2);
8219            return jQuery2;
8220          };
8221        } else {
8222          factory(jQuery);
8223        }
8224      })(function(jQuery2) {
8225        var S2 = (function() {
8226          if (jQuery2 && jQuery2.fn && jQuery2.fn.select2 && jQuery2.fn.select2.amd) {
8227            var S22 = jQuery2.fn.select2.amd;
8228          }
8229          var S22;
8230          (function() {
8231            if (!S22 || !S22.requirejs) {
8232              if (!S22) {
8233                S22 = {};
8234              } else {
8235                require2 = S22;
8236              }
8237              var requirejs, require2, define2;
8238              (function(undef) {
8239                var main, req, makeMap, handlers, defined = {}, waiting = {}, config = {}, defining = {}, hasOwn = Object.prototype.hasOwnProperty, aps = [].slice, jsSuffixRegExp = /\.js$/;
8240                function hasProp(obj, prop) {
8241                  return hasOwn.call(obj, prop);
8242                }
8243                function normalize(name, baseName) {
8244                  var nameParts, nameSegment, mapValue, foundMap, lastIndex, foundI, foundStarMap, starI, i, j, part, normalizedBaseParts, baseParts = baseName && baseName.split("/"), map = config.map, starMap = map && map["*"] || {};
8245                  if (name) {
8246                    name = name.split("/");
8247                    lastIndex = name.length - 1;
8248                    if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {
8249                      name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, "");
8250                    }
8251                    if (name[0].charAt(0) === "." && baseParts) {
8252                      normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);
8253                      name = normalizedBaseParts.concat(name);
8254                    }
8255                    for (i = 0; i < name.length; i++) {
8256                      part = name[i];
8257                      if (part === ".") {
8258                        name.splice(i, 1);
8259                        i -= 1;
8260                      } else if (part === "..") {
8261                        if (i === 0 || i === 1 && name[2] === ".." || name[i - 1] === "..") {
8262                          continue;
8263                        } else if (i > 0) {
8264                          name.splice(i - 1, 2);
8265                          i -= 2;
8266                        }
8267                      }
8268                    }
8269                    name = name.join("/");
8270                  }
8271                  if ((baseParts || starMap) && map) {
8272                    nameParts = name.split("/");
8273                    for (i = nameParts.length; i > 0; i -= 1) {
8274                      nameSegment = nameParts.slice(0, i).join("/");
8275                      if (baseParts) {
8276                        for (j = baseParts.length; j > 0; j -= 1) {
8277                          mapValue = map[baseParts.slice(0, j).join("/")];
8278                          if (mapValue) {
8279                            mapValue = mapValue[nameSegment];
8280                            if (mapValue) {
8281                              foundMap = mapValue;
8282                              foundI = i;
8283                              break;
8284                            }
8285                          }
8286                        }
8287                      }
8288                      if (foundMap) {
8289                        break;
8290                      }
8291                      if (!foundStarMap && starMap && starMap[nameSegment]) {
8292                        foundStarMap = starMap[nameSegment];
8293                        starI = i;
8294                      }
8295                    }
8296                    if (!foundMap && foundStarMap) {
8297                      foundMap = foundStarMap;
8298                      foundI = starI;
8299                    }
8300                    if (foundMap) {
8301                      nameParts.splice(0, foundI, foundMap);
8302                      name = nameParts.join("/");
8303                    }
8304                  }
8305                  return name;
8306                }
8307                function makeRequire(relName, forceSync) {
8308                  return function() {
8309                    var args = aps.call(arguments, 0);
8310                    if (typeof args[0] !== "string" && args.length === 1) {
8311                      args.push(null);
8312                    }
8313                    return req.apply(undef, args.concat([relName, forceSync]));
8314                  };
8315                }
8316                function makeNormalize(relName) {
8317                  return function(name) {
8318                    return normalize(name, relName);
8319                  };
8320                }
8321                function makeLoad(depName) {
8322                  return function(value) {
8323                    defined[depName] = value;
8324                  };
8325                }
8326                function callDep(name) {
8327                  if (hasProp(waiting, name)) {
8328                    var args = waiting[name];
8329                    delete waiting[name];
8330                    defining[name] = true;
8331                    main.apply(undef, args);
8332                  }
8333                  if (!hasProp(defined, name) && !hasProp(defining, name)) {
8334                    throw new Error("No " + name);
8335                  }
8336                  return defined[name];
8337                }
8338                function splitPrefix(name) {
8339                  var prefix, index = name ? name.indexOf("!") : -1;
8340                  if (index > -1) {
8341                    prefix = name.substring(0, index);
8342                    name = name.substring(index + 1, name.length);
8343                  }
8344                  return [prefix, name];
8345                }
8346                function makeRelParts(relName) {
8347                  return relName ? splitPrefix(relName) : [];
8348                }
8349                makeMap = function(name, relParts) {
8350                  var plugin, parts = splitPrefix(name), prefix = parts[0], relResourceName = relParts[1];
8351                  name = parts[1];
8352                  if (prefix) {
8353                    prefix = normalize(prefix, relResourceName);
8354                    plugin = callDep(prefix);
8355                  }
8356                  if (prefix) {
8357                    if (plugin && plugin.normalize) {
8358                      name = plugin.normalize(name, makeNormalize(relResourceName));
8359                    } else {
8360                      name = normalize(name, relResourceName);
8361                    }
8362                  } else {
8363                    name = normalize(name, relResourceName);
8364                    parts = splitPrefix(name);
8365                    prefix = parts[0];
8366                    name = parts[1];
8367                    if (prefix) {
8368                      plugin = callDep(prefix);
8369                    }
8370                  }
8371                  return {
8372                    f: prefix ? prefix + "!" + name : name,
8373                    //fullName
8374                    n: name,
8375                    pr: prefix,
8376                    p: plugin
8377                  };
8378                };
8379                function makeConfig(name) {
8380                  return function() {
8381                    return config && config.config && config.config[name] || {};
8382                  };
8383                }
8384                handlers = {
8385                  require: function(name) {
8386                    return makeRequire(name);
8387                  },
8388                  exports: function(name) {
8389                    var e = defined[name];
8390                    if (typeof e !== "undefined") {
8391                      return e;
8392                    } else {
8393                      return defined[name] = {};
8394                    }
8395                  },
8396                  module: function(name) {
8397                    return {
8398                      id: name,
8399                      uri: "",
8400                      exports: defined[name],
8401                      config: makeConfig(name)
8402                    };
8403                  }
8404                };
8405                main = function(name, deps, callback, relName) {
8406                  var cjsModule, depName, ret, map, i, relParts, args = [], callbackType = typeof callback, usingExports;
8407                  relName = relName || name;
8408                  relParts = makeRelParts(relName);
8409                  if (callbackType === "undefined" || callbackType === "function") {
8410                    deps = !deps.length && callback.length ? ["require", "exports", "module"] : deps;
8411                    for (i = 0; i < deps.length; i += 1) {
8412                      map = makeMap(deps[i], relParts);
8413                      depName = map.f;
8414                      if (depName === "require") {
8415                        args[i] = handlers.require(name);
8416                      } else if (depName === "exports") {
8417                        args[i] = handlers.exports(name);
8418                        usingExports = true;
8419                      } else if (depName === "module") {
8420                        cjsModule = args[i] = handlers.module(name);
8421                      } else if (hasProp(defined, depName) || hasProp(waiting, depName) || hasProp(defining, depName)) {
8422                        args[i] = callDep(depName);
8423                      } else if (map.p) {
8424                        map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});
8425                        args[i] = defined[depName];
8426                      } else {
8427                        throw new Error(name + " missing " + depName);
8428                      }
8429                    }
8430                    ret = callback ? callback.apply(defined[name], args) : void 0;
8431                    if (name) {
8432                      if (cjsModule && cjsModule.exports !== undef && cjsModule.exports !== defined[name]) {
8433                        defined[name] = cjsModule.exports;
8434                      } else if (ret !== undef || !usingExports) {
8435                        defined[name] = ret;
8436                      }
8437                    }
8438                  } else if (name) {
8439                    defined[name] = callback;
8440                  }
8441                };
8442                requirejs = require2 = req = function(deps, callback, relName, forceSync, alt) {
8443                  if (typeof deps === "string") {
8444                    if (handlers[deps]) {
8445                      return handlers[deps](callback);
8446                    }
8447                    return callDep(makeMap(deps, makeRelParts(callback)).f);
8448                  } else if (!deps.splice) {
8449                    config = deps;
8450                    if (config.deps) {
8451                      req(config.deps, config.callback);
8452                    }
8453                    if (!callback) {
8454                      return;
8455                    }
8456                    if (callback.splice) {
8457                      deps = callback;
8458                      callback = relName;
8459                      relName = null;
8460                    } else {
8461                      deps = undef;
8462                    }
8463                  }
8464                  callback = callback || function() {
8465                  };
8466                  if (typeof relName === "function") {
8467                    relName = forceSync;
8468                    forceSync = alt;
8469                  }
8470                  if (forceSync) {
8471                    main(undef, deps, callback, relName);
8472                  } else {
8473                    setTimeout(function() {
8474                      main(undef, deps, callback, relName);
8475                    }, 4);
8476                  }
8477                  return req;
8478                };
8479                req.config = function(cfg) {
8480                  return req(cfg);
8481                };
8482                requirejs._defined = defined;
8483                define2 = function(name, deps, callback) {
8484                  if (typeof name !== "string") {
8485                    throw new Error("See almond README: incorrect module build, no module name");
8486                  }
8487                  if (!deps.splice) {
8488                    callback = deps;
8489                    deps = [];
8490                  }
8491                  if (!hasProp(defined, name) && !hasProp(waiting, name)) {
8492                    waiting[name] = [name, deps, callback];
8493                  }
8494                };
8495                define2.amd = {
8496                  jQuery: true
8497                };
8498              })();
8499              S22.requirejs = requirejs;
8500              S22.require = require2;
8501              S22.define = define2;
8502            }
8503          })();
8504          S22.define("almond", function() {
8505          });
8506          S22.define("jquery", [], function() {
8507            var _$ = jQuery2 || $;
8508            if (_$ == null && console && console.error) {
8509              console.error(
8510                "Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page."
8511              );
8512            }
8513            return _$;
8514          });
8515          S22.define("select2/utils", [
8516            "jquery"
8517          ], function($3) {
8518            var Utils = {};
8519            Utils.Extend = function(ChildClass, SuperClass) {
8520              var __hasProp = {}.hasOwnProperty;
8521              function BaseConstructor() {
8522                this.constructor = ChildClass;
8523              }
8524              for (var key in SuperClass) {
8525                if (__hasProp.call(SuperClass, key)) {
8526                  ChildClass[key] = SuperClass[key];
8527                }
8528              }
8529              BaseConstructor.prototype = SuperClass.prototype;
8530              ChildClass.prototype = new BaseConstructor();
8531              ChildClass.__super__ = SuperClass.prototype;
8532              return ChildClass;
8533            };
8534            function getMethods(theClass) {
8535              var proto = theClass.prototype;
8536              var methods = [];
8537              for (var methodName in proto) {
8538                var m = proto[methodName];
8539                if (typeof m !== "function") {
8540                  continue;
8541                }
8542                if (methodName === "constructor") {
8543                  continue;
8544                }
8545                methods.push(methodName);
8546              }
8547              return methods;
8548            }
8549            Utils.Decorate = function(SuperClass, DecoratorClass) {
8550              var decoratedMethods = getMethods(DecoratorClass);
8551              var superMethods = getMethods(SuperClass);
8552              function DecoratedClass() {
8553                var unshift = Array.prototype.unshift;
8554                var argCount = DecoratorClass.prototype.constructor.length;
8555                var calledConstructor = SuperClass.prototype.constructor;
8556                if (argCount > 0) {
8557                  unshift.call(arguments, SuperClass.prototype.constructor);
8558                  calledConstructor = DecoratorClass.prototype.constructor;
8559                }
8560                calledConstructor.apply(this, arguments);
8561              }
8562              DecoratorClass.displayName = SuperClass.displayName;
8563              function ctr() {
8564                this.constructor = DecoratedClass;
8565              }
8566              DecoratedClass.prototype = new ctr();
8567              for (var m = 0; m < superMethods.length; m++) {
8568                var superMethod = superMethods[m];
8569                DecoratedClass.prototype[superMethod] = SuperClass.prototype[superMethod];
8570              }
8571              var calledMethod = function(methodName) {
8572                var originalMethod = function() {
8573                };
8574                if (methodName in DecoratedClass.prototype) {
8575                  originalMethod = DecoratedClass.prototype[methodName];
8576                }
8577                var decoratedMethod2 = DecoratorClass.prototype[methodName];
8578                return function() {
8579                  var unshift = Array.prototype.unshift;
8580                  unshift.call(arguments, originalMethod);
8581                  return decoratedMethod2.apply(this, arguments);
8582                };
8583              };
8584              for (var d = 0; d < decoratedMethods.length; d++) {
8585                var decoratedMethod = decoratedMethods[d];
8586                DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);
8587              }
8588              return DecoratedClass;
8589            };
8590            var Observable = function() {
8591              this.listeners = {};
8592            };
8593            Observable.prototype.on = function(event2, callback) {
8594              this.listeners = this.listeners || {};
8595              if (event2 in this.listeners) {
8596                this.listeners[event2].push(callback);
8597              } else {
8598                this.listeners[event2] = [callback];
8599              }
8600            };
8601            Observable.prototype.trigger = function(event2) {
8602              var slice = Array.prototype.slice;
8603              var params = slice.call(arguments, 1);
8604              this.listeners = this.listeners || {};
8605              if (params == null) {
8606                params = [];
8607              }
8608              if (params.length === 0) {
8609                params.push({});
8610              }
8611              params[0]._type = event2;
8612              if (event2 in this.listeners) {
8613                this.invoke(this.listeners[event2], slice.call(arguments, 1));
8614              }
8615              if ("*" in this.listeners) {
8616                this.invoke(this.listeners["*"], arguments);
8617              }
8618            };
8619            Observable.prototype.invoke = function(listeners, params) {
8620              for (var i = 0, len = listeners.length; i < len; i++) {
8621                listeners[i].apply(this, params);
8622              }
8623            };
8624            Utils.Observable = Observable;
8625            Utils.generateChars = function(length) {
8626              var chars = "";
8627              for (var i = 0; i < length; i++) {
8628                var randomChar = Math.floor(Math.random() * 36);
8629                chars += randomChar.toString(36);
8630              }
8631              return chars;
8632            };
8633            Utils.bind = function(func, context) {
8634              return function() {
8635                func.apply(context, arguments);
8636              };
8637            };
8638            Utils._convertData = function(data) {
8639              for (var originalKey in data) {
8640                var keys = originalKey.split("-");
8641                var dataLevel = data;
8642                if (keys.length === 1) {
8643                  continue;
8644                }
8645                for (var k = 0; k < keys.length; k++) {
8646                  var key = keys[k];
8647                  key = key.substring(0, 1).toLowerCase() + key.substring(1);
8648                  if (!(key in dataLevel)) {
8649                    dataLevel[key] = {};
8650                  }
8651                  if (k == keys.length - 1) {
8652                    dataLevel[key] = data[originalKey];
8653                  }
8654                  dataLevel = dataLevel[key];
8655                }
8656                delete data[originalKey];
8657              }
8658              return data;
8659            };
8660            Utils.hasScroll = function(index, el) {
8661              var $el = $3(el);
8662              var overflowX = el.style.overflowX;
8663              var overflowY = el.style.overflowY;
8664              if (overflowX === overflowY && (overflowY === "hidden" || overflowY === "visible")) {
8665                return false;
8666              }
8667              if (overflowX === "scroll" || overflowY === "scroll") {
8668                return true;
8669              }
8670              return $el.innerHeight() < el.scrollHeight || $el.innerWidth() < el.scrollWidth;
8671            };
8672            Utils.escapeMarkup = function(markup) {
8673              var replaceMap = {
8674                "\\": "&#92;",
8675                "&": "&amp;",
8676                "<": "&lt;",
8677                ">": "&gt;",
8678                '"': "&quot;",
8679                "'": "&#39;",
8680                "/": "&#47;"
8681              };
8682              if (typeof markup !== "string") {
8683                return markup;
8684              }
8685              return String(markup).replace(/[&<>"'\/\\]/g, function(match) {
8686                return replaceMap[match];
8687              });
8688            };
8689            Utils.__cache = {};
8690            var id = 0;
8691            Utils.GetUniqueElementId = function(element) {
8692              var select2Id = element.getAttribute("data-select2-id");
8693              if (select2Id != null) {
8694                return select2Id;
8695              }
8696              if (element.id) {
8697                select2Id = "select2-data-" + element.id;
8698              } else {
8699                select2Id = "select2-data-" + (++id).toString() + "-" + Utils.generateChars(4);
8700              }
8701              element.setAttribute("data-select2-id", select2Id);
8702              return select2Id;
8703            };
8704            Utils.StoreData = function(element, name, value) {
8705              var id2 = Utils.GetUniqueElementId(element);
8706              if (!Utils.__cache[id2]) {
8707                Utils.__cache[id2] = {};
8708              }
8709              Utils.__cache[id2][name] = value;
8710            };
8711            Utils.GetData = function(element, name) {
8712              var id2 = Utils.GetUniqueElementId(element);
8713              if (name) {
8714                if (Utils.__cache[id2]) {
8715                  if (Utils.__cache[id2][name] != null) {
8716                    return Utils.__cache[id2][name];
8717                  }
8718                  return $3(element).data(name);
8719                }
8720                return $3(element).data(name);
8721              } else {
8722                return Utils.__cache[id2];
8723              }
8724            };
8725            Utils.RemoveData = function(element) {
8726              var id2 = Utils.GetUniqueElementId(element);
8727              if (Utils.__cache[id2] != null) {
8728                delete Utils.__cache[id2];
8729              }
8730              element.removeAttribute("data-select2-id");
8731            };
8732            Utils.copyNonInternalCssClasses = function(dest, src) {
8733              var classes;
8734              var destinationClasses = dest.getAttribute("class").trim().split(/\s+/);
8735              destinationClasses = destinationClasses.filter(function(clazz) {
8736                return clazz.indexOf("select2-") === 0;
8737              });
8738              var sourceClasses = src.getAttribute("class").trim().split(/\s+/);
8739              sourceClasses = sourceClasses.filter(function(clazz) {
8740                return clazz.indexOf("select2-") !== 0;
8741              });
8742              var replacements = destinationClasses.concat(sourceClasses);
8743              dest.setAttribute("class", replacements.join(" "));
8744            };
8745            return Utils;
8746          });
8747          S22.define("select2/results", [
8748            "jquery",
8749            "./utils"
8750          ], function($3, Utils) {
8751            function Results($element, options, dataAdapter) {
8752              this.$element = $element;
8753              this.data = dataAdapter;
8754              this.options = options;
8755              Results.__super__.constructor.call(this);
8756            }
8757            Utils.Extend(Results, Utils.Observable);
8758            Results.prototype.render = function() {
8759              var $results = $3(
8760                '<ul class="select2-results__options" role="listbox"></ul>'
8761              );
8762              if (this.options.get("multiple")) {
8763                $results.attr("aria-multiselectable", "true");
8764              }
8765              this.$results = $results;
8766              return $results;
8767            };
8768            Results.prototype.clear = function() {
8769              this.$results.empty();
8770            };
8771            Results.prototype.displayMessage = function(params) {
8772              var escapeMarkup = this.options.get("escapeMarkup");
8773              this.clear();
8774              this.hideLoading();
8775              var $message = $3(
8776                '<li role="alert" aria-live="assertive" class="select2-results__option"></li>'
8777              );
8778              var message = this.options.get("translations").get(params.message);
8779              $message.append(
8780                escapeMarkup(
8781                  message(params.args)
8782                )
8783              );
8784              $message[0].className += " select2-results__message";
8785              this.$results.append($message);
8786            };
8787            Results.prototype.hideMessages = function() {
8788              this.$results.find(".select2-results__message").remove();
8789            };
8790            Results.prototype.append = function(data) {
8791              this.hideLoading();
8792              var $options = [];
8793              if (data.results == null || data.results.length === 0) {
8794                if (this.$results.children().length === 0) {
8795                  this.trigger("results:message", {
8796                    message: "noResults"
8797                  });
8798                }
8799                return;
8800              }
8801              data.results = this.sort(data.results);
8802              for (var d = 0; d < data.results.length; d++) {
8803                var item = data.results[d];
8804                var $option = this.option(item);
8805                $options.push($option);
8806              }
8807              this.$results.append($options);
8808            };
8809            Results.prototype.position = function($results, $dropdown) {
8810              var $resultsContainer = $dropdown.find(".select2-results");
8811              $resultsContainer.append($results);
8812            };
8813            Results.prototype.sort = function(data) {
8814              var sorter = this.options.get("sorter");
8815              return sorter(data);
8816            };
8817            Results.prototype.highlightFirstItem = function() {
8818              var $options = this.$results.find(".select2-results__option--selectable");
8819              var $selected = $options.filter(".select2-results__option--selected");
8820              if ($selected.length > 0) {
8821                $selected.first().trigger("mouseenter");
8822              } else {
8823                $options.first().trigger("mouseenter");
8824              }
8825              this.ensureHighlightVisible();
8826            };
8827            Results.prototype.setClasses = function() {
8828              var self2 = this;
8829              this.data.current(function(selected) {
8830                var selectedIds = selected.map(function(s) {
8831                  return s.id.toString();
8832                });
8833                var $options = self2.$results.find(".select2-results__option--selectable");
8834                $options.each(function() {
8835                  var $option = $3(this);
8836                  var item = Utils.GetData(this, "data");
8837                  var id = "" + item.id;
8838                  if (item.element != null && item.element.selected || item.element == null && selectedIds.indexOf(id) > -1) {
8839                    this.classList.add("select2-results__option--selected");
8840                    $option.attr("aria-selected", "true");
8841                  } else {
8842                    this.classList.remove("select2-results__option--selected");
8843                    $option.attr("aria-selected", "false");
8844                  }
8845                });
8846              });
8847            };
8848            Results.prototype.showLoading = function(params) {
8849              this.hideLoading();
8850              var loadingMore = this.options.get("translations").get("searching");
8851              var loading = {
8852                disabled: true,
8853                loading: true,
8854                text: loadingMore(params)
8855              };
8856              var $loading = this.option(loading);
8857              $loading.className += " loading-results";
8858              this.$results.prepend($loading);
8859            };
8860            Results.prototype.hideLoading = function() {
8861              this.$results.find(".loading-results").remove();
8862            };
8863            Results.prototype.option = function(data) {
8864              var option = document.createElement("li");
8865              option.classList.add("select2-results__option");
8866              option.classList.add("select2-results__option--selectable");
8867              var attrs = {
8868                "role": "option"
8869              };
8870              var matches = window.Element.prototype.matches || window.Element.prototype.msMatchesSelector || window.Element.prototype.webkitMatchesSelector;
8871              if (data.element != null && matches.call(data.element, ":disabled") || data.element == null && data.disabled) {
8872                attrs["aria-disabled"] = "true";
8873                option.classList.remove("select2-results__option--selectable");
8874                option.classList.add("select2-results__option--disabled");
8875              }
8876              if (data.id == null) {
8877                option.classList.remove("select2-results__option--selectable");
8878              }
8879              if (data._resultId != null) {
8880                option.id = data._resultId;
8881              }
8882              if (data.title) {
8883                option.title = data.title;
8884              }
8885              if (data.children) {
8886                attrs.role = "group";
8887                attrs["aria-label"] = data.text;
8888                option.classList.remove("select2-results__option--selectable");
8889                option.classList.add("select2-results__option--group");
8890              }
8891              for (var attr in attrs) {
8892                var val = attrs[attr];
8893                option.setAttribute(attr, val);
8894              }
8895              if (data.children) {
8896                var $option = $3(option);
8897                var label = document.createElement("strong");
8898                label.className = "select2-results__group";
8899                this.template(data, label);
8900                var $children = [];
8901                for (var c = 0; c < data.children.length; c++) {
8902                  var child = data.children[c];
8903                  var $child = this.option(child);
8904                  $children.push($child);
8905                }
8906                var $childrenContainer = $3("<ul></ul>", {
8907                  "class": "select2-results__options select2-results__options--nested",
8908                  "role": "none"
8909                });
8910                $childrenContainer.append($children);
8911                $option.append(label);
8912                $option.append($childrenContainer);
8913              } else {
8914                this.template(data, option);
8915              }
8916              Utils.StoreData(option, "data", data);
8917              return option;
8918            };
8919            Results.prototype.bind = function(container, $container) {
8920              var self2 = this;
8921              var id = container.id + "-results";
8922              this.$results.attr("id", id);
8923              container.on("results:all", function(params) {
8924                self2.clear();
8925                self2.append(params.data);
8926                if (container.isOpen()) {
8927                  self2.setClasses();
8928                  self2.highlightFirstItem();
8929                }
8930              });
8931              container.on("results:append", function(params) {
8932                self2.append(params.data);
8933                if (container.isOpen()) {
8934                  self2.setClasses();
8935                }
8936              });
8937              container.on("query", function(params) {
8938                self2.hideMessages();
8939                self2.showLoading(params);
8940              });
8941              container.on("select", function() {
8942                if (!container.isOpen()) {
8943                  return;
8944                }
8945                self2.setClasses();
8946                if (self2.options.get("scrollAfterSelect")) {
8947                  self2.highlightFirstItem();
8948                }
8949              });
8950              container.on("unselect", function() {
8951                if (!container.isOpen()) {
8952                  return;
8953                }
8954                self2.setClasses();
8955                if (self2.options.get("scrollAfterSelect")) {
8956                  self2.highlightFirstItem();
8957                }
8958              });
8959              container.on("open", function() {
8960                self2.$results.attr("aria-expanded", "true");
8961                self2.$results.attr("aria-hidden", "false");
8962                self2.setClasses();
8963                self2.ensureHighlightVisible();
8964              });
8965              container.on("close", function() {
8966                self2.$results.attr("aria-expanded", "false");
8967                self2.$results.attr("aria-hidden", "true");
8968                self2.$results.removeAttr("aria-activedescendant");
8969              });
8970              container.on("results:toggle", function() {
8971                var $highlighted = self2.getHighlightedResults();
8972                if ($highlighted.length === 0) {
8973                  return;
8974                }
8975                $highlighted.trigger("mouseup");
8976              });
8977              container.on("results:select", function() {
8978                var $highlighted = self2.getHighlightedResults();
8979                if ($highlighted.length === 0) {
8980                  return;
8981                }
8982                var data = Utils.GetData($highlighted[0], "data");
8983                if ($highlighted.hasClass("select2-results__option--selected")) {
8984                  self2.trigger("close", {});
8985                } else {
8986                  self2.trigger("select", {
8987                    data
8988                  });
8989                }
8990              });
8991              container.on("results:previous", function() {
8992                var $highlighted = self2.getHighlightedResults();
8993                var $options = self2.$results.find(".select2-results__option--selectable");
8994                var currentIndex = $options.index($highlighted);
8995                if (currentIndex <= 0) {
8996                  return;
8997                }
8998                var nextIndex = currentIndex - 1;
8999                if ($highlighted.length === 0) {
9000                  nextIndex = 0;
9001                }
9002                var $next = $options.eq(nextIndex);
9003                $next.trigger("mouseenter");
9004                var currentOffset = self2.$results.offset().top;
9005                var nextTop = $next.offset().top;
9006                var nextOffset = self2.$results.scrollTop() + (nextTop - currentOffset);
9007                if (nextIndex === 0) {
9008                  self2.$results.scrollTop(0);
9009                } else if (nextTop - currentOffset < 0) {
9010                  self2.$results.scrollTop(nextOffset);
9011                }
9012              });
9013              container.on("results:next", function() {
9014                var $highlighted = self2.getHighlightedResults();
9015                var $options = self2.$results.find(".select2-results__option--selectable");
9016                var currentIndex = $options.index($highlighted);
9017                var nextIndex = currentIndex + 1;
9018                if (nextIndex >= $options.length) {
9019                  return;
9020                }
9021                var $next = $options.eq(nextIndex);
9022                $next.trigger("mouseenter");
9023                var currentOffset = self2.$results.offset().top + self2.$results.outerHeight(false);
9024                var nextBottom = $next.offset().top + $next.outerHeight(false);
9025                var nextOffset = self2.$results.scrollTop() + nextBottom - currentOffset;
9026                if (nextIndex === 0) {
9027                  self2.$results.scrollTop(0);
9028                } else if (nextBottom > currentOffset) {
9029                  self2.$results.scrollTop(nextOffset);
9030                }
9031              });
9032              container.on("results:focus", function(params) {
9033                params.element[0].classList.add("select2-results__option--highlighted");
9034                params.element[0].setAttribute("aria-selected", "true");
9035              });
9036              container.on("results:message", function(params) {
9037                self2.displayMessage(params);
9038              });
9039              if ($3.fn.mousewheel) {
9040                this.$results.on("mousewheel", function(e) {
9041                  var top = self2.$results.scrollTop();
9042                  var bottom = self2.$results.get(0).scrollHeight - top + e.deltaY;
9043                  var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;
9044                  var isAtBottom = e.deltaY < 0 && bottom <= self2.$results.height();
9045                  if (isAtTop) {
9046                    self2.$results.scrollTop(0);
9047                    e.preventDefault();
9048                    e.stopPropagation();
9049                  } else if (isAtBottom) {
9050                    self2.$results.scrollTop(
9051                      self2.$results.get(0).scrollHeight - self2.$results.height()
9052                    );
9053                    e.preventDefault();
9054                    e.stopPropagation();
9055                  }
9056                });
9057              }
9058              this.$results.on(
9059                "mouseup",
9060                ".select2-results__option--selectable",
9061                function(evt) {
9062                  var $this = $3(this);
9063                  var data = Utils.GetData(this, "data");
9064                  if ($this.hasClass("select2-results__option--selected")) {
9065                    if (self2.options.get("multiple")) {
9066                      self2.trigger("unselect", {
9067                        originalEvent: evt,
9068                        data
9069                      });
9070                    } else {
9071                      self2.trigger("close", {});
9072                    }
9073                    return;
9074                  }
9075                  self2.trigger("select", {
9076                    originalEvent: evt,
9077                    data
9078                  });
9079                }
9080              );
9081              this.$results.on(
9082                "mouseenter",
9083                ".select2-results__option--selectable",
9084                function(evt) {
9085                  var data = Utils.GetData(this, "data");
9086                  self2.getHighlightedResults().removeClass("select2-results__option--highlighted").attr("aria-selected", "false");
9087                  self2.trigger("results:focus", {
9088                    data,
9089                    element: $3(this)
9090                  });
9091                }
9092              );
9093            };
9094            Results.prototype.getHighlightedResults = function() {
9095              var $highlighted = this.$results.find(".select2-results__option--highlighted");
9096              return $highlighted;
9097            };
9098            Results.prototype.destroy = function() {
9099              this.$results.remove();
9100            };
9101            Results.prototype.ensureHighlightVisible = function() {
9102              var $highlighted = this.getHighlightedResults();
9103              if ($highlighted.length === 0) {
9104                return;
9105              }
9106              var $options = this.$results.find(".select2-results__option--selectable");
9107              var currentIndex = $options.index($highlighted);
9108              var currentOffset = this.$results.offset().top;
9109              var nextTop = $highlighted.offset().top;
9110              var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);
9111              var offsetDelta = nextTop - currentOffset;
9112              nextOffset -= $highlighted.outerHeight(false) * 2;
9113              if (currentIndex <= 2) {
9114                this.$results.scrollTop(0);
9115              } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {
9116                this.$results.scrollTop(nextOffset);
9117              }
9118            };
9119            Results.prototype.template = function(result, container) {
9120              var template = this.options.get("templateResult");
9121              var escapeMarkup = this.options.get("escapeMarkup");
9122              var content = template(result, container);
9123              if (content == null) {
9124                container.style.display = "none";
9125              } else if (typeof content === "string") {
9126                container.innerHTML = escapeMarkup(content);
9127              } else {
9128                $3(container).append(content);
9129              }
9130            };
9131            return Results;
9132          });
9133          S22.define("select2/keys", [], function() {
9134            var KEYS = {
9135              BACKSPACE: 8,
9136              TAB: 9,
9137              ENTER: 13,
9138              SHIFT: 16,
9139              CTRL: 17,
9140              ALT: 18,
9141              ESC: 27,
9142              SPACE: 32,
9143              PAGE_UP: 33,
9144              PAGE_DOWN: 34,
9145              END: 35,
9146              HOME: 36,
9147              LEFT: 37,
9148              UP: 38,
9149              RIGHT: 39,
9150              DOWN: 40,
9151              DELETE: 46
9152            };
9153            return KEYS;
9154          });
9155          S22.define("select2/selection/base", [
9156            "jquery",
9157            "../utils",
9158            "../keys"
9159          ], function($3, Utils, KEYS) {
9160            function BaseSelection($element, options) {
9161              this.$element = $element;
9162              this.options = options;
9163              BaseSelection.__super__.constructor.call(this);
9164            }
9165            Utils.Extend(BaseSelection, Utils.Observable);
9166            BaseSelection.prototype.render = function() {
9167              var $selection = $3(
9168                '<span class="select2-selection" role="combobox"  aria-haspopup="true" aria-expanded="false"></span>'
9169              );
9170              this._tabindex = 0;
9171              if (Utils.GetData(this.$element[0], "old-tabindex") != null) {
9172                this._tabindex = Utils.GetData(this.$element[0], "old-tabindex");
9173              } else if (this.$element.attr("tabindex") != null) {
9174                this._tabindex = this.$element.attr("tabindex");
9175              }
9176              $selection.attr("title", this.$element.attr("title"));
9177              $selection.attr("tabindex", this._tabindex);
9178              $selection.attr("aria-disabled", "false");
9179              this.$selection = $selection;
9180              return $selection;
9181            };
9182            BaseSelection.prototype.bind = function(container, $container) {
9183              var self2 = this;
9184              var resultsId = container.id + "-results";
9185              this.container = container;
9186              this.$selection.on("focus", function(evt) {
9187                self2.trigger("focus", evt);
9188              });
9189              this.$selection.on("blur", function(evt) {
9190                self2._handleBlur(evt);
9191              });
9192              this.$selection.on("keydown", function(evt) {
9193                self2.trigger("keypress", evt);
9194                if (evt.which === KEYS.SPACE) {
9195                  evt.preventDefault();
9196                }
9197              });
9198              container.on("results:focus", function(params) {
9199                self2.$selection.attr("aria-activedescendant", params.data._resultId);
9200              });
9201              container.on("selection:update", function(params) {
9202                self2.update(params.data);
9203              });
9204              container.on("open", function() {
9205                self2.$selection.attr("aria-expanded", "true");
9206                self2.$selection.attr("aria-owns", resultsId);
9207                self2._attachCloseHandler(container);
9208              });
9209              container.on("close", function() {
9210                self2.$selection.attr("aria-expanded", "false");
9211                self2.$selection.removeAttr("aria-activedescendant");
9212                self2.$selection.removeAttr("aria-owns");
9213                self2.$selection.trigger("focus");
9214                self2._detachCloseHandler(container);
9215              });
9216              container.on("enable", function() {
9217                self2.$selection.attr("tabindex", self2._tabindex);
9218                self2.$selection.attr("aria-disabled", "false");
9219              });
9220              container.on("disable", function() {
9221                self2.$selection.attr("tabindex", "-1");
9222                self2.$selection.attr("aria-disabled", "true");
9223              });
9224            };
9225            BaseSelection.prototype._handleBlur = function(evt) {
9226              var self2 = this;
9227              window.setTimeout(function() {
9228                if (document.activeElement == self2.$selection[0] || $3.contains(self2.$selection[0], document.activeElement)) {
9229                  return;
9230                }
9231                self2.trigger("blur", evt);
9232              }, 1);
9233            };
9234            BaseSelection.prototype._attachCloseHandler = function(container) {
9235              $3(document.body).on("mousedown.select2." + container.id, function(e) {
9236                var $target = $3(e.target);
9237                var $select = $target.closest(".select2");
9238                var $all = $3(".select2.select2-container--open");
9239                $all.each(function() {
9240                  if (this == $select[0]) {
9241                    return;
9242                  }
9243                  var $element = Utils.GetData(this, "element");
9244                  $element.select2("close");
9245                });
9246              });
9247            };
9248            BaseSelection.prototype._detachCloseHandler = function(container) {
9249              $3(document.body).off("mousedown.select2." + container.id);
9250            };
9251            BaseSelection.prototype.position = function($selection, $container) {
9252              var $selectionContainer = $container.find(".selection");
9253              $selectionContainer.append($selection);
9254            };
9255            BaseSelection.prototype.destroy = function() {
9256              this._detachCloseHandler(this.container);
9257            };
9258            BaseSelection.prototype.update = function(data) {
9259              throw new Error("The `update` method must be defined in child classes.");
9260            };
9261            BaseSelection.prototype.isEnabled = function() {
9262              return !this.isDisabled();
9263            };
9264            BaseSelection.prototype.isDisabled = function() {
9265              return this.options.get("disabled");
9266            };
9267            return BaseSelection;
9268          });
9269          S22.define("select2/selection/single", [
9270            "jquery",
9271            "./base",
9272            "../utils",
9273            "../keys"
9274          ], function($3, BaseSelection, Utils, KEYS) {
9275            function SingleSelection() {
9276              SingleSelection.__super__.constructor.apply(this, arguments);
9277            }
9278            Utils.Extend(SingleSelection, BaseSelection);
9279            SingleSelection.prototype.render = function() {
9280              var $selection = SingleSelection.__super__.render.call(this);
9281              $selection[0].classList.add("select2-selection--single");
9282              $selection.html(
9283                '<span class="select2-selection__rendered"></span><span class="select2-selection__arrow" role="presentation"><b role="presentation"></b></span>'
9284              );
9285              return $selection;
9286            };
9287            SingleSelection.prototype.bind = function(container, $container) {
9288              var self2 = this;
9289              SingleSelection.__super__.bind.apply(this, arguments);
9290              var id = container.id + "-container";
9291              this.$selection.find(".select2-selection__rendered").attr("id", id).attr("role", "textbox").attr("aria-readonly", "true");
9292              this.$selection.attr("aria-labelledby", id);
9293              this.$selection.attr("aria-controls", id);
9294              this.$selection.on("mousedown", function(evt) {
9295                if (evt.which !== 1) {
9296                  return;
9297                }
9298                self2.trigger("toggle", {
9299                  originalEvent: evt
9300                });
9301              });
9302              this.$selection.on("focus", function(evt) {
9303              });
9304              this.$selection.on("blur", function(evt) {
9305              });
9306              container.on("focus", function(evt) {
9307                if (!container.isOpen()) {
9308                  self2.$selection.trigger("focus");
9309                }
9310              });
9311            };
9312            SingleSelection.prototype.clear = function() {
9313              var $rendered = this.$selection.find(".select2-selection__rendered");
9314              $rendered.empty();
9315              $rendered.removeAttr("title");
9316            };
9317            SingleSelection.prototype.display = function(data, container) {
9318              var template = this.options.get("templateSelection");
9319              var escapeMarkup = this.options.get("escapeMarkup");
9320              return escapeMarkup(template(data, container));
9321            };
9322            SingleSelection.prototype.selectionContainer = function() {
9323              return $3("<span></span>");
9324            };
9325            SingleSelection.prototype.update = function(data) {
9326              if (data.length === 0) {
9327                this.clear();
9328                return;
9329              }
9330              var selection = data[0];
9331              var $rendered = this.$selection.find(".select2-selection__rendered");
9332              var formatted = this.display(selection, $rendered);
9333              $rendered.empty().append(formatted);
9334              var title = selection.title || selection.text;
9335              if (title) {
9336                $rendered.attr("title", title);
9337              } else {
9338                $rendered.removeAttr("title");
9339              }
9340            };
9341            return SingleSelection;
9342          });
9343          S22.define("select2/selection/multiple", [
9344            "jquery",
9345            "./base",
9346            "../utils"
9347          ], function($3, BaseSelection, Utils) {
9348            function MultipleSelection($element, options) {
9349              MultipleSelection.__super__.constructor.apply(this, arguments);
9350            }
9351            Utils.Extend(MultipleSelection, BaseSelection);
9352            MultipleSelection.prototype.render = function() {
9353              var $selection = MultipleSelection.__super__.render.call(this);
9354              $selection[0].classList.add("select2-selection--multiple");
9355              $selection.html(
9356                '<ul class="select2-selection__rendered"></ul>'
9357              );
9358              return $selection;
9359            };
9360            MultipleSelection.prototype.bind = function(container, $container) {
9361              var self2 = this;
9362              MultipleSelection.__super__.bind.apply(this, arguments);
9363              var id = container.id + "-container";
9364              this.$selection.find(".select2-selection__rendered").attr("id", id);
9365              this.$selection.on("click", function(evt) {
9366                self2.trigger("toggle", {
9367                  originalEvent: evt
9368                });
9369              });
9370              this.$selection.on(
9371                "click",
9372                ".select2-selection__choice__remove",
9373                function(evt) {
9374                  if (self2.isDisabled()) {
9375                    return;
9376                  }
9377                  var $remove = $3(this);
9378                  var $selection = $remove.parent();
9379                  var data = Utils.GetData($selection[0], "data");
9380                  self2.trigger("unselect", {
9381                    originalEvent: evt,
9382                    data
9383                  });
9384                }
9385              );
9386              this.$selection.on(
9387                "keydown",
9388                ".select2-selection__choice__remove",
9389                function(evt) {
9390                  if (self2.isDisabled()) {
9391                    return;
9392                  }
9393                  evt.stopPropagation();
9394                }
9395              );
9396            };
9397            MultipleSelection.prototype.clear = function() {
9398              var $rendered = this.$selection.find(".select2-selection__rendered");
9399              $rendered.empty();
9400              $rendered.removeAttr("title");
9401            };
9402            MultipleSelection.prototype.display = function(data, container) {
9403              var template = this.options.get("templateSelection");
9404              var escapeMarkup = this.options.get("escapeMarkup");
9405              return escapeMarkup(template(data, container));
9406            };
9407            MultipleSelection.prototype.selectionContainer = function() {
9408              var $container = $3(
9409                '<li class="select2-selection__choice"><button type="button" class="select2-selection__choice__remove" tabindex="-1"><span aria-hidden="true">&times;</span></button><span class="select2-selection__choice__display"></span></li>'
9410              );
9411              return $container;
9412            };
9413            MultipleSelection.prototype.update = function(data) {
9414              this.clear();
9415              if (data.length === 0) {
9416                return;
9417              }
9418              var $selections = [];
9419              var selectionIdPrefix = this.$selection.find(".select2-selection__rendered").attr("id") + "-choice-";
9420              for (var d = 0; d < data.length; d++) {
9421                var selection = data[d];
9422                var $selection = this.selectionContainer();
9423                var formatted = this.display(selection, $selection);
9424                var selectionId = selectionIdPrefix + Utils.generateChars(4) + "-";
9425                if (selection.id) {
9426                  selectionId += selection.id;
9427                } else {
9428                  selectionId += Utils.generateChars(4);
9429                }
9430                $selection.find(".select2-selection__choice__display").append(formatted).attr("id", selectionId);
9431                var title = selection.title || selection.text;
9432                if (title) {
9433                  $selection.attr("title", title);
9434                }
9435                var removeItem = this.options.get("translations").get("removeItem");
9436                var $remove = $selection.find(".select2-selection__choice__remove");
9437                $remove.attr("title", removeItem());
9438                $remove.attr("aria-label", removeItem());
9439                $remove.attr("aria-describedby", selectionId);
9440                Utils.StoreData($selection[0], "data", selection);
9441                $selections.push($selection);
9442              }
9443              var $rendered = this.$selection.find(".select2-selection__rendered");
9444              $rendered.append($selections);
9445            };
9446            return MultipleSelection;
9447          });
9448          S22.define("select2/selection/placeholder", [], function() {
9449            function Placeholder(decorated, $element, options) {
9450              this.placeholder = this.normalizePlaceholder(options.get("placeholder"));
9451              decorated.call(this, $element, options);
9452            }
9453            Placeholder.prototype.normalizePlaceholder = function(_, placeholder) {
9454              if (typeof placeholder === "string") {
9455                placeholder = {
9456                  id: "",
9457                  text: placeholder
9458                };
9459              }
9460              return placeholder;
9461            };
9462            Placeholder.prototype.createPlaceholder = function(decorated, placeholder) {
9463              var $placeholder = this.selectionContainer();
9464              $placeholder.html(this.display(placeholder));
9465              $placeholder[0].classList.add("select2-selection__placeholder");
9466              $placeholder[0].classList.remove("select2-selection__choice");
9467              var placeholderTitle = placeholder.title || placeholder.text || $placeholder.text();
9468              this.$selection.find(".select2-selection__rendered").attr(
9469                "title",
9470                placeholderTitle
9471              );
9472              return $placeholder;
9473            };
9474            Placeholder.prototype.update = function(decorated, data) {
9475              var singlePlaceholder = data.length == 1 && data[0].id != this.placeholder.id;
9476              var multipleSelections = data.length > 1;
9477              if (multipleSelections || singlePlaceholder) {
9478                return decorated.call(this, data);
9479              }
9480              this.clear();
9481              var $placeholder = this.createPlaceholder(this.placeholder);
9482              this.$selection.find(".select2-selection__rendered").append($placeholder);
9483            };
9484            return Placeholder;
9485          });
9486          S22.define("select2/selection/allowClear", [
9487            "jquery",
9488            "../keys",
9489            "../utils"
9490          ], function($3, KEYS, Utils) {
9491            function AllowClear() {
9492            }
9493            AllowClear.prototype.bind = function(decorated, container, $container) {
9494              var self2 = this;
9495              decorated.call(this, container, $container);
9496              if (this.placeholder == null) {
9497                if (this.options.get("debug") && window.console && console.error) {
9498                  console.error(
9499                    "Select2: The `allowClear` option should be used in combination with the `placeholder` option."
9500                  );
9501                }
9502              }
9503              this.$selection.on(
9504                "mousedown",
9505                ".select2-selection__clear",
9506                function(evt) {
9507                  self2._handleClear(evt);
9508                }
9509              );
9510              container.on("keypress", function(evt) {
9511                self2._handleKeyboardClear(evt, container);
9512              });
9513            };
9514            AllowClear.prototype._handleClear = function(_, evt) {
9515              if (this.isDisabled()) {
9516                return;
9517              }
9518              var $clear = this.$selection.find(".select2-selection__clear");
9519              if ($clear.length === 0) {
9520                return;
9521              }
9522              evt.stopPropagation();
9523              var data = Utils.GetData($clear[0], "data");
9524              var previousVal = this.$element.val();
9525              this.$element.val(this.placeholder.id);
9526              var unselectData = {
9527                data
9528              };
9529              this.trigger("clear", unselectData);
9530              if (unselectData.prevented) {
9531                this.$element.val(previousVal);
9532                return;
9533              }
9534              for (var d = 0; d < data.length; d++) {
9535                unselectData = {
9536                  data: data[d]
9537                };
9538                this.trigger("unselect", unselectData);
9539                if (unselectData.prevented) {
9540                  this.$element.val(previousVal);
9541                  return;
9542                }
9543              }
9544              this.$element.trigger("input").trigger("change");
9545              this.trigger("toggle", {});
9546            };
9547            AllowClear.prototype._handleKeyboardClear = function(_, evt, container) {
9548              if (container.isOpen()) {
9549                return;
9550              }
9551              if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {
9552                this._handleClear(evt);
9553              }
9554            };
9555            AllowClear.prototype.update = function(decorated, data) {
9556              decorated.call(this, data);
9557              this.$selection.find(".select2-selection__clear").remove();
9558              this.$selection[0].classList.remove("select2-selection--clearable");
9559              if (this.$selection.find(".select2-selection__placeholder").length > 0 || data.length === 0) {
9560                return;
9561              }
9562              var selectionId = this.$selection.find(".select2-selection__rendered").attr("id");
9563              var removeAll = this.options.get("translations").get("removeAllItems");
9564              var $remove = $3(
9565                '<button type="button" class="select2-selection__clear" tabindex="-1"><span aria-hidden="true">&times;</span></button>'
9566              );
9567              $remove.attr("title", removeAll());
9568              $remove.attr("aria-label", removeAll());
9569              $remove.attr("aria-describedby", selectionId);
9570              Utils.StoreData($remove[0], "data", data);
9571              this.$selection.prepend($remove);
9572              this.$selection[0].classList.add("select2-selection--clearable");
9573            };
9574            return AllowClear;
9575          });
9576          S22.define("select2/selection/search", [
9577            "jquery",
9578            "../utils",
9579            "../keys"
9580          ], function($3, Utils, KEYS) {
9581            function Search(decorated, $element, options) {
9582              decorated.call(this, $element, options);
9583            }
9584            Search.prototype.render = function(decorated) {
9585              var searchLabel = this.options.get("translations").get("search");
9586              var $search = $3(
9587                '<span class="select2-search select2-search--inline"><textarea class="select2-search__field" type="search" tabindex="-1" autocorrect="off" autocapitalize="none" spellcheck="false" role="searchbox" aria-autocomplete="list" ></textarea></span>'
9588              );
9589              this.$searchContainer = $search;
9590              this.$search = $search.find("textarea");
9591              this.$search.prop("autocomplete", this.options.get("autocomplete"));
9592              this.$search.attr("aria-label", searchLabel());
9593              var $rendered = decorated.call(this);
9594              this._transferTabIndex();
9595              $rendered.append(this.$searchContainer);
9596              return $rendered;
9597            };
9598            Search.prototype.bind = function(decorated, container, $container) {
9599              var self2 = this;
9600              var resultsId = container.id + "-results";
9601              var selectionId = container.id + "-container";
9602              decorated.call(this, container, $container);
9603              self2.$search.attr("aria-describedby", selectionId);
9604              container.on("open", function() {
9605                self2.$search.attr("aria-controls", resultsId);
9606                self2.$search.trigger("focus");
9607              });
9608              container.on("close", function() {
9609                self2.$search.val("");
9610                self2.resizeSearch();
9611                self2.$search.removeAttr("aria-controls");
9612                self2.$search.removeAttr("aria-activedescendant");
9613                self2.$search.trigger("focus");
9614              });
9615              container.on("enable", function() {
9616                self2.$search.prop("disabled", false);
9617                self2._transferTabIndex();
9618              });
9619              container.on("disable", function() {
9620                self2.$search.prop("disabled", true);
9621              });
9622              container.on("focus", function(evt) {
9623                self2.$search.trigger("focus");
9624              });
9625              container.on("results:focus", function(params) {
9626                if (params.data._resultId) {
9627                  self2.$search.attr("aria-activedescendant", params.data._resultId);
9628                } else {
9629                  self2.$search.removeAttr("aria-activedescendant");
9630                }
9631              });
9632              this.$selection.on("focusin", ".select2-search--inline", function(evt) {
9633                self2.trigger("focus", evt);
9634              });
9635              this.$selection.on("focusout", ".select2-search--inline", function(evt) {
9636                self2._handleBlur(evt);
9637              });
9638              this.$selection.on("keydown", ".select2-search--inline", function(evt) {
9639                evt.stopPropagation();
9640                self2.trigger("keypress", evt);
9641                self2._keyUpPrevented = evt.isDefaultPrevented();
9642                var key = evt.which;
9643                if (key === KEYS.BACKSPACE && self2.$search.val() === "") {
9644                  var $previousChoice = self2.$selection.find(".select2-selection__choice").last();
9645                  if ($previousChoice.length > 0) {
9646                    var item = Utils.GetData($previousChoice[0], "data");
9647                    self2.searchRemoveChoice(item);
9648                    evt.preventDefault();
9649                  }
9650                }
9651              });
9652              this.$selection.on("click", ".select2-search--inline", function(evt) {
9653                if (self2.$search.val()) {
9654                  evt.stopPropagation();
9655                }
9656              });
9657              var msie = document.documentMode;
9658              var disableInputEvents = msie && msie <= 11;
9659              this.$selection.on(
9660                "input.searchcheck",
9661                ".select2-search--inline",
9662                function(evt) {
9663                  if (disableInputEvents) {
9664                    self2.$selection.off("input.search input.searchcheck");
9665                    return;
9666                  }
9667                  self2.$selection.off("keyup.search");
9668                }
9669              );
9670              this.$selection.on(
9671                "keyup.search input.search",
9672                ".select2-search--inline",
9673                function(evt) {
9674                  if (disableInputEvents && evt.type === "input") {
9675                    self2.$selection.off("input.search input.searchcheck");
9676                    return;
9677                  }
9678                  var key = evt.which;
9679                  if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {
9680                    return;
9681                  }
9682                  if (key == KEYS.TAB) {
9683                    return;
9684                  }
9685                  self2.handleSearch(evt);
9686                }
9687              );
9688            };
9689            Search.prototype._transferTabIndex = function(decorated) {
9690              this.$search.attr("tabindex", this.$selection.attr("tabindex"));
9691              this.$selection.attr("tabindex", "-1");
9692            };
9693            Search.prototype.createPlaceholder = function(decorated, placeholder) {
9694              this.$search.attr("placeholder", placeholder.text);
9695            };
9696            Search.prototype.update = function(decorated, data) {
9697              var searchHadFocus = this.$search[0] == document.activeElement;
9698              this.$search.attr("placeholder", "");
9699              decorated.call(this, data);
9700              this.resizeSearch();
9701              if (searchHadFocus) {
9702                this.$search.trigger("focus");
9703              }
9704            };
9705            Search.prototype.handleSearch = function() {
9706              this.resizeSearch();
9707              if (!this._keyUpPrevented) {
9708                var input = this.$search.val();
9709                this.trigger("query", {
9710                  term: input
9711                });
9712              }
9713              this._keyUpPrevented = false;
9714            };
9715            Search.prototype.searchRemoveChoice = function(decorated, item) {
9716              this.trigger("unselect", {
9717                data: item
9718              });
9719              this.$search.val(item.text);
9720              this.handleSearch();
9721            };
9722            Search.prototype.resizeSearch = function() {
9723              this.$search.css("width", "25px");
9724              var width = "100%";
9725              if (this.$search.attr("placeholder") === "") {
9726                var minimumWidth = this.$search.val().length + 1;
9727                width = minimumWidth * 0.75 + "em";
9728              }
9729              this.$search.css("width", width);
9730            };
9731            return Search;
9732          });
9733          S22.define("select2/selection/selectionCss", [
9734            "../utils"
9735          ], function(Utils) {
9736            function SelectionCSS() {
9737            }
9738            SelectionCSS.prototype.render = function(decorated) {
9739              var $selection = decorated.call(this);
9740              var selectionCssClass = this.options.get("selectionCssClass") || "";
9741              if (selectionCssClass.indexOf(":all:") !== -1) {
9742                selectionCssClass = selectionCssClass.replace(":all:", "");
9743                Utils.copyNonInternalCssClasses($selection[0], this.$element[0]);
9744              }
9745              $selection.addClass(selectionCssClass);
9746              return $selection;
9747            };
9748            return SelectionCSS;
9749          });
9750          S22.define("select2/selection/eventRelay", [
9751            "jquery"
9752          ], function($3) {
9753            function EventRelay() {
9754            }
9755            EventRelay.prototype.bind = function(decorated, container, $container) {
9756              var self2 = this;
9757              var relayEvents = [
9758                "open",
9759                "opening",
9760                "close",
9761                "closing",
9762                "select",
9763                "selecting",
9764                "unselect",
9765                "unselecting",
9766                "clear",
9767                "clearing"
9768              ];
9769              var preventableEvents = [
9770                "opening",
9771                "closing",
9772                "selecting",
9773                "unselecting",
9774                "clearing"
9775              ];
9776              decorated.call(this, container, $container);
9777              container.on("*", function(name, params) {
9778                if (relayEvents.indexOf(name) === -1) {
9779                  return;
9780                }
9781                params = params || {};
9782                var evt = $3.Event("select2:" + name, {
9783                  params
9784                });
9785                self2.$element.trigger(evt);
9786                if (preventableEvents.indexOf(name) === -1) {
9787                  return;
9788                }
9789                params.prevented = evt.isDefaultPrevented();
9790              });
9791            };
9792            return EventRelay;
9793          });
9794          S22.define("select2/translation", [
9795            "jquery",
9796            "require"
9797          ], function($3, require2) {
9798            function Translation(dict) {
9799              this.dict = dict || {};
9800            }
9801            Translation.prototype.all = function() {
9802              return this.dict;
9803            };
9804            Translation.prototype.get = function(key) {
9805              return this.dict[key];
9806            };
9807            Translation.prototype.extend = function(translation) {
9808              this.dict = $3.extend({}, translation.all(), this.dict);
9809            };
9810            Translation._cache = {};
9811            Translation.loadPath = function(path) {
9812              if (!(path in Translation._cache)) {
9813                var translations2 = require2(path);
9814                Translation._cache[path] = translations2;
9815              }
9816              return new Translation(Translation._cache[path]);
9817            };
9818            return Translation;
9819          });
9820          S22.define("select2/diacritics", [], function() {
9821            var diacritics = {
9822              "\u24B6": "A",
9823              "\uFF21": "A",
9824              "\xC0": "A",
9825              "\xC1": "A",
9826              "\xC2": "A",
9827              "\u1EA6": "A",
9828              "\u1EA4": "A",
9829              "\u1EAA": "A",
9830              "\u1EA8": "A",
9831              "\xC3": "A",
9832              "\u0100": "A",
9833              "\u0102": "A",
9834              "\u1EB0": "A",
9835              "\u1EAE": "A",
9836              "\u1EB4": "A",
9837              "\u1EB2": "A",
9838              "\u0226": "A",
9839              "\u01E0": "A",
9840              "\xC4": "A",
9841              "\u01DE": "A",
9842              "\u1EA2": "A",
9843              "\xC5": "A",
9844              "\u01FA": "A",
9845              "\u01CD": "A",
9846              "\u0200": "A",
9847              "\u0202": "A",
9848              "\u1EA0": "A",
9849              "\u1EAC": "A",
9850              "\u1EB6": "A",
9851              "\u1E00": "A",
9852              "\u0104": "A",
9853              "\u023A": "A",
9854              "\u2C6F": "A",
9855              "\uA732": "AA",
9856              "\xC6": "AE",
9857              "\u01FC": "AE",
9858              "\u01E2": "AE",
9859              "\uA734": "AO",
9860              "\uA736": "AU",
9861              "\uA738": "AV",
9862              "\uA73A": "AV",
9863              "\uA73C": "AY",
9864              "\u24B7": "B",
9865              "\uFF22": "B",
9866              "\u1E02": "B",
9867              "\u1E04": "B",
9868              "\u1E06": "B",
9869              "\u0243": "B",
9870              "\u0182": "B",
9871              "\u0181": "B",
9872              "\u24B8": "C",
9873              "\uFF23": "C",
9874              "\u0106": "C",
9875              "\u0108": "C",
9876              "\u010A": "C",
9877              "\u010C": "C",
9878              "\xC7": "C",
9879              "\u1E08": "C",
9880              "\u0187": "C",
9881              "\u023B": "C",
9882              "\uA73E": "C",
9883              "\u24B9": "D",
9884              "\uFF24": "D",
9885              "\u1E0A": "D",
9886              "\u010E": "D",
9887              "\u1E0C": "D",
9888              "\u1E10": "D",
9889              "\u1E12": "D",
9890              "\u1E0E": "D",
9891              "\u0110": "D",
9892              "\u018B": "D",
9893              "\u018A": "D",
9894              "\u0189": "D",
9895              "\uA779": "D",
9896              "\u01F1": "DZ",
9897              "\u01C4": "DZ",
9898              "\u01F2": "Dz",
9899              "\u01C5": "Dz",
9900              "\u24BA": "E",
9901              "\uFF25": "E",
9902              "\xC8": "E",
9903              "\xC9": "E",
9904              "\xCA": "E",
9905              "\u1EC0": "E",
9906              "\u1EBE": "E",
9907              "\u1EC4": "E",
9908              "\u1EC2": "E",
9909              "\u1EBC": "E",
9910              "\u0112": "E",
9911              "\u1E14": "E",
9912              "\u1E16": "E",
9913              "\u0114": "E",
9914              "\u0116": "E",
9915              "\xCB": "E",
9916              "\u1EBA": "E",
9917              "\u011A": "E",
9918              "\u0204": "E",
9919              "\u0206": "E",
9920              "\u1EB8": "E",
9921              "\u1EC6": "E",
9922              "\u0228": "E",
9923              "\u1E1C": "E",
9924              "\u0118": "E",
9925              "\u1E18": "E",
9926              "\u1E1A": "E",
9927              "\u0190": "E",
9928              "\u018E": "E",
9929              "\u24BB": "F",
9930              "\uFF26": "F",
9931              "\u1E1E": "F",
9932              "\u0191": "F",
9933              "\uA77B": "F",
9934              "\u24BC": "G",
9935              "\uFF27": "G",
9936              "\u01F4": "G",
9937              "\u011C": "G",
9938              "\u1E20": "G",
9939              "\u011E": "G",
9940              "\u0120": "G",
9941              "\u01E6": "G",
9942              "\u0122": "G",
9943              "\u01E4": "G",
9944              "\u0193": "G",
9945              "\uA7A0": "G",
9946              "\uA77D": "G",
9947              "\uA77E": "G",
9948              "\u24BD": "H",
9949              "\uFF28": "H",
9950              "\u0124": "H",
9951              "\u1E22": "H",
9952              "\u1E26": "H",
9953              "\u021E": "H",
9954              "\u1E24": "H",
9955              "\u1E28": "H",
9956              "\u1E2A": "H",
9957              "\u0126": "H",
9958              "\u2C67": "H",
9959              "\u2C75": "H",
9960              "\uA78D": "H",
9961              "\u24BE": "I",
9962              "\uFF29": "I",
9963              "\xCC": "I",
9964              "\xCD": "I",
9965              "\xCE": "I",
9966              "\u0128": "I",
9967              "\u012A": "I",
9968              "\u012C": "I",
9969              "\u0130": "I",
9970              "\xCF": "I",
9971              "\u1E2E": "I",
9972              "\u1EC8": "I",
9973              "\u01CF": "I",
9974              "\u0208": "I",
9975              "\u020A": "I",
9976              "\u1ECA": "I",
9977              "\u012E": "I",
9978              "\u1E2C": "I",
9979              "\u0197": "I",
9980              "\u24BF": "J",
9981              "\uFF2A": "J",
9982              "\u0134": "J",
9983              "\u0248": "J",
9984              "\u24C0": "K",
9985              "\uFF2B": "K",
9986              "\u1E30": "K",
9987              "\u01E8": "K",
9988              "\u1E32": "K",
9989              "\u0136": "K",
9990              "\u1E34": "K",
9991              "\u0198": "K",
9992              "\u2C69": "K",
9993              "\uA740": "K",
9994              "\uA742": "K",
9995              "\uA744": "K",
9996              "\uA7A2": "K",
9997              "\u24C1": "L",
9998              "\uFF2C": "L",
9999              "\u013F": "L",
10000              "\u0139": "L",
10001              "\u013D": "L",
10002              "\u1E36": "L",
10003              "\u1E38": "L",
10004              "\u013B": "L",
10005              "\u1E3C": "L",
10006              "\u1E3A": "L",
10007              "\u0141": "L",
10008              "\u023D": "L",
10009              "\u2C62": "L",
10010              "\u2C60": "L",
10011              "\uA748": "L",
10012              "\uA746": "L",
10013              "\uA780": "L",
10014              "\u01C7": "LJ",
10015              "\u01C8": "Lj",
10016              "\u24C2": "M",
10017              "\uFF2D": "M",
10018              "\u1E3E": "M",
10019              "\u1E40": "M",
10020              "\u1E42": "M",
10021              "\u2C6E": "M",
10022              "\u019C": "M",
10023              "\u24C3": "N",
10024              "\uFF2E": "N",
10025              "\u01F8": "N",
10026              "\u0143": "N",
10027              "\xD1": "N",
10028              "\u1E44": "N",
10029              "\u0147": "N",
10030              "\u1E46": "N",
10031              "\u0145": "N",
10032              "\u1E4A": "N",
10033              "\u1E48": "N",
10034              "\u0220": "N",
10035              "\u019D": "N",
10036              "\uA790": "N",
10037              "\uA7A4": "N",
10038              "\u01CA": "NJ",
10039              "\u01CB": "Nj",
10040              "\u24C4": "O",
10041              "\uFF2F": "O",
10042              "\xD2": "O",
10043              "\xD3": "O",
10044              "\xD4": "O",
10045              "\u1ED2": "O",
10046              "\u1ED0": "O",
10047              "\u1ED6": "O",
10048              "\u1ED4": "O",
10049              "\xD5": "O",
10050              "\u1E4C": "O",
10051              "\u022C": "O",
10052              "\u1E4E": "O",
10053              "\u014C": "O",
10054              "\u1E50": "O",
10055              "\u1E52": "O",
10056              "\u014E": "O",
10057              "\u022E": "O",
10058              "\u0230": "O",
10059              "\xD6": "O",
10060              "\u022A": "O",
10061              "\u1ECE": "O",
10062              "\u0150": "O",
10063              "\u01D1": "O",
10064              "\u020C": "O",
10065              "\u020E": "O",
10066              "\u01A0": "O",
10067              "\u1EDC": "O",
10068              "\u1EDA": "O",
10069              "\u1EE0": "O",
10070              "\u1EDE": "O",
10071              "\u1EE2": "O",
10072              "\u1ECC": "O",
10073              "\u1ED8": "O",
10074              "\u01EA": "O",
10075              "\u01EC": "O",
10076              "\xD8": "O",
10077              "\u01FE": "O",
10078              "\u0186": "O",
10079              "\u019F": "O",
10080              "\uA74A": "O",
10081              "\uA74C": "O",
10082              "\u0152": "OE",
10083              "\u01A2": "OI",
10084              "\uA74E": "OO",
10085              "\u0222": "OU",
10086              "\u24C5": "P",
10087              "\uFF30": "P",
10088              "\u1E54": "P",
10089              "\u1E56": "P",
10090              "\u01A4": "P",
10091              "\u2C63": "P",
10092              "\uA750": "P",
10093              "\uA752": "P",
10094              "\uA754": "P",
10095              "\u24C6": "Q",
10096              "\uFF31": "Q",
10097              "\uA756": "Q",
10098              "\uA758": "Q",
10099              "\u024A": "Q",
10100              "\u24C7": "R",
10101              "\uFF32": "R",
10102              "\u0154": "R",
10103              "\u1E58": "R",
10104              "\u0158": "R",
10105              "\u0210": "R",
10106              "\u0212": "R",
10107              "\u1E5A": "R",
10108              "\u1E5C": "R",
10109              "\u0156": "R",
10110              "\u1E5E": "R",
10111              "\u024C": "R",
10112              "\u2C64": "R",
10113              "\uA75A": "R",
10114              "\uA7A6": "R",
10115              "\uA782": "R",
10116              "\u24C8": "S",
10117              "\uFF33": "S",
10118              "\u1E9E": "S",
10119              "\u015A": "S",
10120              "\u1E64": "S",
10121              "\u015C": "S",
10122              "\u1E60": "S",
10123              "\u0160": "S",
10124              "\u1E66": "S",
10125              "\u1E62": "S",
10126              "\u1E68": "S",
10127              "\u0218": "S",
10128              "\u015E": "S",
10129              "\u2C7E": "S",
10130              "\uA7A8": "S",
10131              "\uA784": "S",
10132              "\u24C9": "T",
10133              "\uFF34": "T",
10134              "\u1E6A": "T",
10135              "\u0164": "T",
10136              "\u1E6C": "T",
10137              "\u021A": "T",
10138              "\u0162": "T",
10139              "\u1E70": "T",
10140              "\u1E6E": "T",
10141              "\u0166": "T",
10142              "\u01AC": "T",
10143              "\u01AE": "T",
10144              "\u023E": "T",
10145              "\uA786": "T",
10146              "\uA728": "TZ",
10147              "\u24CA": "U",
10148              "\uFF35": "U",
10149              "\xD9": "U",
10150              "\xDA": "U",
10151              "\xDB": "U",
10152              "\u0168": "U",
10153              "\u1E78": "U",
10154              "\u016A": "U",
10155              "\u1E7A": "U",
10156              "\u016C": "U",
10157              "\xDC": "U",
10158              "\u01DB": "U",
10159              "\u01D7": "U",
10160              "\u01D5": "U",
10161              "\u01D9": "U",
10162              "\u1EE6": "U",
10163              "\u016E": "U",
10164              "\u0170": "U",
10165              "\u01D3": "U",
10166              "\u0214": "U",
10167              "\u0216": "U",
10168              "\u01AF": "U",
10169              "\u1EEA": "U",
10170              "\u1EE8": "U",
10171              "\u1EEE": "U",
10172              "\u1EEC": "U",
10173              "\u1EF0": "U",
10174              "\u1EE4": "U",
10175              "\u1E72": "U",
10176              "\u0172": "U",
10177              "\u1E76": "U",
10178              "\u1E74": "U",
10179              "\u0244": "U",
10180              "\u24CB": "V",
10181              "\uFF36": "V",
10182              "\u1E7C": "V",
10183              "\u1E7E": "V",
10184              "\u01B2": "V",
10185              "\uA75E": "V",
10186              "\u0245": "V",
10187              "\uA760": "VY",
10188              "\u24CC": "W",
10189              "\uFF37": "W",
10190              "\u1E80": "W",
10191              "\u1E82": "W",
10192              "\u0174": "W",
10193              "\u1E86": "W",
10194              "\u1E84": "W",
10195              "\u1E88": "W",
10196              "\u2C72": "W",
10197              "\u24CD": "X",
10198              "\uFF38": "X",
10199              "\u1E8A": "X",
10200              "\u1E8C": "X",
10201              "\u24CE": "Y",
10202              "\uFF39": "Y",
10203              "\u1EF2": "Y",
10204              "\xDD": "Y",
10205              "\u0176": "Y",
10206              "\u1EF8": "Y",
10207              "\u0232": "Y",
10208              "\u1E8E": "Y",
10209              "\u0178": "Y",
10210              "\u1EF6": "Y",
10211              "\u1EF4": "Y",
10212              "\u01B3": "Y",
10213              "\u024E": "Y",
10214              "\u1EFE": "Y",
10215              "\u24CF": "Z",
10216              "\uFF3A": "Z",
10217              "\u0179": "Z",
10218              "\u1E90": "Z",
10219              "\u017B": "Z",
10220              "\u017D": "Z",
10221              "\u1E92": "Z",
10222              "\u1E94": "Z",
10223              "\u01B5": "Z",
10224              "\u0224": "Z",
10225              "\u2C7F": "Z",
10226              "\u2C6B": "Z",
10227              "\uA762": "Z",
10228              "\u24D0": "a",
10229              "\uFF41": "a",
10230              "\u1E9A": "a",
10231              "\xE0": "a",
10232              "\xE1": "a",
10233              "\xE2": "a",
10234              "\u1EA7": "a",
10235              "\u1EA5": "a",
10236              "\u1EAB": "a",
10237              "\u1EA9": "a",
10238              "\xE3": "a",
10239              "\u0101": "a",
10240              "\u0103": "a",
10241              "\u1EB1": "a",
10242              "\u1EAF": "a",
10243              "\u1EB5": "a",
10244              "\u1EB3": "a",
10245              "\u0227": "a",
10246              "\u01E1": "a",
10247              "\xE4": "a",
10248              "\u01DF": "a",
10249              "\u1EA3": "a",
10250              "\xE5": "a",
10251              "\u01FB": "a",
10252              "\u01CE": "a",
10253              "\u0201": "a",
10254              "\u0203": "a",
10255              "\u1EA1": "a",
10256              "\u1EAD": "a",
10257              "\u1EB7": "a",
10258              "\u1E01": "a",
10259              "\u0105": "a",
10260              "\u2C65": "a",
10261              "\u0250": "a",
10262              "\uA733": "aa",
10263              "\xE6": "ae",
10264              "\u01FD": "ae",
10265              "\u01E3": "ae",
10266              "\uA735": "ao",
10267              "\uA737": "au",
10268              "\uA739": "av",
10269              "\uA73B": "av",
10270              "\uA73D": "ay",
10271              "\u24D1": "b",
10272              "\uFF42": "b",
10273              "\u1E03": "b",
10274              "\u1E05": "b",
10275              "\u1E07": "b",
10276              "\u0180": "b",
10277              "\u0183": "b",
10278              "\u0253": "b",
10279              "\u24D2": "c",
10280              "\uFF43": "c",
10281              "\u0107": "c",
10282              "\u0109": "c",
10283              "\u010B": "c",
10284              "\u010D": "c",
10285              "\xE7": "c",
10286              "\u1E09": "c",
10287              "\u0188": "c",
10288              "\u023C": "c",
10289              "\uA73F": "c",
10290              "\u2184": "c",
10291              "\u24D3": "d",
10292              "\uFF44": "d",
10293              "\u1E0B": "d",
10294              "\u010F": "d",
10295              "\u1E0D": "d",
10296              "\u1E11": "d",
10297              "\u1E13": "d",
10298              "\u1E0F": "d",
10299              "\u0111": "d",
10300              "\u018C": "d",
10301              "\u0256": "d",
10302              "\u0257": "d",
10303              "\uA77A": "d",
10304              "\u01F3": "dz",
10305              "\u01C6": "dz",
10306              "\u24D4": "e",
10307              "\uFF45": "e",
10308              "\xE8": "e",
10309              "\xE9": "e",
10310              "\xEA": "e",
10311              "\u1EC1": "e",
10312              "\u1EBF": "e",
10313              "\u1EC5": "e",
10314              "\u1EC3": "e",
10315              "\u1EBD": "e",
10316              "\u0113": "e",
10317              "\u1E15": "e",
10318              "\u1E17": "e",
10319              "\u0115": "e",
10320              "\u0117": "e",
10321              "\xEB": "e",
10322              "\u1EBB": "e",
10323              "\u011B": "e",
10324              "\u0205": "e",
10325              "\u0207": "e",
10326              "\u1EB9": "e",
10327              "\u1EC7": "e",
10328              "\u0229": "e",
10329              "\u1E1D": "e",
10330              "\u0119": "e",
10331              "\u1E19": "e",
10332              "\u1E1B": "e",
10333              "\u0247": "e",
10334              "\u025B": "e",
10335              "\u01DD": "e",
10336              "\u24D5": "f",
10337              "\uFF46": "f",
10338              "\u1E1F": "f",
10339              "\u0192": "f",
10340              "\uA77C": "f",
10341              "\u24D6": "g",
10342              "\uFF47": "g",
10343              "\u01F5": "g",
10344              "\u011D": "g",
10345              "\u1E21": "g",
10346              "\u011F": "g",
10347              "\u0121": "g",
10348              "\u01E7": "g",
10349              "\u0123": "g",
10350              "\u01E5": "g",
10351              "\u0260": "g",
10352              "\uA7A1": "g",
10353              "\u1D79": "g",
10354              "\uA77F": "g",
10355              "\u24D7": "h",
10356              "\uFF48": "h",
10357              "\u0125": "h",
10358              "\u1E23": "h",
10359              "\u1E27": "h",
10360              "\u021F": "h",
10361              "\u1E25": "h",
10362              "\u1E29": "h",
10363              "\u1E2B": "h",
10364              "\u1E96": "h",
10365              "\u0127": "h",
10366              "\u2C68": "h",
10367              "\u2C76": "h",
10368              "\u0265": "h",
10369              "\u0195": "hv",
10370              "\u24D8": "i",
10371              "\uFF49": "i",
10372              "\xEC": "i",
10373              "\xED": "i",
10374              "\xEE": "i",
10375              "\u0129": "i",
10376              "\u012B": "i",
10377              "\u012D": "i",
10378              "\xEF": "i",
10379              "\u1E2F": "i",
10380              "\u1EC9": "i",
10381              "\u01D0": "i",
10382              "\u0209": "i",
10383              "\u020B": "i",
10384              "\u1ECB": "i",
10385              "\u012F": "i",
10386              "\u1E2D": "i",
10387              "\u0268": "i",
10388              "\u0131": "i",
10389              "\u24D9": "j",
10390              "\uFF4A": "j",
10391              "\u0135": "j",
10392              "\u01F0": "j",
10393              "\u0249": "j",
10394              "\u24DA": "k",
10395              "\uFF4B": "k",
10396              "\u1E31": "k",
10397              "\u01E9": "k",
10398              "\u1E33": "k",
10399              "\u0137": "k",
10400              "\u1E35": "k",
10401              "\u0199": "k",
10402              "\u2C6A": "k",
10403              "\uA741": "k",
10404              "\uA743": "k",
10405              "\uA745": "k",
10406              "\uA7A3": "k",
10407              "\u24DB": "l",
10408              "\uFF4C": "l",
10409              "\u0140": "l",
10410              "\u013A": "l",
10411              "\u013E": "l",
10412              "\u1E37": "l",
10413              "\u1E39": "l",
10414              "\u013C": "l",
10415              "\u1E3D": "l",
10416              "\u1E3B": "l",
10417              "\u017F": "l",
10418              "\u0142": "l",
10419              "\u019A": "l",
10420              "\u026B": "l",
10421              "\u2C61": "l",
10422              "\uA749": "l",
10423              "\uA781": "l",
10424              "\uA747": "l",
10425              "\u01C9": "lj",
10426              "\u24DC": "m",
10427              "\uFF4D": "m",
10428              "\u1E3F": "m",
10429              "\u1E41": "m",
10430              "\u1E43": "m",
10431              "\u0271": "m",
10432              "\u026F": "m",
10433              "\u24DD": "n",
10434              "\uFF4E": "n",
10435              "\u01F9": "n",
10436              "\u0144": "n",
10437              "\xF1": "n",
10438              "\u1E45": "n",
10439              "\u0148": "n",
10440              "\u1E47": "n",
10441              "\u0146": "n",
10442              "\u1E4B": "n",
10443              "\u1E49": "n",
10444              "\u019E": "n",
10445              "\u0272": "n",
10446              "\u0149": "n",
10447              "\uA791": "n",
10448              "\uA7A5": "n",
10449              "\u01CC": "nj",
10450              "\u24DE": "o",
10451              "\uFF4F": "o",
10452              "\xF2": "o",
10453              "\xF3": "o",
10454              "\xF4": "o",
10455              "\u1ED3": "o",
10456              "\u1ED1": "o",
10457              "\u1ED7": "o",
10458              "\u1ED5": "o",
10459              "\xF5": "o",
10460              "\u1E4D": "o",
10461              "\u022D": "o",
10462              "\u1E4F": "o",
10463              "\u014D": "o",
10464              "\u1E51": "o",
10465              "\u1E53": "o",
10466              "\u014F": "o",
10467              "\u022F": "o",
10468              "\u0231": "o",
10469              "\xF6": "o",
10470              "\u022B": "o",
10471              "\u1ECF": "o",
10472              "\u0151": "o",
10473              "\u01D2": "o",
10474              "\u020D": "o",
10475              "\u020F": "o",
10476              "\u01A1": "o",
10477              "\u1EDD": "o",
10478              "\u1EDB": "o",
10479              "\u1EE1": "o",
10480              "\u1EDF": "o",
10481              "\u1EE3": "o",
10482              "\u1ECD": "o",
10483              "\u1ED9": "o",
10484              "\u01EB": "o",
10485              "\u01ED": "o",
10486              "\xF8": "o",
10487              "\u01FF": "o",
10488              "\u0254": "o",
10489              "\uA74B": "o",
10490              "\uA74D": "o",
10491              "\u0275": "o",
10492              "\u0153": "oe",
10493              "\u01A3": "oi",
10494              "\u0223": "ou",
10495              "\uA74F": "oo",
10496              "\u24DF": "p",
10497              "\uFF50": "p",
10498              "\u1E55": "p",
10499              "\u1E57": "p",
10500              "\u01A5": "p",
10501              "\u1D7D": "p",
10502              "\uA751": "p",
10503              "\uA753": "p",
10504              "\uA755": "p",
10505              "\u24E0": "q",
10506              "\uFF51": "q",
10507              "\u024B": "q",
10508              "\uA757": "q",
10509              "\uA759": "q",
10510              "\u24E1": "r",
10511              "\uFF52": "r",
10512              "\u0155": "r",
10513              "\u1E59": "r",
10514              "\u0159": "r",
10515              "\u0211": "r",
10516              "\u0213": "r",
10517              "\u1E5B": "r",
10518              "\u1E5D": "r",
10519              "\u0157": "r",
10520              "\u1E5F": "r",
10521              "\u024D": "r",
10522              "\u027D": "r",
10523              "\uA75B": "r",
10524              "\uA7A7": "r",
10525              "\uA783": "r",
10526              "\u24E2": "s",
10527              "\uFF53": "s",
10528              "\xDF": "s",
10529              "\u015B": "s",
10530              "\u1E65": "s",
10531              "\u015D": "s",
10532              "\u1E61": "s",
10533              "\u0161": "s",
10534              "\u1E67": "s",
10535              "\u1E63": "s",
10536              "\u1E69": "s",
10537              "\u0219": "s",
10538              "\u015F": "s",
10539              "\u023F": "s",
10540              "\uA7A9": "s",
10541              "\uA785": "s",
10542              "\u1E9B": "s",
10543              "\u24E3": "t",
10544              "\uFF54": "t",
10545              "\u1E6B": "t",
10546              "\u1E97": "t",
10547              "\u0165": "t",
10548              "\u1E6D": "t",
10549              "\u021B": "t",
10550              "\u0163": "t",
10551              "\u1E71": "t",
10552              "\u1E6F": "t",
10553              "\u0167": "t",
10554              "\u01AD": "t",
10555              "\u0288": "t",
10556              "\u2C66": "t",
10557              "\uA787": "t",
10558              "\uA729": "tz",
10559              "\u24E4": "u",
10560              "\uFF55": "u",
10561              "\xF9": "u",
10562              "\xFA": "u",
10563              "\xFB": "u",
10564              "\u0169": "u",
10565              "\u1E79": "u",
10566              "\u016B": "u",
10567              "\u1E7B": "u",
10568              "\u016D": "u",
10569              "\xFC": "u",
10570              "\u01DC": "u",
10571              "\u01D8": "u",
10572              "\u01D6": "u",
10573              "\u01DA": "u",
10574              "\u1EE7": "u",
10575              "\u016F": "u",
10576              "\u0171": "u",
10577              "\u01D4": "u",
10578              "\u0215": "u",
10579              "\u0217": "u",
10580              "\u01B0": "u",
10581              "\u1EEB": "u",
10582              "\u1EE9": "u",
10583              "\u1EEF": "u",
10584              "\u1EED": "u",
10585              "\u1EF1": "u",
10586              "\u1EE5": "u",
10587              "\u1E73": "u",
10588              "\u0173": "u",
10589              "\u1E77": "u",
10590              "\u1E75": "u",
10591              "\u0289": "u",
10592              "\u24E5": "v",
10593              "\uFF56": "v",
10594              "\u1E7D": "v",
10595              "\u1E7F": "v",
10596              "\u028B": "v",
10597              "\uA75F": "v",
10598              "\u028C": "v",
10599              "\uA761": "vy",
10600              "\u24E6": "w",
10601              "\uFF57": "w",
10602              "\u1E81": "w",
10603              "\u1E83": "w",
10604              "\u0175": "w",
10605              "\u1E87": "w",
10606              "\u1E85": "w",
10607              "\u1E98": "w",
10608              "\u1E89": "w",
10609              "\u2C73": "w",
10610              "\u24E7": "x",
10611              "\uFF58": "x",
10612              "\u1E8B": "x",
10613              "\u1E8D": "x",
10614              "\u24E8": "y",
10615              "\uFF59": "y",
10616              "\u1EF3": "y",
10617              "\xFD": "y",
10618              "\u0177": "y",
10619              "\u1EF9": "y",
10620              "\u0233": "y",
10621              "\u1E8F": "y",
10622              "\xFF": "y",
10623              "\u1EF7": "y",
10624              "\u1E99": "y",
10625              "\u1EF5": "y",
10626              "\u01B4": "y",
10627              "\u024F": "y",
10628              "\u1EFF": "y",
10629              "\u24E9": "z",
10630              "\uFF5A": "z",
10631              "\u017A": "z",
10632              "\u1E91": "z",
10633              "\u017C": "z",
10634              "\u017E": "z",
10635              "\u1E93": "z",
10636              "\u1E95": "z",
10637              "\u01B6": "z",
10638              "\u0225": "z",
10639              "\u0240": "z",
10640              "\u2C6C": "z",
10641              "\uA763": "z",
10642              "\u0386": "\u0391",
10643              "\u0388": "\u0395",
10644              "\u0389": "\u0397",
10645              "\u038A": "\u0399",
10646              "\u03AA": "\u0399",
10647              "\u038C": "\u039F",
10648              "\u038E": "\u03A5",
10649              "\u03AB": "\u03A5",
10650              "\u038F": "\u03A9",
10651              "\u03AC": "\u03B1",
10652              "\u03AD": "\u03B5",
10653              "\u03AE": "\u03B7",
10654              "\u03AF": "\u03B9",
10655              "\u03CA": "\u03B9",
10656              "\u0390": "\u03B9",
10657              "\u03CC": "\u03BF",
10658              "\u03CD": "\u03C5",
10659              "\u03CB": "\u03C5",
10660              "\u03B0": "\u03C5",
10661              "\u03CE": "\u03C9",
10662              "\u03C2": "\u03C3",
10663              "\u2019": "'"
10664            };
10665            return diacritics;
10666          });
10667          S22.define("select2/data/base", [
10668            "../utils"
10669          ], function(Utils) {
10670            function BaseAdapter($element, options) {
10671              BaseAdapter.__super__.constructor.call(this);
10672            }
10673            Utils.Extend(BaseAdapter, Utils.Observable);
10674            BaseAdapter.prototype.current = function(callback) {
10675              throw new Error("The `current` method must be defined in child classes.");
10676            };
10677            BaseAdapter.prototype.query = function(params, callback) {
10678              throw new Error("The `query` method must be defined in child classes.");
10679            };
10680            BaseAdapter.prototype.bind = function(container, $container) {
10681            };
10682            BaseAdapter.prototype.destroy = function() {
10683            };
10684            BaseAdapter.prototype.generateResultId = function(container, data) {
10685              var id = container.id + "-result-";
10686              id += Utils.generateChars(4);
10687              if (data.id != null) {
10688                id += "-" + data.id.toString();
10689              } else {
10690                id += "-" + Utils.generateChars(4);
10691              }
10692              return id;
10693            };
10694            return BaseAdapter;
10695          });
10696          S22.define("select2/data/select", [
10697            "./base",
10698            "../utils",
10699            "jquery"
10700          ], function(BaseAdapter, Utils, $3) {
10701            function SelectAdapter($element, options) {
10702              this.$element = $element;
10703              this.options = options;
10704              SelectAdapter.__super__.constructor.call(this);
10705            }
10706            Utils.Extend(SelectAdapter, BaseAdapter);
10707            SelectAdapter.prototype.current = function(callback) {
10708              var self2 = this;
10709              var data = Array.prototype.map.call(
10710                this.$element[0].querySelectorAll(":checked"),
10711                function(selectedElement) {
10712                  return self2.item($3(selectedElement));
10713                }
10714              );
10715              callback(data);
10716            };
10717            SelectAdapter.prototype.select = function(data) {
10718              var self2 = this;
10719              data.selected = true;
10720              if (data.element != null && data.element.tagName.toLowerCase() === "option") {
10721                data.element.selected = true;
10722                this.$element.trigger("input").trigger("change");
10723                return;
10724              }
10725              if (this.$element.prop("multiple")) {
10726                this.current(function(currentData) {
10727                  var val2 = [];
10728                  data = [data];
10729                  data.push.apply(data, currentData);
10730                  for (var d = 0; d < data.length; d++) {
10731                    var id = data[d].id;
10732                    if (val2.indexOf(id) === -1) {
10733                      val2.push(id);
10734                    }
10735                  }
10736                  self2.$element.val(val2);
10737                  self2.$element.trigger("input").trigger("change");
10738                });
10739              } else {
10740                var val = data.id;
10741                this.$element.val(val);
10742                this.$element.trigger("input").trigger("change");
10743              }
10744            };
10745            SelectAdapter.prototype.unselect = function(data) {
10746              var self2 = this;
10747              if (!this.$element.prop("multiple")) {
10748                return;
10749              }
10750              data.selected = false;
10751              if (data.element != null && data.element.tagName.toLowerCase() === "option") {
10752                data.element.selected = false;
10753                this.$element.trigger("input").trigger("change");
10754                return;
10755              }
10756              this.current(function(currentData) {
10757                var val = [];
10758                for (var d = 0; d < currentData.length; d++) {
10759                  var id = currentData[d].id;
10760                  if (id !== data.id && val.indexOf(id) === -1) {
10761                    val.push(id);
10762                  }
10763                }
10764                self2.$element.val(val);
10765                self2.$element.trigger("input").trigger("change");
10766              });
10767            };
10768            SelectAdapter.prototype.bind = function(container, $container) {
10769              var self2 = this;
10770              this.container = container;
10771              container.on("select", function(params) {
10772                self2.select(params.data);
10773              });
10774              container.on("unselect", function(params) {
10775                self2.unselect(params.data);
10776              });
10777            };
10778            SelectAdapter.prototype.destroy = function() {
10779              this.$element.find("*").each(function() {
10780                Utils.RemoveData(this);
10781              });
10782            };
10783            SelectAdapter.prototype.query = function(params, callback) {
10784              var data = [];
10785              var self2 = this;
10786              var $options = this.$element.children();
10787              $options.each(function() {
10788                if (this.tagName.toLowerCase() !== "option" && this.tagName.toLowerCase() !== "optgroup") {
10789                  return;
10790                }
10791                var $option = $3(this);
10792                var option = self2.item($option);
10793                var matches = self2.matches(params, option);
10794                if (matches !== null) {
10795                  data.push(matches);
10796                }
10797              });
10798              callback({
10799                results: data
10800              });
10801            };
10802            SelectAdapter.prototype.addOptions = function($options) {
10803              this.$element.append($options);
10804            };
10805            SelectAdapter.prototype.option = function(data) {
10806              var option;
10807              if (data.children) {
10808                option = document.createElement("optgroup");
10809                option.label = data.text;
10810              } else {
10811                option = document.createElement("option");
10812                if (option.textContent !== void 0) {
10813                  option.textContent = data.text;
10814                } else {
10815                  option.innerText = data.text;
10816                }
10817              }
10818              if (data.id !== void 0) {
10819                option.value = data.id;
10820              }
10821              if (data.disabled) {
10822                option.disabled = true;
10823              }
10824              if (data.selected) {
10825                option.selected = true;
10826              }
10827              if (data.title) {
10828                option.title = data.title;
10829              }
10830              var normalizedData = this._normalizeItem(data);
10831              normalizedData.element = option;
10832              Utils.StoreData(option, "data", normalizedData);
10833              return $3(option);
10834            };
10835            SelectAdapter.prototype.item = function($option) {
10836              var data = {};
10837              data = Utils.GetData($option[0], "data");
10838              if (data != null) {
10839                return data;
10840              }
10841              var option = $option[0];
10842              if (option.tagName.toLowerCase() === "option") {
10843                data = {
10844                  id: $option.val(),
10845                  text: $option.text(),
10846                  disabled: $option.prop("disabled"),
10847                  selected: $option.prop("selected"),
10848                  title: $option.prop("title")
10849                };
10850              } else if (option.tagName.toLowerCase() === "optgroup") {
10851                data = {
10852                  text: $option.prop("label"),
10853                  children: [],
10854                  title: $option.prop("title")
10855                };
10856                var $children = $option.children("option");
10857                var children = [];
10858                for (var c = 0; c < $children.length; c++) {
10859                  var $child = $3($children[c]);
10860                  var child = this.item($child);
10861                  children.push(child);
10862                }
10863                data.children = children;
10864              }
10865              data = this._normalizeItem(data);
10866              data.element = $option[0];
10867              Utils.StoreData($option[0], "data", data);
10868              return data;
10869            };
10870            SelectAdapter.prototype._normalizeItem = function(item) {
10871              if (item !== Object(item)) {
10872                item = {
10873                  id: item,
10874                  text: item
10875                };
10876              }
10877              item = $3.extend({}, {
10878                text: ""
10879              }, item);
10880              var defaults = {
10881                selected: false,
10882                disabled: false
10883              };
10884              if (item.id != null) {
10885                item.id = item.id.toString();
10886              }
10887              if (item.text != null) {
10888                item.text = item.text.toString();
10889              }
10890              if (item._resultId == null && item.id && this.container != null) {
10891                item._resultId = this.generateResultId(this.container, item);
10892              }
10893              return $3.extend({}, defaults, item);
10894            };
10895            SelectAdapter.prototype.matches = function(params, data) {
10896              var matcher = this.options.get("matcher");
10897              return matcher(params, data);
10898            };
10899            return SelectAdapter;
10900          });
10901          S22.define("select2/data/array", [
10902            "./select",
10903            "../utils",
10904            "jquery"
10905          ], function(SelectAdapter, Utils, $3) {
10906            function ArrayAdapter($element, options) {
10907              this._dataToConvert = options.get("data") || [];
10908              ArrayAdapter.__super__.constructor.call(this, $element, options);
10909            }
10910            Utils.Extend(ArrayAdapter, SelectAdapter);
10911            ArrayAdapter.prototype.bind = function(container, $container) {
10912              ArrayAdapter.__super__.bind.call(this, container, $container);
10913              this.addOptions(this.convertToOptions(this._dataToConvert));
10914            };
10915            ArrayAdapter.prototype.select = function(data) {
10916              var $option = this.$element.find("option").filter(function(i, elm) {
10917                return elm.value == data.id.toString();
10918              });
10919              if ($option.length === 0) {
10920                $option = this.option(data);
10921                this.addOptions($option);
10922              }
10923              ArrayAdapter.__super__.select.call(this, data);
10924            };
10925            ArrayAdapter.prototype.convertToOptions = function(data) {
10926              var self2 = this;
10927              var $existing = this.$element.find("option");
10928              var existingIds = $existing.map(function() {
10929                return self2.item($3(this)).id;
10930              }).get();
10931              var $options = [];
10932              function onlyItem(item2) {
10933                return function() {
10934                  return $3(this).val() == item2.id;
10935                };
10936              }
10937              for (var d = 0; d < data.length; d++) {
10938                var item = this._normalizeItem(data[d]);
10939                if (existingIds.indexOf(item.id) >= 0) {
10940                  var $existingOption = $existing.filter(onlyItem(item));
10941                  var existingData = this.item($existingOption);
10942                  var newData = $3.extend(true, {}, item, existingData);
10943                  var $newOption = this.option(newData);
10944                  $existingOption.replaceWith($newOption);
10945                  continue;
10946                }
10947                var $option = this.option(item);
10948                if (item.children) {
10949                  var $children = this.convertToOptions(item.children);
10950                  $option.append($children);
10951                }
10952                $options.push($option);
10953              }
10954              return $options;
10955            };
10956            return ArrayAdapter;
10957          });
10958          S22.define("select2/data/ajax", [
10959            "./array",
10960            "../utils",
10961            "jquery"
10962          ], function(ArrayAdapter, Utils, $3) {
10963            function AjaxAdapter($element, options) {
10964              this.ajaxOptions = this._applyDefaults(options.get("ajax"));
10965              if (this.ajaxOptions.processResults != null) {
10966                this.processResults = this.ajaxOptions.processResults;
10967              }
10968              AjaxAdapter.__super__.constructor.call(this, $element, options);
10969            }
10970            Utils.Extend(AjaxAdapter, ArrayAdapter);
10971            AjaxAdapter.prototype._applyDefaults = function(options) {
10972              var defaults = {
10973                data: function(params) {
10974                  return $3.extend({}, params, {
10975                    q: params.term
10976                  });
10977                },
10978                transport: function(params, success, failure) {
10979                  var $request = $3.ajax(params);
10980                  $request.then(success);
10981                  $request.fail(failure);
10982                  return $request;
10983                }
10984              };
10985              return $3.extend({}, defaults, options, true);
10986            };
10987            AjaxAdapter.prototype.processResults = function(results) {
10988              return results;
10989            };
10990            AjaxAdapter.prototype.query = function(params, callback) {
10991              var matches = [];
10992              var self2 = this;
10993              if (this._request != null) {
10994                if (typeof this._request.abort === "function") {
10995                  this._request.abort();
10996                }
10997                this._request = null;
10998              }
10999              var options = $3.extend({
11000                type: "GET"
11001              }, this.ajaxOptions);
11002              if (typeof options.url === "function") {
11003                options.url = options.url.call(this.$element, params);
11004              }
11005              if (typeof options.data === "function") {
11006                options.data = options.data.call(this.$element, params);
11007              }
11008              function request() {
11009                var $request = options.transport(options, function(data) {
11010                  var results = self2.processResults(data, params);
11011                  if (self2.options.get("debug") && window.console && console.error) {
11012                    if (!results || !results.results || !Array.isArray(results.results)) {
11013                      console.error(
11014                        "Select2: The AJAX results did not return an array in the `results` key of the response."
11015                      );
11016                    }
11017                  }
11018                  callback(results);
11019                }, function() {
11020                  if ("status" in $request && ($request.status === 0 || $request.status === "0")) {
11021                    return;
11022                  }
11023                  self2.trigger("results:message", {
11024                    message: "errorLoading"
11025                  });
11026                });
11027                self2._request = $request;
11028              }
11029              if (this.ajaxOptions.delay && params.term != null) {
11030                if (this._queryTimeout) {
11031                  window.clearTimeout(this._queryTimeout);
11032                }
11033                this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);
11034              } else {
11035                request();
11036              }
11037            };
11038            return AjaxAdapter;
11039          });
11040          S22.define("select2/data/tags", [
11041            "jquery"
11042          ], function($3) {
11043            function Tags(decorated, $element, options) {
11044              var tags = options.get("tags");
11045              var createTag = options.get("createTag");
11046              if (createTag !== void 0) {
11047                this.createTag = createTag;
11048              }
11049              var insertTag = options.get("insertTag");
11050              if (insertTag !== void 0) {
11051                this.insertTag = insertTag;
11052              }
11053              decorated.call(this, $element, options);
11054              if (Array.isArray(tags)) {
11055                for (var t2 = 0; t2 < tags.length; t2++) {
11056                  var tag = tags[t2];
11057                  var item = this._normalizeItem(tag);
11058                  var $option = this.option(item);
11059                  this.$element.append($option);
11060                }
11061              }
11062            }
11063            Tags.prototype.query = function(decorated, params, callback) {
11064              var self2 = this;
11065              this._removeOldTags();
11066              if (params.term == null || params.page != null) {
11067                decorated.call(this, params, callback);
11068                return;
11069              }
11070              function wrapper(obj, child) {
11071                var data = obj.results;
11072                for (var i = 0; i < data.length; i++) {
11073                  var option = data[i];
11074                  var checkChildren = option.children != null && !wrapper({
11075                    results: option.children
11076                  }, true);
11077                  var optionText = (option.text || "").toUpperCase();
11078                  var paramsTerm = (params.term || "").toUpperCase();
11079                  var checkText = optionText === paramsTerm;
11080                  if (checkText || checkChildren) {
11081                    if (child) {
11082                      return false;
11083                    }
11084                    obj.data = data;
11085                    callback(obj);
11086                    return;
11087                  }
11088                }
11089                if (child) {
11090                  return true;
11091                }
11092                var tag = self2.createTag(params);
11093                if (tag != null) {
11094                  var $option = self2.option(tag);
11095                  $option.attr("data-select2-tag", "true");
11096                  self2.addOptions([$option]);
11097                  self2.insertTag(data, tag);
11098                }
11099                obj.results = data;
11100                callback(obj);
11101              }
11102              decorated.call(this, params, wrapper);
11103            };
11104            Tags.prototype.createTag = function(decorated, params) {
11105              if (params.term == null) {
11106                return null;
11107              }
11108              var term = params.term.trim();
11109              if (term === "") {
11110                return null;
11111              }
11112              return {
11113                id: term,
11114                text: term
11115              };
11116            };
11117            Tags.prototype.insertTag = function(_, data, tag) {
11118              data.unshift(tag);
11119            };
11120            Tags.prototype._removeOldTags = function(_) {
11121              var $options = this.$element.find("option[data-select2-tag]");
11122              $options.each(function() {
11123                if (this.selected) {
11124                  return;
11125                }
11126                $3(this).remove();
11127              });
11128            };
11129            return Tags;
11130          });
11131          S22.define("select2/data/tokenizer", [
11132            "jquery"
11133          ], function($3) {
11134            function Tokenizer(decorated, $element, options) {
11135              var tokenizer = options.get("tokenizer");
11136              if (tokenizer !== void 0) {
11137                this.tokenizer = tokenizer;
11138              }
11139              decorated.call(this, $element, options);
11140            }
11141            Tokenizer.prototype.bind = function(decorated, container, $container) {
11142              decorated.call(this, container, $container);
11143              this.$search = container.dropdown.$search || container.selection.$search || $container.find(".select2-search__field");
11144            };
11145            Tokenizer.prototype.query = function(decorated, params, callback) {
11146              var self2 = this;
11147              function createAndSelect(data) {
11148                var item = self2._normalizeItem(data);
11149                var $existingOptions = self2.$element.find("option").filter(function() {
11150                  return $3(this).val() === item.id;
11151                });
11152                if (!$existingOptions.length) {
11153                  var $option = self2.option(item);
11154                  $option.attr("data-select2-tag", true);
11155                  self2._removeOldTags();
11156                  self2.addOptions([$option]);
11157                }
11158                select(item);
11159              }
11160              function select(data) {
11161                self2.trigger("select", {
11162                  data
11163                });
11164              }
11165              params.term = params.term || "";
11166              var tokenData = this.tokenizer(params, this.options, createAndSelect);
11167              if (tokenData.term !== params.term) {
11168                if (this.$search.length) {
11169                  this.$search.val(tokenData.term);
11170                  this.$search.trigger("focus");
11171                }
11172                params.term = tokenData.term;
11173              }
11174              decorated.call(this, params, callback);
11175            };
11176            Tokenizer.prototype.tokenizer = function(_, params, options, callback) {
11177              var separators = options.get("tokenSeparators") || [];
11178              var term = params.term;
11179              var i = 0;
11180              var createTag = this.createTag || function(params2) {
11181                return {
11182                  id: params2.term,
11183                  text: params2.term
11184                };
11185              };
11186              while (i < term.length) {
11187                var termChar = term[i];
11188                if (separators.indexOf(termChar) === -1) {
11189                  i++;
11190                  continue;
11191                }
11192                var part = term.substr(0, i);
11193                var partParams = $3.extend({}, params, {
11194                  term: part
11195                });
11196                var data = createTag(partParams);
11197                if (data == null) {
11198                  i++;
11199                  continue;
11200                }
11201                callback(data);
11202                term = term.substr(i + 1) || "";
11203                i = 0;
11204              }
11205              return {
11206                term
11207              };
11208            };
11209            return Tokenizer;
11210          });
11211          S22.define("select2/data/minimumInputLength", [], function() {
11212            function MinimumInputLength(decorated, $e, options) {
11213              this.minimumInputLength = options.get("minimumInputLength");
11214              decorated.call(this, $e, options);
11215            }
11216            MinimumInputLength.prototype.query = function(decorated, params, callback) {
11217              params.term = params.term || "";
11218              if (params.term.length < this.minimumInputLength) {
11219                this.trigger("results:message", {
11220                  message: "inputTooShort",
11221                  args: {
11222                    minimum: this.minimumInputLength,
11223                    input: params.term,
11224                    params
11225                  }
11226                });
11227                return;
11228              }
11229              decorated.call(this, params, callback);
11230            };
11231            return MinimumInputLength;
11232          });
11233          S22.define("select2/data/maximumInputLength", [], function() {
11234            function MaximumInputLength(decorated, $e, options) {
11235              this.maximumInputLength = options.get("maximumInputLength");
11236              decorated.call(this, $e, options);
11237            }
11238            MaximumInputLength.prototype.query = function(decorated, params, callback) {
11239              params.term = params.term || "";
11240              if (this.maximumInputLength > 0 && params.term.length > this.maximumInputLength) {
11241                this.trigger("results:message", {
11242                  message: "inputTooLong",
11243                  args: {
11244                    maximum: this.maximumInputLength,
11245                    input: params.term,
11246                    params
11247                  }
11248                });
11249                return;
11250              }
11251              decorated.call(this, params, callback);
11252            };
11253            return MaximumInputLength;
11254          });
11255          S22.define("select2/data/maximumSelectionLength", [], function() {
11256            function MaximumSelectionLength(decorated, $e, options) {
11257              this.maximumSelectionLength = options.get("maximumSelectionLength");
11258              decorated.call(this, $e, options);
11259            }
11260            MaximumSelectionLength.prototype.bind = function(decorated, container, $container) {
11261              var self2 = this;
11262              decorated.call(this, container, $container);
11263              container.on("select", function() {
11264                self2._checkIfMaximumSelected();
11265              });
11266            };
11267            MaximumSelectionLength.prototype.query = function(decorated, params, callback) {
11268              var self2 = this;
11269              this._checkIfMaximumSelected(function() {
11270                decorated.call(self2, params, callback);
11271              });
11272            };
11273            MaximumSelectionLength.prototype._checkIfMaximumSelected = function(_, successCallback) {
11274              var self2 = this;
11275              this.current(function(currentData) {
11276                var count = currentData != null ? currentData.length : 0;
11277                if (self2.maximumSelectionLength > 0 && count >= self2.maximumSelectionLength) {
11278                  self2.trigger("results:message", {
11279                    message: "maximumSelected",
11280                    args: {
11281                      maximum: self2.maximumSelectionLength
11282                    }
11283                  });
11284                  return;
11285                }
11286                if (successCallback) {
11287                  successCallback();
11288                }
11289              });
11290            };
11291            return MaximumSelectionLength;
11292          });
11293          S22.define("select2/dropdown", [
11294            "jquery",
11295            "./utils"
11296          ], function($3, Utils) {
11297            function Dropdown($element, options) {
11298              this.$element = $element;
11299              this.options = options;
11300              Dropdown.__super__.constructor.call(this);
11301            }
11302            Utils.Extend(Dropdown, Utils.Observable);
11303            Dropdown.prototype.render = function() {
11304              var $dropdown = $3(
11305                '<span class="select2-dropdown"><span class="select2-results"></span></span>'
11306              );
11307              $dropdown.attr("dir", this.options.get("dir"));
11308              this.$dropdown = $dropdown;
11309              return $dropdown;
11310            };
11311            Dropdown.prototype.bind = function() {
11312            };
11313            Dropdown.prototype.position = function($dropdown, $container) {
11314            };
11315            Dropdown.prototype.destroy = function() {
11316              this.$dropdown.remove();
11317            };
11318            return Dropdown;
11319          });
11320          S22.define("select2/dropdown/search", [
11321            "jquery"
11322          ], function($3) {
11323            function Search() {
11324            }
11325            Search.prototype.render = function(decorated) {
11326              var $rendered = decorated.call(this);
11327              var searchLabel = this.options.get("translations").get("search");
11328              var $search = $3(
11329                '<span class="select2-search select2-search--dropdown"><input class="select2-search__field" type="search" tabindex="-1" autocorrect="off" autocapitalize="none" spellcheck="false" role="searchbox" aria-autocomplete="list" /></span>'
11330              );
11331              this.$searchContainer = $search;
11332              this.$search = $search.find("input");
11333              this.$search.prop("autocomplete", this.options.get("autocomplete"));
11334              this.$search.attr("aria-label", searchLabel());
11335              $rendered.prepend($search);
11336              return $rendered;
11337            };
11338            Search.prototype.bind = function(decorated, container, $container) {
11339              var self2 = this;
11340              var resultsId = container.id + "-results";
11341              decorated.call(this, container, $container);
11342              this.$search.on("keydown", function(evt) {
11343                self2.trigger("keypress", evt);
11344                self2._keyUpPrevented = evt.isDefaultPrevented();
11345              });
11346              this.$search.on("input", function(evt) {
11347                $3(this).off("keyup");
11348              });
11349              this.$search.on("keyup input", function(evt) {
11350                self2.handleSearch(evt);
11351              });
11352              container.on("open", function() {
11353                self2.$search.attr("tabindex", 0);
11354                self2.$search.attr("aria-controls", resultsId);
11355                self2.$search.trigger("focus");
11356                window.setTimeout(function() {
11357                  self2.$search.trigger("focus");
11358                }, 0);
11359              });
11360              container.on("close", function() {
11361                self2.$search.attr("tabindex", -1);
11362                self2.$search.removeAttr("aria-controls");
11363                self2.$search.removeAttr("aria-activedescendant");
11364                self2.$search.val("");
11365                self2.$search.trigger("blur");
11366              });
11367              container.on("focus", function() {
11368                if (!container.isOpen()) {
11369                  self2.$search.trigger("focus");
11370                }
11371              });
11372              container.on("results:all", function(params) {
11373                if (params.query.term == null || params.query.term === "") {
11374                  var showSearch = self2.showSearch(params);
11375                  if (showSearch) {
11376                    self2.$searchContainer[0].classList.remove("select2-search--hide");
11377                  } else {
11378                    self2.$searchContainer[0].classList.add("select2-search--hide");
11379                  }
11380                }
11381              });
11382              container.on("results:focus", function(params) {
11383                if (params.data._resultId) {
11384                  self2.$search.attr("aria-activedescendant", params.data._resultId);
11385                } else {
11386                  self2.$search.removeAttr("aria-activedescendant");
11387                }
11388              });
11389            };
11390            Search.prototype.handleSearch = function(evt) {
11391              if (!this._keyUpPrevented) {
11392                var input = this.$search.val();
11393                this.trigger("query", {
11394                  term: input
11395                });
11396              }
11397              this._keyUpPrevented = false;
11398            };
11399            Search.prototype.showSearch = function(_, params) {
11400              return true;
11401            };
11402            return Search;
11403          });
11404          S22.define("select2/dropdown/hidePlaceholder", [], function() {
11405            function HidePlaceholder(decorated, $element, options, dataAdapter) {
11406              this.placeholder = this.normalizePlaceholder(options.get("placeholder"));
11407              decorated.call(this, $element, options, dataAdapter);
11408            }
11409            HidePlaceholder.prototype.append = function(decorated, data) {
11410              data.results = this.removePlaceholder(data.results);
11411              decorated.call(this, data);
11412            };
11413            HidePlaceholder.prototype.normalizePlaceholder = function(_, placeholder) {
11414              if (typeof placeholder === "string") {
11415                placeholder = {
11416                  id: "",
11417                  text: placeholder
11418                };
11419              }
11420              return placeholder;
11421            };
11422            HidePlaceholder.prototype.removePlaceholder = function(_, data) {
11423              var modifiedData = data.slice(0);
11424              for (var d = data.length - 1; d >= 0; d--) {
11425                var item = data[d];
11426                if (this.placeholder.id === item.id) {
11427                  modifiedData.splice(d, 1);
11428                }
11429              }
11430              return modifiedData;
11431            };
11432            return HidePlaceholder;
11433          });
11434          S22.define("select2/dropdown/infiniteScroll", [
11435            "jquery"
11436          ], function($3) {
11437            function InfiniteScroll(decorated, $element, options, dataAdapter) {
11438              this.lastParams = {};
11439              decorated.call(this, $element, options, dataAdapter);
11440              this.$loadingMore = this.createLoadingMore();
11441              this.loading = false;
11442            }
11443            InfiniteScroll.prototype.append = function(decorated, data) {
11444              this.$loadingMore.remove();
11445              this.loading = false;
11446              decorated.call(this, data);
11447              if (this.showLoadingMore(data)) {
11448                this.$results.append(this.$loadingMore);
11449                this.loadMoreIfNeeded();
11450              }
11451            };
11452            InfiniteScroll.prototype.bind = function(decorated, container, $container) {
11453              var self2 = this;
11454              decorated.call(this, container, $container);
11455              container.on("query", function(params) {
11456                self2.lastParams = params;
11457                self2.loading = true;
11458              });
11459              container.on("query:append", function(params) {
11460                self2.lastParams = params;
11461                self2.loading = true;
11462              });
11463              this.$results.on("scroll", this.loadMoreIfNeeded.bind(this));
11464            };
11465            InfiniteScroll.prototype.loadMoreIfNeeded = function() {
11466              var isLoadMoreVisible = $3.contains(
11467                document.documentElement,
11468                this.$loadingMore[0]
11469              );
11470              if (this.loading || !isLoadMoreVisible) {
11471                return;
11472              }
11473              var currentOffset = this.$results.offset().top + this.$results.outerHeight(false);
11474              var loadingMoreOffset = this.$loadingMore.offset().top + this.$loadingMore.outerHeight(false);
11475              if (currentOffset + 50 >= loadingMoreOffset) {
11476                this.loadMore();
11477              }
11478            };
11479            InfiniteScroll.prototype.loadMore = function() {
11480              this.loading = true;
11481              var params = $3.extend({}, { page: 1 }, this.lastParams);
11482              params.page++;
11483              this.trigger("query:append", params);
11484            };
11485            InfiniteScroll.prototype.showLoadingMore = function(_, data) {
11486              return data.pagination && data.pagination.more;
11487            };
11488            InfiniteScroll.prototype.createLoadingMore = function() {
11489              var $option = $3(
11490                '<li class="select2-results__option select2-results__option--load-more"role="option" aria-disabled="true"></li>'
11491              );
11492              var message = this.options.get("translations").get("loadingMore");
11493              $option.html(message(this.lastParams));
11494              return $option;
11495            };
11496            return InfiniteScroll;
11497          });
11498          S22.define("select2/dropdown/attachBody", [
11499            "jquery",
11500            "../utils"
11501          ], function($3, Utils) {
11502            function AttachBody(decorated, $element, options) {
11503              this.$dropdownParent = $3(options.get("dropdownParent") || document.body);
11504              decorated.call(this, $element, options);
11505            }
11506            AttachBody.prototype.bind = function(decorated, container, $container) {
11507              var self2 = this;
11508              decorated.call(this, container, $container);
11509              container.on("open", function() {
11510                self2._showDropdown();
11511                self2._attachPositioningHandler(container);
11512                self2._bindContainerResultHandlers(container);
11513              });
11514              container.on("close", function() {
11515                self2._hideDropdown();
11516                self2._detachPositioningHandler(container);
11517              });
11518              this.$dropdownContainer.on("mousedown", function(evt) {
11519                evt.stopPropagation();
11520              });
11521            };
11522            AttachBody.prototype.destroy = function(decorated) {
11523              decorated.call(this);
11524              this.$dropdownContainer.remove();
11525            };
11526            AttachBody.prototype.position = function(decorated, $dropdown, $container) {
11527              $dropdown.attr("class", $container.attr("class"));
11528              $dropdown[0].classList.remove("select2");
11529              $dropdown[0].classList.add("select2-container--open");
11530              $dropdown.css({
11531                position: "absolute",
11532                top: -999999
11533              });
11534              this.$container = $container;
11535            };
11536            AttachBody.prototype.render = function(decorated) {
11537              var $container = $3("<span></span>");
11538              var $dropdown = decorated.call(this);
11539              $container.append($dropdown);
11540              this.$dropdownContainer = $container;
11541              return $container;
11542            };
11543            AttachBody.prototype._hideDropdown = function(decorated) {
11544              this.$dropdownContainer.detach();
11545            };
11546            AttachBody.prototype._bindContainerResultHandlers = function(decorated, container) {
11547              if (this._containerResultsHandlersBound) {
11548                return;
11549              }
11550              var self2 = this;
11551              container.on("results:all", function() {
11552                self2._positionDropdown();
11553                self2._resizeDropdown();
11554              });
11555              container.on("results:append", function() {
11556                self2._positionDropdown();
11557                self2._resizeDropdown();
11558              });
11559              container.on("results:message", function() {
11560                self2._positionDropdown();
11561                self2._resizeDropdown();
11562              });
11563              container.on("select", function() {
11564                self2._positionDropdown();
11565                self2._resizeDropdown();
11566              });
11567              container.on("unselect", function() {
11568                self2._positionDropdown();
11569                self2._resizeDropdown();
11570              });
11571              this._containerResultsHandlersBound = true;
11572            };
11573            AttachBody.prototype._attachPositioningHandler = function(decorated, container) {
11574              var self2 = this;
11575              var scrollEvent = "scroll.select2." + container.id;
11576              var resizeEvent = "resize.select2." + container.id;
11577              var orientationEvent = "orientationchange.select2." + container.id;
11578              var $watchers = this.$container.parents().filter(Utils.hasScroll);
11579              $watchers.each(function() {
11580                Utils.StoreData(this, "select2-scroll-position", {
11581                  x: $3(this).scrollLeft(),
11582                  y: $3(this).scrollTop()
11583                });
11584              });
11585              $watchers.on(scrollEvent, function(ev) {
11586                var position = Utils.GetData(this, "select2-scroll-position");
11587                $3(this).scrollTop(position.y);
11588              });
11589              $3(window).on(
11590                scrollEvent + " " + resizeEvent + " " + orientationEvent,
11591                function(e) {
11592                  self2._positionDropdown();
11593                  self2._resizeDropdown();
11594                }
11595              );
11596            };
11597            AttachBody.prototype._detachPositioningHandler = function(decorated, container) {
11598              var scrollEvent = "scroll.select2." + container.id;
11599              var resizeEvent = "resize.select2." + container.id;
11600              var orientationEvent = "orientationchange.select2." + container.id;
11601              var $watchers = this.$container.parents().filter(Utils.hasScroll);
11602              $watchers.off(scrollEvent);
11603              $3(window).off(scrollEvent + " " + resizeEvent + " " + orientationEvent);
11604            };
11605            AttachBody.prototype._positionDropdown = function() {
11606              var $window = $3(window);
11607              var isCurrentlyAbove = this.$dropdown[0].classList.contains("select2-dropdown--above");
11608              var isCurrentlyBelow = this.$dropdown[0].classList.contains("select2-dropdown--below");
11609              var newDirection = null;
11610              var offset = this.$container.offset();
11611              offset.bottom = offset.top + this.$container.outerHeight(false);
11612              var container = {
11613                height: this.$container.outerHeight(false)
11614              };
11615              container.top = offset.top;
11616              container.bottom = offset.top + container.height;
11617              var dropdown = {
11618                height: this.$dropdown.outerHeight(false)
11619              };
11620              var viewport = {
11621                top: $window.scrollTop(),
11622                bottom: $window.scrollTop() + $window.height()
11623              };
11624              var enoughRoomAbove = viewport.top < offset.top - dropdown.height;
11625              var enoughRoomBelow = viewport.bottom > offset.bottom + dropdown.height;
11626              var css = {
11627                left: offset.left,
11628                top: container.bottom
11629              };
11630              var $offsetParent = this.$dropdownParent;
11631              if ($offsetParent.css("position") === "static") {
11632                $offsetParent = $offsetParent.offsetParent();
11633              }
11634              var parentOffset = {
11635                top: 0,
11636                left: 0
11637              };
11638              if ($3.contains(document.body, $offsetParent[0]) || $offsetParent[0].isConnected) {
11639                parentOffset = $offsetParent.offset();
11640              }
11641              css.top -= parentOffset.top;
11642              css.left -= parentOffset.left;
11643              if (!isCurrentlyAbove && !isCurrentlyBelow) {
11644                newDirection = "below";
11645              }
11646              if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {
11647                newDirection = "above";
11648              } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {
11649                newDirection = "below";
11650              }
11651              if (newDirection == "above" || isCurrentlyAbove && newDirection !== "below") {
11652                css.top = container.top - parentOffset.top - dropdown.height;
11653              }
11654              if (newDirection != null) {
11655                this.$dropdown[0].classList.remove("select2-dropdown--below");
11656                this.$dropdown[0].classList.remove("select2-dropdown--above");
11657                this.$dropdown[0].classList.add("select2-dropdown--" + newDirection);
11658                this.$container[0].classList.remove("select2-container--below");
11659                this.$container[0].classList.remove("select2-container--above");
11660                this.$container[0].classList.add("select2-container--" + newDirection);
11661              }
11662              this.$dropdownContainer.css(css);
11663            };
11664            AttachBody.prototype._resizeDropdown = function() {
11665              var css = {
11666                width: this.$container.outerWidth(false) + "px"
11667              };
11668              if (this.options.get("dropdownAutoWidth")) {
11669                css.minWidth = css.width;
11670                css.position = "relative";
11671                css.width = "auto";
11672              }
11673              this.$dropdown.css(css);
11674            };
11675            AttachBody.prototype._showDropdown = function(decorated) {
11676              this.$dropdownContainer.appendTo(this.$dropdownParent);
11677              this._positionDropdown();
11678              this._resizeDropdown();
11679            };
11680            return AttachBody;
11681          });
11682          S22.define("select2/dropdown/minimumResultsForSearch", [], function() {
11683            function countResults(data) {
11684              var count = 0;
11685              for (var d = 0; d < data.length; d++) {
11686                var item = data[d];
11687                if (item.children) {
11688                  count += countResults(item.children);
11689                } else {
11690                  count++;
11691                }
11692              }
11693              return count;
11694            }
11695            function MinimumResultsForSearch(decorated, $element, options, dataAdapter) {
11696              this.minimumResultsForSearch = options.get("minimumResultsForSearch");
11697              if (this.minimumResultsForSearch < 0) {
11698                this.minimumResultsForSearch = Infinity;
11699              }
11700              decorated.call(this, $element, options, dataAdapter);
11701            }
11702            MinimumResultsForSearch.prototype.showSearch = function(decorated, params) {
11703              if (countResults(params.data.results) < this.minimumResultsForSearch) {
11704                return false;
11705              }
11706              return decorated.call(this, params);
11707            };
11708            return MinimumResultsForSearch;
11709          });
11710          S22.define("select2/dropdown/selectOnClose", [
11711            "../utils"
11712          ], function(Utils) {
11713            function SelectOnClose() {
11714            }
11715            SelectOnClose.prototype.bind = function(decorated, container, $container) {
11716              var self2 = this;
11717              decorated.call(this, container, $container);
11718              container.on("close", function(params) {
11719                self2._handleSelectOnClose(params);
11720              });
11721            };
11722            SelectOnClose.prototype._handleSelectOnClose = function(_, params) {
11723              if (params && params.originalSelect2Event != null) {
11724                var event2 = params.originalSelect2Event;
11725                if (event2._type === "select" || event2._type === "unselect") {
11726                  return;
11727                }
11728              }
11729              var $highlightedResults = this.getHighlightedResults();
11730              if ($highlightedResults.length < 1) {
11731                return;
11732              }
11733              var data = Utils.GetData($highlightedResults[0], "data");
11734              if (data.element != null && data.element.selected || data.element == null && data.selected) {
11735                return;
11736              }
11737              this.trigger("select", {
11738                data
11739              });
11740            };
11741            return SelectOnClose;
11742          });
11743          S22.define("select2/dropdown/closeOnSelect", [], function() {
11744            function CloseOnSelect() {
11745            }
11746            CloseOnSelect.prototype.bind = function(decorated, container, $container) {
11747              var self2 = this;
11748              decorated.call(this, container, $container);
11749              container.on("select", function(evt) {
11750                self2._selectTriggered(evt);
11751              });
11752              container.on("unselect", function(evt) {
11753                self2._selectTriggered(evt);
11754              });
11755            };
11756            CloseOnSelect.prototype._selectTriggered = function(_, evt) {
11757              var originalEvent = evt.originalEvent;
11758              if (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey)) {
11759                return;
11760              }
11761              this.trigger("close", {
11762                originalEvent,
11763                originalSelect2Event: evt
11764              });
11765            };
11766            return CloseOnSelect;
11767          });
11768          S22.define("select2/dropdown/dropdownCss", [
11769            "../utils"
11770          ], function(Utils) {
11771            function DropdownCSS() {
11772            }
11773            DropdownCSS.prototype.render = function(decorated) {
11774              var $dropdown = decorated.call(this);
11775              var dropdownCssClass = this.options.get("dropdownCssClass") || "";
11776              if (dropdownCssClass.indexOf(":all:") !== -1) {
11777                dropdownCssClass = dropdownCssClass.replace(":all:", "");
11778                Utils.copyNonInternalCssClasses($dropdown[0], this.$element[0]);
11779              }
11780              $dropdown.addClass(dropdownCssClass);
11781              return $dropdown;
11782            };
11783            return DropdownCSS;
11784          });
11785          S22.define("select2/dropdown/tagsSearchHighlight", [
11786            "../utils"
11787          ], function(Utils) {
11788            function TagsSearchHighlight() {
11789            }
11790            TagsSearchHighlight.prototype.highlightFirstItem = function(decorated) {
11791              var $options = this.$results.find(
11792                ".select2-results__option--selectable:not(.select2-results__option--selected)"
11793              );
11794              if ($options.length > 0) {
11795                var $firstOption = $options.first();
11796                var data = Utils.GetData($firstOption[0], "data");
11797                var firstElement = data.element;
11798                if (firstElement && firstElement.getAttribute) {
11799                  if (firstElement.getAttribute("data-select2-tag") === "true") {
11800                    $firstOption.trigger("mouseenter");
11801                    return;
11802                  }
11803                }
11804              }
11805              decorated.call(this);
11806            };
11807            return TagsSearchHighlight;
11808          });
11809          S22.define("select2/i18n/en", [], function() {
11810            return {
11811              errorLoading: function() {
11812                return "The results could not be loaded.";
11813              },
11814              inputTooLong: function(args) {
11815                var overChars = args.input.length - args.maximum;
11816                var message = "Please delete " + overChars + " character";
11817                if (overChars != 1) {
11818                  message += "s";
11819                }
11820                return message;
11821              },
11822              inputTooShort: function(args) {
11823                var remainingChars = args.minimum - args.input.length;
11824                var message = "Please enter " + remainingChars + " or more characters";
11825                return message;
11826              },
11827              loadingMore: function() {
11828                return "Loading more results\u2026";
11829              },
11830              maximumSelected: function(args) {
11831                var message = "You can only select " + args.maximum + " item";
11832                if (args.maximum != 1) {
11833                  message += "s";
11834                }
11835                return message;
11836              },
11837              noResults: function() {
11838                return "No results found";
11839              },
11840              searching: function() {
11841                return "Searching\u2026";
11842              },
11843              removeAllItems: function() {
11844                return "Remove all items";
11845              },
11846              removeItem: function() {
11847                return "Remove item";
11848              },
11849              search: function() {
11850                return "Search";
11851              }
11852            };
11853          });
11854          S22.define("select2/defaults", [
11855            "jquery",
11856            "./results",
11857            "./selection/single",
11858            "./selection/multiple",
11859            "./selection/placeholder",
11860            "./selection/allowClear",
11861            "./selection/search",
11862            "./selection/selectionCss",
11863            "./selection/eventRelay",
11864            "./utils",
11865            "./translation",
11866            "./diacritics",
11867            "./data/select",
11868            "./data/array",
11869            "./data/ajax",
11870            "./data/tags",
11871            "./data/tokenizer",
11872            "./data/minimumInputLength",
11873            "./data/maximumInputLength",
11874            "./data/maximumSelectionLength",
11875            "./dropdown",
11876            "./dropdown/search",
11877            "./dropdown/hidePlaceholder",
11878            "./dropdown/infiniteScroll",
11879            "./dropdown/attachBody",
11880            "./dropdown/minimumResultsForSearch",
11881            "./dropdown/selectOnClose",
11882            "./dropdown/closeOnSelect",
11883            "./dropdown/dropdownCss",
11884            "./dropdown/tagsSearchHighlight",
11885            "./i18n/en"
11886          ], function($3, ResultsList, SingleSelection, MultipleSelection, Placeholder, AllowClear, SelectionSearch, SelectionCSS, EventRelay, Utils, Translation, DIACRITICS, SelectData, ArrayData, AjaxData, Tags, Tokenizer, MinimumInputLength, MaximumInputLength, MaximumSelectionLength, Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll, AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect, DropdownCSS, TagsSearchHighlight, EnglishTranslation) {
11887            function Defaults() {
11888              this.reset();
11889            }
11890            Defaults.prototype.apply = function(options) {
11891              options = $3.extend(true, {}, this.defaults, options);
11892              if (options.dataAdapter == null) {
11893                if (options.ajax != null) {
11894                  options.dataAdapter = AjaxData;
11895                } else if (options.data != null) {
11896                  options.dataAdapter = ArrayData;
11897                } else {
11898                  options.dataAdapter = SelectData;
11899                }
11900                if (options.minimumInputLength > 0) {
11901                  options.dataAdapter = Utils.Decorate(
11902                    options.dataAdapter,
11903                    MinimumInputLength
11904                  );
11905                }
11906                if (options.maximumInputLength > 0) {
11907                  options.dataAdapter = Utils.Decorate(
11908                    options.dataAdapter,
11909                    MaximumInputLength
11910                  );
11911                }
11912                if (options.maximumSelectionLength > 0) {
11913                  options.dataAdapter = Utils.Decorate(
11914                    options.dataAdapter,
11915                    MaximumSelectionLength
11916                  );
11917                }
11918                if (options.tags) {
11919                  options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);
11920                }
11921                if (options.tokenSeparators != null || options.tokenizer != null) {
11922                  options.dataAdapter = Utils.Decorate(
11923                    options.dataAdapter,
11924                    Tokenizer
11925                  );
11926                }
11927              }
11928              if (options.resultsAdapter == null) {
11929                options.resultsAdapter = ResultsList;
11930                if (options.ajax != null) {
11931                  options.resultsAdapter = Utils.Decorate(
11932                    options.resultsAdapter,
11933                    InfiniteScroll
11934                  );
11935                }
11936                if (options.placeholder != null) {
11937                  options.resultsAdapter = Utils.Decorate(
11938                    options.resultsAdapter,
11939                    HidePlaceholder
11940                  );
11941                }
11942                if (options.selectOnClose) {
11943                  options.resultsAdapter = Utils.Decorate(
11944                    options.resultsAdapter,
11945                    SelectOnClose
11946                  );
11947                }
11948                if (options.tags) {
11949                  options.resultsAdapter = Utils.Decorate(
11950                    options.resultsAdapter,
11951                    TagsSearchHighlight
11952                  );
11953                }
11954              }
11955              if (options.dropdownAdapter == null) {
11956                if (options.multiple) {
11957                  options.dropdownAdapter = Dropdown;
11958                } else {
11959                  var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);
11960                  options.dropdownAdapter = SearchableDropdown;
11961                }
11962                if (options.minimumResultsForSearch !== 0) {
11963                  options.dropdownAdapter = Utils.Decorate(
11964                    options.dropdownAdapter,
11965                    MinimumResultsForSearch
11966                  );
11967                }
11968                if (options.closeOnSelect) {
11969                  options.dropdownAdapter = Utils.Decorate(
11970                    options.dropdownAdapter,
11971                    CloseOnSelect
11972                  );
11973                }
11974                if (options.dropdownCssClass != null) {
11975                  options.dropdownAdapter = Utils.Decorate(
11976                    options.dropdownAdapter,
11977                    DropdownCSS
11978                  );
11979                }
11980                options.dropdownAdapter = Utils.Decorate(
11981                  options.dropdownAdapter,
11982                  AttachBody
11983                );
11984              }
11985              if (options.selectionAdapter == null) {
11986                if (options.multiple) {
11987                  options.selectionAdapter = MultipleSelection;
11988                } else {
11989                  options.selectionAdapter = SingleSelection;
11990                }
11991                if (options.placeholder != null) {
11992                  options.selectionAdapter = Utils.Decorate(
11993                    options.selectionAdapter,
11994                    Placeholder
11995                  );
11996                }
11997                if (options.allowClear) {
11998                  options.selectionAdapter = Utils.Decorate(
11999                    options.selectionAdapter,
12000                    AllowClear
12001                  );
12002                }
12003                if (options.multiple) {
12004                  options.selectionAdapter = Utils.Decorate(
12005                    options.selectionAdapter,
12006                    SelectionSearch
12007                  );
12008                }
12009                if (options.selectionCssClass != null) {
12010                  options.selectionAdapter = Utils.Decorate(
12011                    options.selectionAdapter,
12012                    SelectionCSS
12013                  );
12014                }
12015                options.selectionAdapter = Utils.Decorate(
12016                  options.selectionAdapter,
12017                  EventRelay
12018                );
12019              }
12020              options.language = this._resolveLanguage(options.language);
12021              options.language.push("en");
12022              var uniqueLanguages = [];
12023              for (var l = 0; l < options.language.length; l++) {
12024                var language = options.language[l];
12025                if (uniqueLanguages.indexOf(language) === -1) {
12026                  uniqueLanguages.push(language);
12027                }
12028              }
12029              options.language = uniqueLanguages;
12030              options.translations = this._processTranslations(
12031                options.language,
12032                options.debug
12033              );
12034              return options;
12035            };
12036            Defaults.prototype.reset = function() {
12037              function stripDiacritics(text) {
12038                function match(a) {
12039                  return DIACRITICS[a] || a;
12040                }
12041                return text.replace(/[^\u0000-\u007E]/g, match);
12042              }
12043              function matcher(params, data) {
12044                if (params.term == null || params.term.trim() === "") {
12045                  return data;
12046                }
12047                if (data.children && data.children.length > 0) {
12048                  var match = $3.extend(true, {}, data);
12049                  for (var c = data.children.length - 1; c >= 0; c--) {
12050                    var child = data.children[c];
12051                    var matches = matcher(params, child);
12052                    if (matches == null) {
12053                      match.children.splice(c, 1);
12054                    }
12055                  }
12056                  if (match.children.length > 0) {
12057                    return match;
12058                  }
12059                  return matcher(params, match);
12060                }
12061                var original = stripDiacritics(data.text).toUpperCase();
12062                var term = stripDiacritics(params.term).toUpperCase();
12063                if (original.indexOf(term) > -1) {
12064                  return data;
12065                }
12066                return null;
12067              }
12068              this.defaults = {
12069                amdLanguageBase: "./i18n/",
12070                autocomplete: "off",
12071                closeOnSelect: true,
12072                debug: false,
12073                dropdownAutoWidth: false,
12074                escapeMarkup: Utils.escapeMarkup,
12075                language: {},
12076                matcher,
12077                minimumInputLength: 0,
12078                maximumInputLength: 0,
12079                maximumSelectionLength: 0,
12080                minimumResultsForSearch: 0,
12081                selectOnClose: false,
12082                scrollAfterSelect: false,
12083                sorter: function(data) {
12084                  return data;
12085                },
12086                templateResult: function(result) {
12087                  return result.text;
12088                },
12089                templateSelection: function(selection) {
12090                  return selection.text;
12091                },
12092                theme: "default",
12093                width: "resolve"
12094              };
12095            };
12096            Defaults.prototype.applyFromElement = function(options, $element) {
12097              var optionLanguage = options.language;
12098              var defaultLanguage = this.defaults.language;
12099              var elementLanguage = $element.prop("lang");
12100              var parentLanguage = $element.closest("[lang]").prop("lang");
12101              var languages = Array.prototype.concat.call(
12102                this._resolveLanguage(elementLanguage),
12103                this._resolveLanguage(optionLanguage),
12104                this._resolveLanguage(defaultLanguage),
12105                this._resolveLanguage(parentLanguage)
12106              );
12107              options.language = languages;
12108              return options;
12109            };
12110            Defaults.prototype._resolveLanguage = function(language) {
12111              if (!language) {
12112                return [];
12113              }
12114              if ($3.isEmptyObject(language)) {
12115                return [];
12116              }
12117              if ($3.isPlainObject(language)) {
12118                return [language];
12119              }
12120              var languages;
12121              if (!Array.isArray(language)) {
12122                languages = [language];
12123              } else {
12124                languages = language;
12125              }
12126              var resolvedLanguages = [];
12127              for (var l = 0; l < languages.length; l++) {
12128                resolvedLanguages.push(languages[l]);
12129                if (typeof languages[l] === "string" && languages[l].indexOf("-") > 0) {
12130                  var languageParts = languages[l].split("-");
12131                  var baseLanguage = languageParts[0];
12132                  resolvedLanguages.push(baseLanguage);
12133                }
12134              }
12135              return resolvedLanguages;
12136            };
12137            Defaults.prototype._processTranslations = function(languages, debug) {
12138              var translations2 = new Translation();
12139              for (var l = 0; l < languages.length; l++) {
12140                var languageData = new Translation();
12141                var language = languages[l];
12142                if (typeof language === "string") {
12143                  try {
12144                    languageData = Translation.loadPath(language);
12145                  } catch (e) {
12146                    try {
12147                      language = this.defaults.amdLanguageBase + language;
12148                      languageData = Translation.loadPath(language);
12149                    } catch (ex) {
12150                      if (debug && window.console && console.warn) {
12151                        console.warn(
12152                          'Select2: The language file for "' + language + '" could not be automatically loaded. A fallback will be used instead.'
12153                        );
12154                      }
12155                    }
12156                  }
12157                } else if ($3.isPlainObject(language)) {
12158                  languageData = new Translation(language);
12159                } else {
12160                  languageData = language;
12161                }
12162                translations2.extend(languageData);
12163              }
12164              return translations2;
12165            };
12166            Defaults.prototype.set = function(key, value) {
12167              var camelKey = $3.camelCase(key);
12168              var data = {};
12169              data[camelKey] = value;
12170              var convertedData = Utils._convertData(data);
12171              $3.extend(true, this.defaults, convertedData);
12172            };
12173            var defaults = new Defaults();
12174            return defaults;
12175          });
12176          S22.define("select2/options", [
12177            "jquery",
12178            "./defaults",
12179            "./utils"
12180          ], function($3, Defaults, Utils) {
12181            function Options(options, $element) {
12182              this.options = options;
12183              if ($element != null) {
12184                this.fromElement($element);
12185              }
12186              if ($element != null) {
12187                this.options = Defaults.applyFromElement(this.options, $element);
12188              }
12189              this.options = Defaults.apply(this.options);
12190            }
12191            Options.prototype.fromElement = function($e) {
12192              var excludedData = ["select2"];
12193              if (this.options.multiple == null) {
12194                this.options.multiple = $e.prop("multiple");
12195              }
12196              if (this.options.disabled == null) {
12197                this.options.disabled = $e.prop("disabled");
12198              }
12199              if (this.options.autocomplete == null && $e.prop("autocomplete")) {
12200                this.options.autocomplete = $e.prop("autocomplete");
12201              }
12202              if (this.options.dir == null) {
12203                if ($e.prop("dir")) {
12204                  this.options.dir = $e.prop("dir");
12205                } else if ($e.closest("[dir]").prop("dir")) {
12206                  this.options.dir = $e.closest("[dir]").prop("dir");
12207                } else {
12208                  this.options.dir = "ltr";
12209                }
12210              }
12211              $e.prop("disabled", this.options.disabled);
12212              $e.prop("multiple", this.options.multiple);
12213              if (Utils.GetData($e[0], "select2Tags")) {
12214                if (this.options.debug && window.console && console.warn) {
12215                  console.warn(
12216                    'Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'
12217                  );
12218                }
12219                Utils.StoreData($e[0], "data", Utils.GetData($e[0], "select2Tags"));
12220                Utils.StoreData($e[0], "tags", true);
12221              }
12222              if (Utils.GetData($e[0], "ajaxUrl")) {
12223                if (this.options.debug && window.console && console.warn) {
12224                  console.warn(
12225                    "Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."
12226                  );
12227                }
12228                $e.attr("ajax--url", Utils.GetData($e[0], "ajaxUrl"));
12229                Utils.StoreData($e[0], "ajax-Url", Utils.GetData($e[0], "ajaxUrl"));
12230              }
12231              var dataset = {};
12232              function upperCaseLetter(_, letter) {
12233                return letter.toUpperCase();
12234              }
12235              for (var attr = 0; attr < $e[0].attributes.length; attr++) {
12236                var attributeName = $e[0].attributes[attr].name;
12237                var prefix = "data-";
12238                if (attributeName.substr(0, prefix.length) == prefix) {
12239                  var dataName = attributeName.substring(prefix.length);
12240                  var dataValue = Utils.GetData($e[0], dataName);
12241                  var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter);
12242                  dataset[camelDataName] = dataValue;
12243                }
12244              }
12245              if ($3.fn.jquery && $3.fn.jquery.substr(0, 2) == "1." && $e[0].dataset) {
12246                dataset = $3.extend(true, {}, $e[0].dataset, dataset);
12247              }
12248              var data = $3.extend(true, {}, Utils.GetData($e[0]), dataset);
12249              data = Utils._convertData(data);
12250              for (var key in data) {
12251                if (excludedData.indexOf(key) > -1) {
12252                  continue;
12253                }
12254                if ($3.isPlainObject(this.options[key])) {
12255                  $3.extend(this.options[key], data[key]);
12256                } else {
12257                  this.options[key] = data[key];
12258                }
12259              }
12260              return this;
12261            };
12262            Options.prototype.get = function(key) {
12263              return this.options[key];
12264            };
12265            Options.prototype.set = function(key, val) {
12266              this.options[key] = val;
12267            };
12268            return Options;
12269          });
12270          S22.define("select2/core", [
12271            "jquery",
12272            "./options",
12273            "./utils",
12274            "./keys"
12275          ], function($3, Options, Utils, KEYS) {
12276            var Select2 = function($element, options) {
12277              if (Utils.GetData($element[0], "select2") != null) {
12278                Utils.GetData($element[0], "select2").destroy();
12279              }
12280              this.$element = $element;
12281              this.id = this._generateId($element);
12282              options = options || {};
12283              this.options = new Options(options, $element);
12284              Select2.__super__.constructor.call(this);
12285              var tabindex = $element.attr("tabindex") || 0;
12286              Utils.StoreData($element[0], "old-tabindex", tabindex);
12287              $element.attr("tabindex", "-1");
12288              var DataAdapter = this.options.get("dataAdapter");
12289              this.dataAdapter = new DataAdapter($element, this.options);
12290              var $container = this.render();
12291              this._placeContainer($container);
12292              var SelectionAdapter = this.options.get("selectionAdapter");
12293              this.selection = new SelectionAdapter($element, this.options);
12294              this.$selection = this.selection.render();
12295              this.selection.position(this.$selection, $container);
12296              var DropdownAdapter = this.options.get("dropdownAdapter");
12297              this.dropdown = new DropdownAdapter($element, this.options);
12298              this.$dropdown = this.dropdown.render();
12299              this.dropdown.position(this.$dropdown, $container);
12300              var ResultsAdapter = this.options.get("resultsAdapter");
12301              this.results = new ResultsAdapter($element, this.options, this.dataAdapter);
12302              this.$results = this.results.render();
12303              this.results.position(this.$results, this.$dropdown);
12304              var self2 = this;
12305              this._bindAdapters();
12306              this._registerDomEvents();
12307              this._registerDataEvents();
12308              this._registerSelectionEvents();
12309              this._registerDropdownEvents();
12310              this._registerResultsEvents();
12311              this._registerEvents();
12312              this.dataAdapter.current(function(initialData) {
12313                self2.trigger("selection:update", {
12314                  data: initialData
12315                });
12316              });
12317              $element[0].classList.add("select2-hidden-accessible");
12318              $element.attr("aria-hidden", "true");
12319              this._syncAttributes();
12320              Utils.StoreData($element[0], "select2", this);
12321              $element.data("select2", this);
12322            };
12323            Utils.Extend(Select2, Utils.Observable);
12324            Select2.prototype._generateId = function($element) {
12325              var id = "";
12326              if ($element.attr("id") != null) {
12327                id = $element.attr("id");
12328              } else if ($element.attr("name") != null) {
12329                id = $element.attr("name") + "-" + Utils.generateChars(2);
12330              } else {
12331                id = Utils.generateChars(4);
12332              }
12333              id = id.replace(/(:|\.|\[|\]|,)/g, "");
12334              id = "select2-" + id;
12335              return id;
12336            };
12337            Select2.prototype._placeContainer = function($container) {
12338              $container.insertAfter(this.$element);
12339              var width = this._resolveWidth(this.$element, this.options.get("width"));
12340              if (width != null) {
12341                $container.css("width", width);
12342              }
12343            };
12344            Select2.prototype._resolveWidth = function($element, method) {
12345              var WIDTH = /^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;
12346              if (method == "resolve") {
12347                var styleWidth = this._resolveWidth($element, "style");
12348                if (styleWidth != null) {
12349                  return styleWidth;
12350                }
12351                return this._resolveWidth($element, "element");
12352              }
12353              if (method == "element") {
12354                var elementWidth = $element.outerWidth(false);
12355                if (elementWidth <= 0) {
12356                  return "auto";
12357                }
12358                return elementWidth + "px";
12359              }
12360              if (method == "style") {
12361                var style = $element.attr("style");
12362                if (typeof style !== "string") {
12363                  return null;
12364                }
12365                var attrs = style.split(";");
12366                for (var i = 0, l = attrs.length; i < l; i = i + 1) {
12367                  var attr = attrs[i].replace(/\s/g, "");
12368                  var matches = attr.match(WIDTH);
12369                  if (matches !== null && matches.length >= 1) {
12370                    return matches[1];
12371                  }
12372                }
12373                return null;
12374              }
12375              if (method == "computedstyle") {
12376                var computedStyle = window.getComputedStyle($element[0]);
12377                return computedStyle.width;
12378              }
12379              return method;
12380            };
12381            Select2.prototype._bindAdapters = function() {
12382              this.dataAdapter.bind(this, this.$container);
12383              this.selection.bind(this, this.$container);
12384              this.dropdown.bind(this, this.$container);
12385              this.results.bind(this, this.$container);
12386            };
12387            Select2.prototype._registerDomEvents = function() {
12388              var self2 = this;
12389              this.$element.on("change.select2", function() {
12390                self2.dataAdapter.current(function(data) {
12391                  self2.trigger("selection:update", {
12392                    data
12393                  });
12394                });
12395              });
12396              this.$element.on("focus.select2", function(evt) {
12397                self2.trigger("focus", evt);
12398              });
12399              this._syncA = Utils.bind(this._syncAttributes, this);
12400              this._syncS = Utils.bind(this._syncSubtree, this);
12401              this._observer = new window.MutationObserver(function(mutations) {
12402                self2._syncA();
12403                self2._syncS(mutations);
12404              });
12405              this._observer.observe(this.$element[0], {
12406                attributes: true,
12407                childList: true,
12408                subtree: false
12409              });
12410            };
12411            Select2.prototype._registerDataEvents = function() {
12412              var self2 = this;
12413              this.dataAdapter.on("*", function(name, params) {
12414                self2.trigger(name, params);
12415              });
12416            };
12417            Select2.prototype._registerSelectionEvents = function() {
12418              var self2 = this;
12419              var nonRelayEvents = ["toggle", "focus"];
12420              this.selection.on("toggle", function() {
12421                self2.toggleDropdown();
12422              });
12423              this.selection.on("focus", function(params) {
12424                self2.focus(params);
12425              });
12426              this.selection.on("*", function(name, params) {
12427                if (nonRelayEvents.indexOf(name) !== -1) {
12428                  return;
12429                }
12430                self2.trigger(name, params);
12431              });
12432            };
12433            Select2.prototype._registerDropdownEvents = function() {
12434              var self2 = this;
12435              this.dropdown.on("*", function(name, params) {
12436                self2.trigger(name, params);
12437              });
12438            };
12439            Select2.prototype._registerResultsEvents = function() {
12440              var self2 = this;
12441              this.results.on("*", function(name, params) {
12442                self2.trigger(name, params);
12443              });
12444            };
12445            Select2.prototype._registerEvents = function() {
12446              var self2 = this;
12447              this.on("open", function() {
12448                self2.$container[0].classList.add("select2-container--open");
12449              });
12450              this.on("close", function() {
12451                self2.$container[0].classList.remove("select2-container--open");
12452              });
12453              this.on("enable", function() {
12454                self2.$container[0].classList.remove("select2-container--disabled");
12455              });
12456              this.on("disable", function() {
12457                self2.$container[0].classList.add("select2-container--disabled");
12458              });
12459              this.on("blur", function() {
12460                self2.$container[0].classList.remove("select2-container--focus");
12461              });
12462              this.on("query", function(params) {
12463                if (!self2.isOpen()) {
12464                  self2.trigger("open", {});
12465                }
12466                this.dataAdapter.query(params, function(data) {
12467                  self2.trigger("results:all", {
12468                    data,
12469                    query: params
12470                  });
12471                });
12472              });
12473              this.on("query:append", function(params) {
12474                this.dataAdapter.query(params, function(data) {
12475                  self2.trigger("results:append", {
12476                    data,
12477                    query: params
12478                  });
12479                });
12480              });
12481              this.on("keypress", function(evt) {
12482                var key = evt.which;
12483                if (self2.isOpen()) {
12484                  if (key === KEYS.ESC || key === KEYS.UP && evt.altKey) {
12485                    self2.close(evt);
12486                    evt.preventDefault();
12487                  } else if (key === KEYS.ENTER || key === KEYS.TAB) {
12488                    self2.trigger("results:select", {});
12489                    evt.preventDefault();
12490                  } else if (key === KEYS.SPACE && evt.ctrlKey) {
12491                    self2.trigger("results:toggle", {});
12492                    evt.preventDefault();
12493                  } else if (key === KEYS.UP) {
12494                    self2.trigger("results:previous", {});
12495                    evt.preventDefault();
12496                  } else if (key === KEYS.DOWN) {
12497                    self2.trigger("results:next", {});
12498                    evt.preventDefault();
12499                  }
12500                } else {
12501                  if (key === KEYS.ENTER || key === KEYS.SPACE || key === KEYS.DOWN && evt.altKey) {
12502                    self2.open();
12503                    evt.preventDefault();
12504                  }
12505                }
12506              });
12507            };
12508            Select2.prototype._syncAttributes = function() {
12509              this.options.set("disabled", this.$element.prop("disabled"));
12510              if (this.isDisabled()) {
12511                if (this.isOpen()) {
12512                  this.close();
12513                }
12514                this.trigger("disable", {});
12515              } else {
12516                this.trigger("enable", {});
12517              }
12518            };
12519            Select2.prototype._isChangeMutation = function(mutations) {
12520              var self2 = this;
12521              if (mutations.addedNodes && mutations.addedNodes.length > 0) {
12522                for (var n = 0; n < mutations.addedNodes.length; n++) {
12523                  var node = mutations.addedNodes[n];
12524                  if (node.selected) {
12525                    return true;
12526                  }
12527                }
12528              } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {
12529                return true;
12530              } else if (Array.isArray(mutations)) {
12531                return mutations.some(function(mutation) {
12532                  return self2._isChangeMutation(mutation);
12533                });
12534              }
12535              return false;
12536            };
12537            Select2.prototype._syncSubtree = function(mutations) {
12538              var changed = this._isChangeMutation(mutations);
12539              var self2 = this;
12540              if (changed) {
12541                this.dataAdapter.current(function(currentData) {
12542                  self2.trigger("selection:update", {
12543                    data: currentData
12544                  });
12545                });
12546              }
12547            };
12548            Select2.prototype.trigger = function(name, args) {
12549              var actualTrigger = Select2.__super__.trigger;
12550              var preTriggerMap = {
12551                "open": "opening",
12552                "close": "closing",
12553                "select": "selecting",
12554                "unselect": "unselecting",
12555                "clear": "clearing"
12556              };
12557              if (args === void 0) {
12558                args = {};
12559              }
12560              if (name in preTriggerMap) {
12561                var preTriggerName = preTriggerMap[name];
12562                var preTriggerArgs = {
12563                  prevented: false,
12564                  name,
12565                  args
12566                };
12567                actualTrigger.call(this, preTriggerName, preTriggerArgs);
12568                if (preTriggerArgs.prevented) {
12569                  args.prevented = true;
12570                  return;
12571                }
12572              }
12573              actualTrigger.call(this, name, args);
12574            };
12575            Select2.prototype.toggleDropdown = function() {
12576              if (this.isDisabled()) {
12577                return;
12578              }
12579              if (this.isOpen()) {
12580                this.close();
12581              } else {
12582                this.open();
12583              }
12584            };
12585            Select2.prototype.open = function() {
12586              if (this.isOpen()) {
12587                return;
12588              }
12589              if (this.isDisabled()) {
12590                return;
12591              }
12592              this.trigger("query", {});
12593            };
12594            Select2.prototype.close = function(evt) {
12595              if (!this.isOpen()) {
12596                return;
12597              }
12598              this.trigger("close", { originalEvent: evt });
12599            };
12600            Select2.prototype.isEnabled = function() {
12601              return !this.isDisabled();
12602            };
12603            Select2.prototype.isDisabled = function() {
12604              return this.options.get("disabled");
12605            };
12606            Select2.prototype.isOpen = function() {
12607              return this.$container[0].classList.contains("select2-container--open");
12608            };
12609            Select2.prototype.hasFocus = function() {
12610              return this.$container[0].classList.contains("select2-container--focus");
12611            };
12612            Select2.prototype.focus = function(data) {
12613              if (this.hasFocus()) {
12614                return;
12615              }
12616              this.$container[0].classList.add("select2-container--focus");
12617              this.trigger("focus", {});
12618            };
12619            Select2.prototype.enable = function(args) {
12620              if (this.options.get("debug") && window.console && console.warn) {
12621                console.warn(
12622                  'Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'
12623                );
12624              }
12625              if (args == null || args.length === 0) {
12626                args = [true];
12627              }
12628              var disabled = !args[0];
12629              this.$element.prop("disabled", disabled);
12630            };
12631            Select2.prototype.data = function() {
12632              if (this.options.get("debug") && arguments.length > 0 && window.console && console.warn) {
12633                console.warn(
12634                  'Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.'
12635                );
12636              }
12637              var data = [];
12638              this.dataAdapter.current(function(currentData) {
12639                data = currentData;
12640              });
12641              return data;
12642            };
12643            Select2.prototype.val = function(args) {
12644              if (this.options.get("debug") && window.console && console.warn) {
12645                console.warn(
12646                  'Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'
12647                );
12648              }
12649              if (args == null || args.length === 0) {
12650                return this.$element.val();
12651              }
12652              var newVal = args[0];
12653              if (Array.isArray(newVal)) {
12654                newVal = newVal.map(function(obj) {
12655                  return obj.toString();
12656                });
12657              }
12658              this.$element.val(newVal).trigger("input").trigger("change");
12659            };
12660            Select2.prototype.destroy = function() {
12661              Utils.RemoveData(this.$container[0]);
12662              this.$container.remove();
12663              this._observer.disconnect();
12664              this._observer = null;
12665              this._syncA = null;
12666              this._syncS = null;
12667              this.$element.off(".select2");
12668              this.$element.attr(
12669                "tabindex",
12670                Utils.GetData(this.$element[0], "old-tabindex")
12671              );
12672              this.$element[0].classList.remove("select2-hidden-accessible");
12673              this.$element.attr("aria-hidden", "false");
12674              Utils.RemoveData(this.$element[0]);
12675              this.$element.removeData("select2");
12676              this.dataAdapter.destroy();
12677              this.selection.destroy();
12678              this.dropdown.destroy();
12679              this.results.destroy();
12680              this.dataAdapter = null;
12681              this.selection = null;
12682              this.dropdown = null;
12683              this.results = null;
12684            };
12685            Select2.prototype.render = function() {
12686              var $container = $3(
12687                '<span class="select2 select2-container"><span class="selection"></span><span class="dropdown-wrapper" aria-hidden="true"></span></span>'
12688              );
12689              $container.attr("dir", this.options.get("dir"));
12690              this.$container = $container;
12691              this.$container[0].classList.add("select2-container--" + this.options.get("theme"));
12692              Utils.StoreData($container[0], "element", this.$element);
12693              return $container;
12694            };
12695            return Select2;
12696          });
12697          S22.define("jquery-mousewheel", [
12698            "jquery"
12699          ], function($3) {
12700            return $3;
12701          });
12702          S22.define("jquery.select2", [
12703            "jquery",
12704            "jquery-mousewheel",
12705            "./select2/core",
12706            "./select2/defaults",
12707            "./select2/utils"
12708          ], function($3, _, Select2, Defaults, Utils) {
12709            if ($3.fn.select2 == null) {
12710              var thisMethods = ["open", "close", "destroy"];
12711              $3.fn.select2 = function(options) {
12712                options = options || {};
12713                if (typeof options === "object") {
12714                  this.each(function() {
12715                    var instanceOptions = $3.extend(true, {}, options);
12716                    var instance = new Select2($3(this), instanceOptions);
12717                  });
12718                  return this;
12719                } else if (typeof options === "string") {
12720                  var ret;
12721                  var args = Array.prototype.slice.call(arguments, 1);
12722                  this.each(function() {
12723                    var instance = Utils.GetData(this, "select2");
12724                    if (instance == null && window.console && console.error) {
12725                      console.error(
12726                        "The select2('" + options + "') method was called on an element that is not using Select2."
12727                      );
12728                    }
12729                    ret = instance[options].apply(instance, args);
12730                  });
12731                  if (thisMethods.indexOf(options) > -1) {
12732                    return this;
12733                  }
12734                  return ret;
12735                } else {
12736                  throw new Error("Invalid arguments for Select2: " + options);
12737                }
12738              };
12739            }
12740            if ($3.fn.select2.defaults == null) {
12741              $3.fn.select2.defaults = Defaults;
12742            }
12743            return Select2;
12744          });
12745          return {
12746            define: S22.define,
12747            require: S22.require
12748          };
12749        })();
12750        var select22 = S2.require("jquery.select2");
12751        jQuery2.fn.select2.amd = S2;
12752        return select22;
12753      });
12754    }
12755  });
12756
12757  
vendor: 161,460 bytes, lines 12757-16926
12757// node_modules/moment/moment.js
12758  var require_moment = __commonJS({
12759    "node_modules/moment/moment.js"(exports, module) {
12760      init_esbuild_shims();
12761      (function(global2, factory) {
12762        typeof exports === "object" && typeof module !== "undefined" ? module.exports = factory() : typeof define === "function" && define.amd ? define(factory) : global2.moment = factory();
12763      })(exports, (function() {
12764        "use strict";
12765        var hookCallback;
12766        function hooks() {
12767          return hookCallback.apply(null, arguments);
12768        }
12769        function setHookCallback(callback) {
12770          hookCallback = callback;
12771        }
12772        function isArray(input) {
12773          return input instanceof Array || Object.prototype.toString.call(input) === "[object Array]";
12774        }
12775        function isObject(input) {
12776          return input != null && Object.prototype.toString.call(input) === "[object Object]";
12777        }
12778        function hasOwnProp(a, b) {
12779          return Object.prototype.hasOwnProperty.call(a, b);
12780        }
12781        function isObjectEmpty(obj) {
12782          if (Object.getOwnPropertyNames) {
12783            return Object.getOwnPropertyNames(obj).length === 0;
12784          } else {
12785            var k;
12786            for (k in obj) {
12787              if (hasOwnProp(obj, k)) {
12788                return false;
12789              }
12790            }
12791            return true;
12792          }
12793        }
12794        function isUndefined(input) {
12795          return input === void 0;
12796        }
12797        function isNumber(input) {
12798          return typeof input === "number" || Object.prototype.toString.call(input) === "[object Number]";
12799        }
12800        function isDate(input) {
12801          return input instanceof Date || Object.prototype.toString.call(input) === "[object Date]";
12802        }
12803        function map(arr, fn) {
12804          var res = [], i, arrLen = arr.length;
12805          for (i = 0; i < arrLen; ++i) {
12806            res.push(fn(arr[i], i));
12807          }
12808          return res;
12809        }
12810        function extend(a, b) {
12811          for (var i in b) {
12812            if (hasOwnProp(b, i)) {
12813              a[i] = b[i];
12814            }
12815          }
12816          if (hasOwnProp(b, "toString")) {
12817            a.toString = b.toString;
12818          }
12819          if (hasOwnProp(b, "valueOf")) {
12820            a.valueOf = b.valueOf;
12821          }
12822          return a;
12823        }
12824        function createUTC(input, format2, locale2, strict) {
12825          return createLocalOrUTC(input, format2, locale2, strict, true).utc();
12826        }
12827        function defaultParsingFlags() {
12828          return {
12829            empty: false,
12830            unusedTokens: [],
12831            unusedInput: [],
12832            overflow: -2,
12833            charsLeftOver: 0,
12834            nullInput: false,
12835            invalidEra: null,
12836            invalidMonth: null,
12837            invalidOffset: null,
12838            invalidFormat: false,
12839            userInvalidated: false,
12840            iso: false,
12841            parsedDateParts: [],
12842            era: null,
12843            meridiem: null,
12844            rfc2822: false,
12845            weekdayMismatch: false
12846          };
12847        }
12848        function getParsingFlags(m) {
12849          if (m._pf == null) {
12850            m._pf = defaultParsingFlags();
12851          }
12852          return m._pf;
12853        }
12854        var some;
12855        if (Array.prototype.some) {
12856          some = Array.prototype.some;
12857        } else {
12858          some = function(fun) {
12859            var t2 = Object(this), len = t2.length >>> 0, i;
12860            for (i = 0; i < len; i++) {
12861              if (i in t2 && fun.call(this, t2[i], i, t2)) {
12862                return true;
12863              }
12864            }
12865            return false;
12866          };
12867        }
12868        function isValid$2(m) {
12869          var flags = null, parsedParts = false, isNowValid = m._d && !isNaN(m._d.getTime());
12870          if (isNowValid) {
12871            flags = getParsingFlags(m);
12872            parsedParts = some.call(flags.parsedDateParts, function(i) {
12873              return i != null;
12874            });
12875            isNowValid = flags.overflow < 0 && !flags.empty && !flags.invalidEra && !flags.invalidMonth && !flags.invalidOffset && !flags.invalidWeekday && !flags.weekdayMismatch && !flags.nullInput && !flags.invalidFormat && !flags.userInvalidated && (!flags.meridiem || flags.meridiem && parsedParts);
12876            if (m._strict) {
12877              isNowValid = isNowValid && flags.charsLeftOver === 0 && flags.unusedTokens.length === 0 && flags.bigHour === void 0;
12878            }
12879          }
12880          if (Object.isFrozen == null || !Object.isFrozen(m)) {
12881            m._isValid = isNowValid;
12882          } else {
12883            return isNowValid;
12884          }
12885          return m._isValid;
12886        }
12887        function createInvalid$1(flags) {
12888          var m = createUTC(NaN);
12889          if (flags != null) {
12890            extend(getParsingFlags(m), flags);
12891          } else {
12892            getParsingFlags(m).userInvalidated = true;
12893          }
12894          return m;
12895        }
12896        var momentProperties = hooks.momentProperties = [], updateInProgress = false;
12897        function copyConfig(to2, from2) {
12898          var i, prop, val, momentPropertiesLen = momentProperties.length;
12899          if (!isUndefined(from2._isAMomentObject)) {
12900            to2._isAMomentObject = from2._isAMomentObject;
12901          }
12902          if (!isUndefined(from2._i)) {
12903            to2._i = from2._i;
12904          }
12905          if (!isUndefined(from2._f)) {
12906            to2._f = from2._f;
12907          }
12908          if (!isUndefined(from2._l)) {
12909            to2._l = from2._l;
12910          }
12911          if (!isUndefined(from2._strict)) {
12912            to2._strict = from2._strict;
12913          }
12914          if (!isUndefined(from2._tzm)) {
12915            to2._tzm = from2._tzm;
12916          }
12917          if (!isUndefined(from2._isUTC)) {
12918            to2._isUTC = from2._isUTC;
12919          }
12920          if (!isUndefined(from2._offset)) {
12921            to2._offset = from2._offset;
12922          }
12923          if (!isUndefined(from2._pf)) {
12924            to2._pf = getParsingFlags(from2);
12925          }
12926          if (!isUndefined(from2._locale)) {
12927            to2._locale = from2._locale;
12928          }
12929          if (momentPropertiesLen > 0) {
12930            for (i = 0; i < momentPropertiesLen; i++) {
12931              prop = momentProperties[i];
12932              val = from2[prop];
12933              if (!isUndefined(val)) {
12934                to2[prop] = val;
12935              }
12936            }
12937          }
12938          return to2;
12939        }
12940        function Moment(config) {
12941          copyConfig(this, config);
12942          this._d = new Date(config._d != null ? config._d.getTime() : NaN);
12943          if (!this.isValid()) {
12944            this._d = /* @__PURE__ */ new Date(NaN);
12945          }
12946          if (updateInProgress === false) {
12947            updateInProgress = true;
12948            hooks.updateOffset(this);
12949            updateInProgress = false;
12950          }
12951        }
12952        function isMoment(obj) {
12953          return obj instanceof Moment || obj != null && obj._isAMomentObject != null;
12954        }
12955        function warn(msg) {
12956          if (hooks.suppressDeprecationWarnings === false && typeof console !== "undefined" && console.warn) {
12957            console.warn("Deprecation warning: " + msg);
12958          }
12959        }
12960        function deprecate(msg, fn) {
12961          var firstTime = true;
12962          return extend(function() {
12963            if (hooks.deprecationHandler != null) {
12964              hooks.deprecationHandler(null, msg);
12965            }
12966            if (firstTime) {
12967              var args = [], arg, i, key, argLen = arguments.length;
12968              for (i = 0; i < argLen; i++) {
12969                arg = "";
12970                if (typeof arguments[i] === "object") {
12971                  arg += "\n[" + i + "] ";
12972                  for (key in arguments[0]) {
12973                    if (hasOwnProp(arguments[0], key)) {
12974                      arg += key + ": " + arguments[0][key] + ", ";
12975                    }
12976                  }
12977                  arg = arg.slice(0, -2);
12978                } else {
12979                  arg = arguments[i];
12980                }
12981                args.push(arg);
12982              }
12983              warn(
12984                msg + "\nArguments: " + Array.prototype.slice.call(args).join("") + "\n" + new Error().stack
12985              );
12986              firstTime = false;
12987            }
12988            return fn.apply(this, arguments);
12989          }, fn);
12990        }
12991        var deprecations = {};
12992        function deprecateSimple(name, msg) {
12993          if (hooks.deprecationHandler != null) {
12994            hooks.deprecationHandler(name, msg);
12995          }
12996          if (!deprecations[name]) {
12997            warn(msg + "\n" + new Error().stack);
12998            deprecations[name] = true;
12999          }
13000        }
13001        hooks.suppressDeprecationWarnings = false;
13002        hooks.deprecationHandler = null;
13003        function isFunction(input) {
13004          return typeof Function !== "undefined" && input instanceof Function || Object.prototype.toString.call(input) === "[object Function]";
13005        }
13006        var aliases = {
13007          D: "date",
13008          dates: "date",
13009          date: "date",
13010          d: "day",
13011          days: "day",
13012          day: "day",
13013          e: "weekday",
13014          weekdays: "weekday",
13015          weekday: "weekday",
13016          E: "isoWeekday",
13017          isoweekdays: "isoWeekday",
13018          isoweekday: "isoWeekday",
13019          DDD: "dayOfYear",
13020          dayofyears: "dayOfYear",
13021          dayofyear: "dayOfYear",
13022          h: "hour",
13023          hours: "hour",
13024          hour: "hour",
13025          ms: "millisecond",
13026          milliseconds: "millisecond",
13027          millisecond: "millisecond",
13028          m: "minute",
13029          minutes: "minute",
13030          minute: "minute",
13031          M: "month",
13032          months: "month",
13033          month: "month",
13034          Q: "quarter",
13035          quarters: "quarter",
13036          quarter: "quarter",
13037          s: "second",
13038          seconds: "second",
13039          second: "second",
13040          gg: "weekYear",
13041          weekyears: "weekYear",
13042          weekyear: "weekYear",
13043          GG: "isoWeekYear",
13044          isoweekyears: "isoWeekYear",
13045          isoweekyear: "isoWeekYear",
13046          w: "week",
13047          weeks: "week",
13048          week: "week",
13049          W: "isoWeek",
13050          isoweeks: "isoWeek",
13051          isoweek: "isoWeek",
13052          y: "year",
13053          years: "year",
13054          year: "year"
13055        };
13056        function normalizeUnits(units) {
13057          return typeof units === "string" ? aliases[units] || aliases[units.toLowerCase()] : void 0;
13058        }
13059        function normalizeObjectUnits(inputObject) {
13060          var normalizedInput = {}, normalizedProp, prop;
13061          for (prop in inputObject) {
13062            if (hasOwnProp(inputObject, prop)) {
13063              normalizedProp = normalizeUnits(prop);
13064              if (normalizedProp) {
13065                normalizedInput[normalizedProp] = inputObject[prop];
13066              }
13067            }
13068          }
13069          return normalizedInput;
13070        }
13071        var priorities = {
13072          date: 9,
13073          day: 11,
13074          weekday: 11,
13075          isoWeekday: 11,
13076          dayOfYear: 4,
13077          hour: 13,
13078          millisecond: 16,
13079          minute: 14,
13080          month: 8,
13081          quarter: 7,
13082          second: 15,
13083          weekYear: 1,
13084          isoWeekYear: 1,
13085          week: 5,
13086          isoWeek: 5,
13087          year: 1
13088        };
13089        function getPrioritizedUnits(unitsObj) {
13090          var units = [], u;
13091          for (u in unitsObj) {
13092            if (hasOwnProp(unitsObj, u)) {
13093              units.push({ unit: u, priority: priorities[u] });
13094            }
13095          }
13096          units.sort(function(a, b) {
13097            return a.priority - b.priority;
13098          });
13099          return units;
13100        }
13101        function zeroFill(number, targetLength, forceSign) {
13102          var absNumber = "" + Math.abs(number), zerosToFill = targetLength - absNumber.length, sign2 = number >= 0;
13103          return (sign2 ? forceSign ? "+" : "" : "-") + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;
13104        }
13105        var formattingTokens = /(\[[^\[]*\])|(\\e)|(\\)?(eHHmm|[Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g, localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g, formatFunctions = {}, formatTokenFunctions = {};
13106        function addFormatToken(token2, padded, ordinal2, callback) {
13107          var func = callback;
13108          if (typeof callback === "string") {
13109            func = function() {
13110              return this[callback]();
13111            };
13112          }
13113          if (token2) {
13114            formatTokenFunctions[token2] = func;
13115          }
13116          if (padded) {
13117            formatTokenFunctions[padded[0]] = function() {
13118              return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
13119            };
13120          }
13121          if (ordinal2) {
13122            formatTokenFunctions[ordinal2] = function() {
13123              return this.localeData().ordinal(
13124                func.apply(this, arguments),
13125                token2
13126              );
13127            };
13128          }
13129        }
13130        function removeFormattingTokens(input) {
13131          if (input.match(/\[[\s\S]/)) {
13132            return input.replace(/^\[|\]$/g, "");
13133          }
13134          return input.replace(/\\/g, "");
13135        }
13136        function makeFormatFunction(format2) {
13137          var array = format2.match(formattingTokens), i, length;
13138          for (i = 0, length = array.length; i < length; i++) {
13139            if (formatTokenFunctions[array[i]]) {
13140              array[i] = formatTokenFunctions[array[i]];
13141            } else {
13142              array[i] = removeFormattingTokens(array[i]);
13143            }
13144          }
13145          return function(mom) {
13146            var output = "", i2;
13147            for (i2 = 0; i2 < length; i2++) {
13148              output += isFunction(array[i2]) ? array[i2].call(mom, format2) : array[i2];
13149            }
13150            return output;
13151          };
13152        }
13153        function formatMoment(m, format2) {
13154          if (!m.isValid()) {
13155            return m.localeData().invalidDate();
13156          }
13157          format2 = expandFormat(format2, m.localeData());
13158          var cacheKey = "$" + format2;
13159          if (!hasOwnProp(formatFunctions, cacheKey)) {
13160            formatFunctions[cacheKey] = makeFormatFunction(format2);
13161          }
13162          return formatFunctions[cacheKey](m);
13163        }
13164        function expandFormat(format2, locale2) {
13165          var i = 5;
13166          function replaceLongDateFormatTokens(input) {
13167            return locale2.longDateFormat(input) || input;
13168          }
13169          localFormattingTokens.lastIndex = 0;
13170          while (i >= 0 && localFormattingTokens.test(format2)) {
13171            format2 = format2.replace(
13172              localFormattingTokens,
13173              replaceLongDateFormatTokens
13174            );
13175            localFormattingTokens.lastIndex = 0;
13176            i -= 1;
13177          }
13178          return format2;
13179        }
13180        var match1 = /\d/, match2 = /\d\d/, match3 = /\d{3}/, match4 = /\d{4}/, match6 = /[+-]?\d{6}/, match1to2 = /\d\d?/, match3to4 = /\d\d\d\d?/, match5to6 = /\d\d\d\d\d\d?/, match1to3 = /\d{1,3}/, match1to4 = /\d{1,4}/, match1to6 = /[+-]?\d{1,6}/, matchUnsigned = /\d+/, matchSigned = /[+-]?\d+/, matchOffset = /Z|[+-]\d\d:?\d\d/gi, matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i, match1to2NoLeadingZero = /^[1-9]\d?/, match1to2HasZero = /^([1-9]\d|\d)/, regexes;
13181        regexes = {};
13182        function addRegexToken(token2, regex, strictRegex) {
13183          regexes[token2] = isFunction(regex) ? regex : function(isStrict, localeData2) {
13184            return isStrict && strictRegex ? strictRegex : regex;
13185          };
13186        }
13187        function getParseRegexForToken(token2, config) {
13188          if (!hasOwnProp(regexes, token2)) {
13189            return new RegExp(unescapeFormat(token2));
13190          }
13191          return regexes[token2](config._strict, config._locale);
13192        }
13193        function unescapeFormat(s) {
13194          return regexEscape(
13195            s.replace("\\", "").replace(
13196              /\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,
13197              function(matched, p1, p2, p3, p4) {
13198                return p1 || p2 || p3 || p4;
13199              }
13200            )
13201          );
13202        }
13203        function regexEscape(s) {
13204          return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&");
13205        }
13206        function absFloor(number) {
13207          if (number < 0) {
13208            return Math.ceil(number) || 0;
13209          } else {
13210            return Math.floor(number);
13211          }
13212        }
13213        function toInt(argumentForCoercion) {
13214          var coercedNumber = +argumentForCoercion, value = 0;
13215          if (coercedNumber !== 0 && isFinite(coercedNumber)) {
13216            value = absFloor(coercedNumber);
13217          }
13218          return value;
13219        }
13220        var tokens = {};
13221        function addParseToken(token2, callback) {
13222          var i, func = callback, tokenLen;
13223          if (typeof token2 === "string") {
13224            token2 = [token2];
13225          }
13226          if (isNumber(callback)) {
13227            func = function(input, array) {
13228              array[callback] = toInt(input);
13229            };
13230          }
13231          tokenLen = token2.length;
13232          for (i = 0; i < tokenLen; i++) {
13233            tokens[token2[i]] = func;
13234          }
13235        }
13236        function addWeekParseToken(token2, callback) {
13237          addParseToken(token2, function(input, array, config, token3) {
13238            config._w = config._w || {};
13239            callback(input, config._w, config, token3);
13240          });
13241        }
13242        function addTimeToArrayFromToken(token2, input, config) {
13243          if (input != null && hasOwnProp(tokens, token2)) {
13244            tokens[token2](input, config._a, config, token2);
13245          }
13246        }
13247        function isLeapYear(year) {
13248          return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
13249        }
13250        var YEAR = 0, MONTH = 1, DATE = 2, HOUR = 3, MINUTE = 4, SECOND = 5, MILLISECOND = 6, WEEK = 7, WEEKDAY = 8;
13251        addFormatToken("Y", 0, 0, function() {
13252          var y = this.year();
13253          return y <= 9999 ? zeroFill(y, 4) : "+" + y;
13254        });
13255        addFormatToken(0, ["YY", 2], 0, function() {
13256          return this.year() % 100;
13257        });
13258        addFormatToken(0, ["YYYY", 4], 0, "year");
13259        addFormatToken(0, ["YYYYY", 5], 0, "year");
13260        addFormatToken(0, ["YYYYYY", 6, true], 0, "year");
13261        addRegexToken("Y", matchSigned);
13262        addRegexToken("YY", match1to2, match2);
13263        addRegexToken("YYYY", match1to4, match4);
13264        addRegexToken("YYYYY", match1to6, match6);
13265        addRegexToken("YYYYYY", match1to6, match6);
13266        addParseToken(["YYYYY", "YYYYYY"], YEAR);
13267        addParseToken("YYYY", function(input, array) {
13268          array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
13269        });
13270        addParseToken("YY", function(input, array) {
13271          array[YEAR] = hooks.parseTwoDigitYear(input);
13272        });
13273        addParseToken("Y", function(input, array) {
13274          array[YEAR] = parseInt(input, 10);
13275        });
13276        function daysInYear(year) {
13277          return isLeapYear(year) ? 366 : 365;
13278        }
13279        hooks.parseTwoDigitYear = function(input) {
13280          return toInt(input) + (toInt(input) > 68 ? 1900 : 2e3);
13281        };
13282        var getSetYear = makeGetSet("FullYear", true);
13283        function getIsLeapYear() {
13284          return isLeapYear(this.year());
13285        }
13286        function makeGetSet(unit, keepTime) {
13287          return function(value) {
13288            if (value != null) {
13289              set$1(this, unit, value);
13290              hooks.updateOffset(this, keepTime);
13291              return this;
13292            } else {
13293              return get$2(this, unit);
13294            }
13295          };
13296        }
13297        function get$2(mom, unit) {
13298          if (!mom.isValid()) {
13299            return NaN;
13300          }
13301          var d = mom._d, isUTC = mom._isUTC;
13302          switch (unit) {
13303            case "Milliseconds":
13304              return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds();
13305            case "Seconds":
13306              return isUTC ? d.getUTCSeconds() : d.getSeconds();
13307            case "Minutes":
13308              return isUTC ? d.getUTCMinutes() : d.getMinutes();
13309            case "Hours":
13310              return isUTC ? d.getUTCHours() : d.getHours();
13311            case "Date":
13312              return isUTC ? d.getUTCDate() : d.getDate();
13313            case "Day":
13314              return isUTC ? d.getUTCDay() : d.getDay();
13315            case "Month":
13316              return isUTC ? d.getUTCMonth() : d.getMonth();
13317            case "FullYear":
13318              return isUTC ? d.getUTCFullYear() : d.getFullYear();
13319            default:
13320              return NaN;
13321          }
13322        }
13323        function set$1(mom, unit, value) {
13324          var d, isUTC, year, month, date;
13325          if (!mom.isValid() || isNaN(value)) {
13326            return;
13327          }
13328          d = mom._d;
13329          isUTC = mom._isUTC;
13330          switch (unit) {
13331            case "Milliseconds":
13332              return void (isUTC ? d.setUTCMilliseconds(value) : d.setMilliseconds(value));
13333            case "Seconds":
13334              return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value));
13335            case "Minutes":
13336              return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value));
13337            case "Hours":
13338              return void (isUTC ? d.setUTCHours(value) : d.setHours(value));
13339            case "Date":
13340              return void (isUTC ? d.setUTCDate(value) : d.setDate(value));
13341            // case 'Day': // Not real
13342            //    return void (isUTC ? d.setUTCDay(value) : d.setDay(value));
13343            // case 'Month': // Not used because we need to pass two variables
13344            //     return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value));
13345            case "FullYear":
13346              break;
13347            // See below ...
13348            default:
13349              return;
13350          }
13351          year = value;
13352          month = mom.month();
13353          date = mom.date();
13354          date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;
13355          void (isUTC ? d.setUTCFullYear(year, month, date) : d.setFullYear(year, month, date));
13356        }
13357        function stringGet(units) {
13358          units = normalizeUnits(units);
13359          if (isFunction(this[units])) {
13360            return this[units]();
13361          }
13362          return this;
13363        }
13364        function stringSet(units, value) {
13365          if (typeof units === "object") {
13366            units = normalizeObjectUnits(units);
13367            var prioritized = getPrioritizedUnits(units), i, prioritizedLen = prioritized.length;
13368            for (i = 0; i < prioritizedLen; i++) {
13369              this[prioritized[i].unit](units[prioritized[i].unit]);
13370            }
13371          } else {
13372            units = normalizeUnits(units);
13373            if (isFunction(this[units])) {
13374              return this[units](value);
13375            }
13376          }
13377          return this;
13378        }
13379        function mod$1(n, x) {
13380          return (n % x + x) % x;
13381        }
13382        var indexOf2;
13383        if (Array.prototype.indexOf) {
13384          indexOf2 = Array.prototype.indexOf;
13385        } else {
13386          indexOf2 = function(o) {
13387            var i;
13388            for (i = 0; i < this.length; ++i) {
13389              if (this[i] === o) {
13390                return i;
13391              }
13392            }
13393            return -1;
13394          };
13395        }
13396        function daysInMonth(year, month) {
13397          if (isNaN(year) || isNaN(month)) {
13398            return NaN;
13399          }
13400          var modMonth = mod$1(month, 12);
13401          year += (month - modMonth) / 12;
13402          return modMonth === 1 ? isLeapYear(year) ? 29 : 28 : 31 - modMonth % 7 % 2;
13403        }
13404        addFormatToken("M", ["MM", 2], "Mo", function() {
13405          return this.month() + 1;
13406        });
13407        addFormatToken("MMM", 0, 0, function(format2) {
13408          return this.localeData().monthsShort(this, format2);
13409        });
13410        addFormatToken("MMMM", 0, 0, function(format2) {
13411          return this.localeData().months(this, format2);
13412        });
13413        addRegexToken("M", match1to2, match1to2NoLeadingZero);
13414        addRegexToken("MM", match1to2, match2);
13415        addRegexToken("MMM", function(isStrict, locale2) {
13416          return locale2.monthsShortRegex(isStrict);
13417        });
13418        addRegexToken("MMMM", function(isStrict, locale2) {
13419          return locale2.monthsRegex(isStrict);
13420        });
13421        addParseToken(["M", "MM"], function(input, array) {
13422          array[MONTH] = toInt(input) - 1;
13423        });
13424        addParseToken(["MMM", "MMMM"], function(input, array, config, token2) {
13425          var month = config._locale.monthsParse(input, token2, config._strict);
13426          if (month != null) {
13427            array[MONTH] = month;
13428          } else {
13429            getParsingFlags(config).invalidMonth = input;
13430          }
13431        });
13432        var defaultLocaleMonths = "January_February_March_April_May_June_July_August_September_October_November_December".split(
13433          "_"
13434        ), defaultLocaleMonthsShort = "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"), MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/, defaultMonthsShortRegex = matchWord, defaultMonthsRegex = matchWord, monthsParseProperties = [
13435          "monthsParse",
13436          "longMonthsParse",
13437          "shortMonthsParse",
13438          "monthsRegex",
13439          "monthsShortRegex",
13440          "monthsStrictRegex",
13441          "monthsShortStrictRegex"
13442        ];
13443        function clearMonthsParseCache(locale2, config) {
13444          var i, prop;
13445          for (i = 0; i < monthsParseProperties.length; i++) {
13446            prop = monthsParseProperties[i];
13447            if (!hasOwnProp(config, prop)) {
13448              delete locale2["_" + prop];
13449            }
13450          }
13451        }
13452        function localeMonths(m, format2) {
13453          if (!m) {
13454            return isArray(this._months) ? this._months : this._months["standalone"];
13455          }
13456          return isArray(this._months) ? this._months[m.month()] : this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format2) ? "format" : "standalone"][m.month()];
13457        }
13458        function localeMonthsShort(m, format2) {
13459          if (!m) {
13460            return isArray(this._monthsShort) ? this._monthsShort : this._monthsShort["standalone"];
13461          }
13462          return isArray(this._monthsShort) ? this._monthsShort[m.month()] : this._monthsShort[MONTHS_IN_FORMAT.test(format2) ? "format" : "standalone"][m.month()];
13463        }
13464        function handleStrictParse$1(monthName, format2, strict) {
13465          var i, ii, mom, llc = monthName.toLocaleLowerCase();
13466          if (!this._monthsParse) {
13467            this._monthsParse = [];
13468            this._longMonthsParse = [];
13469            this._shortMonthsParse = [];
13470            for (i = 0; i < 12; ++i) {
13471              mom = createUTC([2e3, i]);
13472              this._shortMonthsParse[i] = this.monthsShort(
13473                mom,
13474                ""
13475              ).toLocaleLowerCase();
13476              this._longMonthsParse[i] = this.months(mom, "").toLocaleLowerCase();
13477            }
13478          }
13479          if (strict) {
13480            if (format2 === "MMM") {
13481              ii = indexOf2.call(this._shortMonthsParse, llc);
13482              return ii !== -1 ? ii : null;
13483            } else {
13484              ii = indexOf2.call(this._longMonthsParse, llc);
13485              return ii !== -1 ? ii : null;
13486            }
13487          } else {
13488            if (format2 === "MMM") {
13489              ii = indexOf2.call(this._shortMonthsParse, llc);
13490              if (ii !== -1) {
13491                return ii;
13492              }
13493              ii = indexOf2.call(this._longMonthsParse, llc);
13494              return ii !== -1 ? ii : null;
13495            } else {
13496              ii = indexOf2.call(this._longMonthsParse, llc);
13497              if (ii !== -1) {
13498                return ii;
13499              }
13500              ii = indexOf2.call(this._shortMonthsParse, llc);
13501              return ii !== -1 ? ii : null;
13502            }
13503          }
13504        }
13505        function localeMonthsParse(monthName, format2, strict) {
13506          var i, mom, regex;
13507          if (this._monthsParseExact) {
13508            return handleStrictParse$1.call(this, monthName, format2, strict);
13509          }
13510          if (!this._monthsParse) {
13511            this._monthsParse = [];
13512            this._longMonthsParse = [];
13513            this._shortMonthsParse = [];
13514          }
13515          for (i = 0; i < 12; i++) {
13516            mom = createUTC([2e3, i]);
13517            if (strict && !this._longMonthsParse[i]) {
13518              this._longMonthsParse[i] = new RegExp(
13519                "^" + this.months(mom, "").replace(".", "") + "$",
13520                "i"
13521              );
13522              this._shortMonthsParse[i] = new RegExp(
13523                "^" + this.monthsShort(mom, "").replace(".", "") + "$",
13524                "i"
13525              );
13526            }
13527            if (!strict && !this._monthsParse[i]) {
13528              regex = "^" + this.months(mom, "") + "|^" + this.monthsShort(mom, "");
13529              this._monthsParse[i] = new RegExp(regex.replace(".", ""), "i");
13530            }
13531            if (strict && format2 === "MMMM" && this._longMonthsParse[i].test(monthName)) {
13532              return i;
13533            } else if (strict && format2 === "MMM" && this._shortMonthsParse[i].test(monthName)) {
13534              return i;
13535            } else if (!strict && this._monthsParse[i].test(monthName)) {
13536              return i;
13537            }
13538          }
13539        }
13540        function setMonth(mom, value) {
13541          if (!mom.isValid()) {
13542            return mom;
13543          }
13544          if (typeof value === "string") {
13545            if (/^\d+$/.test(value)) {
13546              value = toInt(value);
13547            } else {
13548              value = mom.localeData().monthsParse(value);
13549              if (!isNumber(value)) {
13550                return mom;
13551              }
13552            }
13553          }
13554          var month = value, date = mom.date();
13555          date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));
13556          void (mom._isUTC ? mom._d.setUTCMonth(month, date) : mom._d.setMonth(month, date));
13557          return mom;
13558        }
13559        function getSetMonth(value) {
13560          if (value != null) {
13561            setMonth(this, value);
13562            hooks.updateOffset(this, true);
13563            return this;
13564          } else {
13565            return get$2(this, "Month");
13566          }
13567        }
13568        function getDaysInMonth() {
13569          return daysInMonth(this.year(), this.month());
13570        }
13571        function monthsShortRegex(isStrict) {
13572          if (this._monthsParseExact) {
13573            if (!hasOwnProp(this, "_monthsRegex")) {
13574              computeMonthsParse.call(this);
13575            }
13576            if (isStrict) {
13577              return this._monthsShortStrictRegex;
13578            } else {
13579              return this._monthsShortRegex;
13580            }
13581          } else {
13582            if (!hasOwnProp(this, "_monthsShortRegex")) {
13583              this._monthsShortRegex = defaultMonthsShortRegex;
13584            }
13585            return this._monthsShortStrictRegex && isStrict ? this._monthsShortStrictRegex : this._monthsShortRegex;
13586          }
13587        }
13588        function monthsRegex(isStrict) {
13589          if (this._monthsParseExact) {
13590            if (!hasOwnProp(this, "_monthsRegex")) {
13591              computeMonthsParse.call(this);
13592            }
13593            if (isStrict) {
13594              return this._monthsStrictRegex;
13595            } else {
13596              return this._monthsRegex;
13597            }
13598          } else {
13599            if (!hasOwnProp(this, "_monthsRegex")) {
13600              this._monthsRegex = defaultMonthsRegex;
13601            }
13602            return this._monthsStrictRegex && isStrict ? this._monthsStrictRegex : this._monthsRegex;
13603          }
13604        }
13605        function computeMonthsParse() {
13606          function cmpLenRev(a, b) {
13607            return b.length - a.length;
13608          }
13609          var shortPieces = [], longPieces = [], mixedPieces = [], i, mom, shortP, longP;
13610          for (i = 0; i < 12; i++) {
13611            mom = createUTC([2e3, i]);
13612            shortP = regexEscape(this.monthsShort(mom, ""));
13613            longP = regexEscape(this.months(mom, ""));
13614            shortPieces.push(shortP);
13615            longPieces.push(longP);
13616            mixedPieces.push(longP);
13617            mixedPieces.push(shortP);
13618          }
13619          shortPieces.sort(cmpLenRev);
13620          longPieces.sort(cmpLenRev);
13621          mixedPieces.sort(cmpLenRev);
13622          this._monthsRegex = new RegExp("^(" + mixedPieces.join("|") + ")", "i");
13623          this._monthsShortRegex = this._monthsRegex;
13624          this._monthsStrictRegex = new RegExp(
13625            "^(" + longPieces.join("|") + ")",
13626            "i"
13627          );
13628          this._monthsShortStrictRegex = new RegExp(
13629            "^(" + shortPieces.join("|") + ")",
13630            "i"
13631          );
13632        }
13633        addFormatToken("d", 0, "do", "day");
13634        addFormatToken("dd", 0, 0, function(format2) {
13635          return this.localeData().weekdaysMin(this, format2);
13636        });
13637        addFormatToken("ddd", 0, 0, function(format2) {
13638          return this.localeData().weekdaysShort(this, format2);
13639        });
13640        addFormatToken("dddd", 0, 0, function(format2) {
13641          return this.localeData().weekdays(this, format2);
13642        });
13643        addFormatToken("e", 0, 0, "weekday");
13644        addFormatToken("E", 0, 0, "isoWeekday");
13645        addFormatToken("eHHmm", 0, 0, function() {
13646          return "" + this.weekday() + zeroFill(this.hours(), 2) + zeroFill(this.minutes(), 2);
13647        });
13648        addRegexToken("d", match1to2);
13649        addRegexToken("e", match1to2);
13650        addRegexToken("E", match1to2);
13651        addRegexToken("eHHmm", match5to6);
13652        addRegexToken("dd", function(isStrict, locale2) {
13653          return locale2.weekdaysMinRegex(isStrict);
13654        });
13655        addRegexToken("ddd", function(isStrict, locale2) {
13656          return locale2.weekdaysShortRegex(isStrict);
13657        });
13658        addRegexToken("dddd", function(isStrict, locale2) {
13659          return locale2.weekdaysRegex(isStrict);
13660        });
13661        addWeekParseToken(["dd", "ddd", "dddd"], function(input, week, config, token2) {
13662          var weekday = config._locale.weekdaysParse(input, token2, config._strict);
13663          if (weekday != null) {
13664            week.d = weekday;
13665          } else {
13666            getParsingFlags(config).invalidWeekday = input;
13667          }
13668        });
13669        addWeekParseToken(["d", "e", "E"], function(input, week, config, token2) {
13670          week[token2] = toInt(input);
13671        });
13672        addWeekParseToken("eHHmm", function(input, week, config) {
13673          var weekdayEnd = input.length - 4;
13674          week.e = toInt(input.substr(0, weekdayEnd));
13675          config._a[HOUR] = toInt(input.substr(weekdayEnd, 2));
13676          config._a[MINUTE] = toInt(input.substr(weekdayEnd + 2));
13677        });
13678        function parseWeekday(input, locale2) {
13679          if (typeof input !== "string") {
13680            return input;
13681          }
13682          if (!isNaN(input)) {
13683            return parseInt(input, 10);
13684          }
13685          input = locale2.weekdaysParse(input);
13686          if (typeof input === "number") {
13687            return input;
13688          }
13689          return null;
13690        }
13691        function parseIsoWeekday(input, locale2) {
13692          if (typeof input === "string") {
13693            return locale2.weekdaysParse(input) % 7 || 7;
13694          }
13695          return isNaN(input) ? null : input;
13696        }
13697        function shiftWeekdays(ws, n) {
13698          return ws.slice(n, 7).concat(ws.slice(0, n));
13699        }
13700        var defaultLocaleWeekdays = "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), defaultLocaleWeekdaysShort = "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"), defaultLocaleWeekdaysMin = "Su_Mo_Tu_We_Th_Fr_Sa".split("_"), defaultWeekdaysRegex = matchWord, defaultWeekdaysShortRegex = matchWord, defaultWeekdaysMinRegex = matchWord, weekdaysParseProperties = [
13701          "weekdaysParse",
13702          "fullWeekdaysParse",
13703          "shortWeekdaysParse",
13704          "minWeekdaysParse",
13705          "weekdaysRegex",
13706          "weekdaysShortRegex",
13707          "weekdaysMinRegex",
13708          "weekdaysStrictRegex",
13709          "weekdaysShortStrictRegex",
13710          "weekdaysMinStrictRegex"
13711        ];
13712        function clearWeekdaysParseCache(locale2, config) {
13713          var i, prop;
13714          for (i = 0; i < weekdaysParseProperties.length; i++) {
13715            prop = weekdaysParseProperties[i];
13716            if (!hasOwnProp(config, prop)) {
13717              delete locale2["_" + prop];
13718            }
13719          }
13720        }
13721        function localeWeekdays(m, format2) {
13722          var weekdays = isArray(this._weekdays) ? this._weekdays : this._weekdays[m && m !== true && this._weekdays.isFormat.test(format2) ? "format" : "standalone"];
13723          return m === true ? shiftWeekdays(weekdays, this._week.dow) : m ? weekdays[m.day()] : weekdays;
13724        }
13725        function localeWeekdaysShort(m) {
13726          return m === true ? shiftWeekdays(this._weekdaysShort, this._week.dow) : m ? this._weekdaysShort[m.day()] : this._weekdaysShort;
13727        }
13728        function localeWeekdaysMin(m) {
13729          return m === true ? shiftWeekdays(this._weekdaysMin, this._week.dow) : m ? this._weekdaysMin[m.day()] : this._weekdaysMin;
13730        }
13731        function handleStrictParse(weekdayName, format2, strict) {
13732          var i, ii, mom, llc = weekdayName.toLocaleLowerCase();
13733          if (!this._weekdaysParse) {
13734            this._weekdaysParse = [];
13735            this._shortWeekdaysParse = [];
13736            this._minWeekdaysParse = [];
13737            for (i = 0; i < 7; ++i) {
13738              mom = createUTC([2e3, 1]).day(i);
13739              this._minWeekdaysParse[i] = this.weekdaysMin(
13740                mom,
13741                ""
13742              ).toLocaleLowerCase();
13743              this._shortWeekdaysParse[i] = this.weekdaysShort(
13744                mom,
13745                ""
13746              ).toLocaleLowerCase();
13747              this._weekdaysParse[i] = this.weekdays(mom, "").toLocaleLowerCase();
13748            }
13749          }
13750          if (strict) {
13751            if (format2 === "dddd") {
13752              ii = indexOf2.call(this._weekdaysParse, llc);
13753              return ii !== -1 ? ii : null;
13754            } else if (format2 === "ddd") {
13755              ii = indexOf2.call(this._shortWeekdaysParse, llc);
13756              return ii !== -1 ? ii : null;
13757            } else {
13758              ii = indexOf2.call(this._minWeekdaysParse, llc);
13759              return ii !== -1 ? ii : null;
13760            }
13761          } else {
13762            if (format2 === "dddd") {
13763              ii = indexOf2.call(this._weekdaysParse, llc);
13764              if (ii !== -1) {
13765                return ii;
13766              }
13767              ii = indexOf2.call(this._shortWeekdaysParse, llc);
13768              if (ii !== -1) {
13769                return ii;
13770              }
13771              ii = indexOf2.call(this._minWeekdaysParse, llc);
13772              return ii !== -1 ? ii : null;
13773            } else if (format2 === "ddd") {
13774              ii = indexOf2.call(this._shortWeekdaysParse, llc);
13775              if (ii !== -1) {
13776                return ii;
13777              }
13778              ii = indexOf2.call(this._weekdaysParse, llc);
13779              if (ii !== -1) {
13780                return ii;
13781              }
13782              ii = indexOf2.call(this._minWeekdaysParse, llc);
13783              return ii !== -1 ? ii : null;
13784            } else {
13785              ii = indexOf2.call(this._minWeekdaysParse, llc);
13786              if (ii !== -1) {
13787                return ii;
13788              }
13789              ii = indexOf2.call(this._weekdaysParse, llc);
13790              if (ii !== -1) {
13791                return ii;
13792              }
13793              ii = indexOf2.call(this._shortWeekdaysParse, llc);
13794              return ii !== -1 ? ii : null;
13795            }
13796          }
13797        }
13798        function localeWeekdaysParse(weekdayName, format2, strict) {
13799          var i, mom, regex;
13800          if (this._weekdaysParseExact) {
13801            return handleStrictParse.call(this, weekdayName, format2, strict);
13802          }
13803          if (!this._weekdaysParse) {
13804            this._weekdaysParse = [];
13805            this._minWeekdaysParse = [];
13806            this._shortWeekdaysParse = [];
13807            this._fullWeekdaysParse = [];
13808          }
13809          for (i = 0; i < 7; i++) {
13810            mom = createUTC([2e3, 1]).day(i);
13811            if (strict && !this._fullWeekdaysParse[i]) {
13812              this._fullWeekdaysParse[i] = new RegExp(
13813                "^" + this.weekdays(mom, "").replace(".", "\\.?") + "$",
13814                "i"
13815              );
13816              this._shortWeekdaysParse[i] = new RegExp(
13817                "^" + this.weekdaysShort(mom, "").replace(".", "\\.?") + "$",
13818                "i"
13819              );
13820              this._minWeekdaysParse[i] = new RegExp(
13821                "^" + this.weekdaysMin(mom, "").replace(".", "\\.?") + "$",
13822                "i"
13823              );
13824            }
13825            if (!this._weekdaysParse[i]) {
13826              regex = "^" + this.weekdays(mom, "") + "|^" + this.weekdaysShort(mom, "") + "|^" + this.weekdaysMin(mom, "");
13827              this._weekdaysParse[i] = new RegExp(regex.replace(".", ""), "i");
13828            }
13829            if (strict && format2 === "dddd" && this._fullWeekdaysParse[i].test(weekdayName)) {
13830              return i;
13831            } else if (strict && format2 === "ddd" && this._shortWeekdaysParse[i].test(weekdayName)) {
13832              return i;
13833            } else if (strict && format2 === "dd" && this._minWeekdaysParse[i].test(weekdayName)) {
13834              return i;
13835            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
13836              return i;
13837            }
13838          }
13839        }
13840        function getSetDayOfWeek(input) {
13841          if (!this.isValid()) {
13842            return input != null ? this : NaN;
13843          }
13844          var day = get$2(this, "Day");
13845          if (input != null) {
13846            input = parseWeekday(input, this.localeData());
13847            return this.add(input - day, "d");
13848          } else {
13849            return day;
13850          }
13851        }
13852        function getSetLocaleDayOfWeek(input) {
13853          if (!this.isValid()) {
13854            return input != null ? this : NaN;
13855          }
13856          var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
13857          return input == null ? weekday : this.add(input - weekday, "d");
13858        }
13859        function getSetISODayOfWeek(input) {
13860          if (!this.isValid()) {
13861            return input != null ? this : NaN;
13862          }
13863          if (input != null) {
13864            var weekday = parseIsoWeekday(input, this.localeData());
13865            return this.day(this.day() % 7 ? weekday : weekday - 7);
13866          } else {
13867            return this.day() || 7;
13868          }
13869        }
13870        function weekdaysRegex(isStrict) {
13871          if (this._weekdaysParseExact) {
13872            if (!hasOwnProp(this, "_weekdaysRegex")) {
13873              computeWeekdaysParse.call(this);
13874            }
13875            if (isStrict) {
13876              return this._weekdaysStrictRegex;
13877            } else {
13878              return this._weekdaysRegex;
13879            }
13880          } else {
13881            if (!hasOwnProp(this, "_weekdaysRegex")) {
13882              this._weekdaysRegex = defaultWeekdaysRegex;
13883            }
13884            return this._weekdaysStrictRegex && isStrict ? this._weekdaysStrictRegex : this._weekdaysRegex;
13885          }
13886        }
13887        function weekdaysShortRegex(isStrict) {
13888          if (this._weekdaysParseExact) {
13889            if (!hasOwnProp(this, "_weekdaysRegex")) {
13890              computeWeekdaysParse.call(this);
13891            }
13892            if (isStrict) {
13893              return this._weekdaysShortStrictRegex;
13894            } else {
13895              return this._weekdaysShortRegex;
13896            }
13897          } else {
13898            if (!hasOwnProp(this, "_weekdaysShortRegex")) {
13899              this._weekdaysShortRegex = defaultWeekdaysShortRegex;
13900            }
13901            return this._weekdaysShortStrictRegex && isStrict ? this._weekdaysShortStrictRegex : this._weekdaysShortRegex;
13902          }
13903        }
13904        function weekdaysMinRegex(isStrict) {
13905          if (this._weekdaysParseExact) {
13906            if (!hasOwnProp(this, "_weekdaysRegex")) {
13907              computeWeekdaysParse.call(this);
13908            }
13909            if (isStrict) {
13910              return this._weekdaysMinStrictRegex;
13911            } else {
13912              return this._weekdaysMinRegex;
13913            }
13914          } else {
13915            if (!hasOwnProp(this, "_weekdaysMinRegex")) {
13916              this._weekdaysMinRegex = defaultWeekdaysMinRegex;
13917            }
13918            return this._weekdaysMinStrictRegex && isStrict ? this._weekdaysMinStrictRegex : this._weekdaysMinRegex;
13919          }
13920        }
13921        function computeWeekdaysParse() {
13922          function cmpLenRev(a, b) {
13923            return b.length - a.length;
13924          }
13925          var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [], i, mom, minp, shortp, longp;
13926          for (i = 0; i < 7; i++) {
13927            mom = createUTC([2e3, 1]).day(i);
13928            minp = regexEscape(this.weekdaysMin(mom, ""));
13929            shortp = regexEscape(this.weekdaysShort(mom, ""));
13930            longp = regexEscape(this.weekdays(mom, ""));
13931            minPieces.push(minp);
13932            shortPieces.push(shortp);
13933            longPieces.push(longp);
13934            mixedPieces.push(minp);
13935            mixedPieces.push(shortp);
13936            mixedPieces.push(longp);
13937          }
13938          minPieces.sort(cmpLenRev);
13939          shortPieces.sort(cmpLenRev);
13940          longPieces.sort(cmpLenRev);
13941          mixedPieces.sort(cmpLenRev);
13942          this._weekdaysRegex = new RegExp("^(" + mixedPieces.join("|") + ")", "i");
13943          this._weekdaysShortRegex = this._weekdaysRegex;
13944          this._weekdaysMinRegex = this._weekdaysRegex;
13945          this._weekdaysStrictRegex = new RegExp(
13946            "^(" + longPieces.join("|") + ")",
13947            "i"
13948          );
13949          this._weekdaysShortStrictRegex = new RegExp(
13950            "^(" + shortPieces.join("|") + ")",
13951            "i"
13952          );
13953          this._weekdaysMinStrictRegex = new RegExp(
13954            "^(" + minPieces.join("|") + ")",
13955            "i"
13956          );
13957        }
13958        function set(config) {
13959          var prop, i;
13960          clearMonthsParseCache(this, config);
13961          clearWeekdaysParseCache(this, config);
13962          for (i in config) {
13963            if (hasOwnProp(config, i)) {
13964              prop = config[i];
13965              if (isFunction(prop)) {
13966                this[i] = prop;
13967              } else {
13968                this["_" + i] = prop;
13969              }
13970            }
13971          }
13972          this._config = config;
13973          this._dayOfMonthOrdinalParseLenient = new RegExp(
13974            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + "|" + /\d{1,2}/.source
13975          );
13976        }
13977        function mergeConfigs(parentConfig, childConfig) {
13978          var res = extend({}, parentConfig), prop;
13979          for (prop in childConfig) {
13980            if (hasOwnProp(childConfig, prop)) {
13981              if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
13982                res[prop] = {};
13983                extend(res[prop], parentConfig[prop]);
13984                extend(res[prop], childConfig[prop]);
13985              } else if (childConfig[prop] != null) {
13986                res[prop] = childConfig[prop];
13987              } else {
13988                delete res[prop];
13989              }
13990            }
13991          }
13992          for (prop in parentConfig) {
13993            if (hasOwnProp(parentConfig, prop) && !hasOwnProp(childConfig, prop) && isObject(parentConfig[prop])) {
13994              res[prop] = extend({}, res[prop]);
13995            }
13996          }
13997          return res;
13998        }
13999        function Locale(config) {
14000          if (config != null) {
14001            this.set(config);
14002          }
14003        }
14004        var keys;
14005        if (Object.keys) {
14006          keys = Object.keys;
14007        } else {
14008          keys = function(obj) {
14009            var i, res = [];
14010            for (i in obj) {
14011              if (hasOwnProp(obj, i)) {
14012                res.push(i);
14013              }
14014            }
14015            return res;
14016          };
14017        }
14018        var defaultCalendar = {
14019          sameDay: "[Today at] LT",
14020          nextDay: "[Tomorrow at] LT",
14021          nextWeek: "dddd [at] LT",
14022          lastDay: "[Yesterday at] LT",
14023          lastWeek: "[Last] dddd [at] LT",
14024          sameElse: "L"
14025        };
14026        function calendar$1(key, mom, now2) {
14027          var output = this._calendar[key] || this._calendar["sameElse"];
14028          return isFunction(output) ? output.call(mom, now2) : output;
14029        }
14030        var defaultLongDateFormat = {
14031          LTS: "h:mm:ss A",
14032          LT: "h:mm A",
14033          L: "MM/DD/YYYY",
14034          LL: "MMMM D, YYYY",
14035          LLL: "MMMM D, YYYY h:mm A",
14036          LLLL: "dddd, MMMM D, YYYY h:mm A"
14037        };
14038        function longDateFormat(key) {
14039          var format2 = this._longDateFormat[key], formatUpper = this._longDateFormat[key.toUpperCase()], formatCache = this._longDateFormatCache;
14040          if (format2 || !formatUpper) {
14041            return format2;
14042          }
14043          if (formatCache && formatCache[key] && formatCache[key].formatUpper === formatUpper) {
14044            return formatCache[key].format;
14045          }
14046          format2 = formatUpper.match(formattingTokens).map(function(tok) {
14047            if (tok === "MMMM" || tok === "MM" || tok === "DD" || tok === "dddd") {
14048              return tok.slice(1);
14049            }
14050            return tok;
14051          }).join("");
14052          if (!formatCache) {
14053            formatCache = this._longDateFormatCache = {};
14054          }
14055          formatCache[key] = {
14056            formatUpper,
14057            format: format2
14058          };
14059          return format2;
14060        }
14061        var defaultInvalidDate = "Invalid date";
14062        function invalidDate() {
14063          return this._invalidDate;
14064        }
14065        var defaultOrdinal = "%d", defaultDayOfMonthOrdinalParse = /\d{1,2}/;
14066        function ordinal(number) {
14067          return this._ordinal.replace("%d", number);
14068        }
14069        var defaultRelativeTime = {
14070          future: "in %s",
14071          past: "%s ago",
14072          s: "a few seconds",
14073          ss: "%d seconds",
14074          m: "a minute",
14075          mm: "%d minutes",
14076          h: "an hour",
14077          hh: "%d hours",
14078          d: "a day",
14079          dd: "%d days",
14080          w: "a week",
14081          ww: "%d weeks",
14082          M: "a month",
14083          MM: "%d months",
14084          y: "a year",
14085          yy: "%d years"
14086        };
14087        function relativeTimeWithoutPostformat(number, withoutSuffix, string, isFuture) {
14088          var output = this._relativeTime[string];
14089          return isFunction(output) ? output(number, withoutSuffix, string, isFuture) : output.replace(/%d/i, number);
14090        }
14091        function relativeTime$1(number, withoutSuffix, string, isFuture) {
14092          return this.postformat(
14093            relativeTimeWithoutPostformat.call(
14094              this,
14095              number,
14096              withoutSuffix,
14097              string,
14098              isFuture
14099            )
14100          );
14101        }
14102        function pastFutureWithoutPostformat(diff2, output) {
14103          var format2 = this._relativeTime[diff2 > 0 ? "future" : "past"];
14104          return isFunction(format2) ? format2(output) : format2.replace(/%s/i, output);
14105        }
14106        function pastFuture(diff2, output) {
14107          return this.postformat(
14108            pastFutureWithoutPostformat.call(this, diff2, output)
14109          );
14110        }
14111        function createDate(y, m, d, h, M, s, ms) {
14112          var date;
14113          if (y < 100 && y >= 0) {
14114            date = new Date(y + 400, m, d, h, M, s, ms);
14115            if (isFinite(date.getFullYear())) {
14116              date.setFullYear(y);
14117            }
14118          } else {
14119            date = new Date(y, m, d, h, M, s, ms);
14120          }
14121          return date;
14122        }
14123        function createUTCDate(y) {
14124          var date, args;
14125          if (y < 100 && y >= 0) {
14126            args = Array.prototype.slice.call(arguments);
14127            args[0] = y + 400;
14128            date = new Date(Date.UTC.apply(null, args));
14129            if (isFinite(date.getUTCFullYear())) {
14130              date.setUTCFullYear(y);
14131            }
14132          } else {
14133            date = new Date(Date.UTC.apply(null, arguments));
14134          }
14135          return date;
14136        }
14137        function firstWeekOffset(year, dow, doy) {
14138          var fwd = 7 + dow - doy, fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
14139          return -fwdlw + fwd - 1;
14140        }
14141        function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
14142          var localWeekday = (7 + weekday - dow) % 7, weekOffset = firstWeekOffset(year, dow, doy), dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, resYear, resDayOfYear;
14143          if (dayOfYear <= 0) {
14144            resYear = year - 1;
14145            resDayOfYear = daysInYear(resYear) + dayOfYear;
14146          } else if (dayOfYear > daysInYear(year)) {
14147            resYear = year + 1;
14148            resDayOfYear = dayOfYear - daysInYear(year);
14149          } else {
14150            resYear = year;
14151            resDayOfYear = dayOfYear;
14152          }
14153          return {
14154            year: resYear,
14155            dayOfYear: resDayOfYear
14156          };
14157        }
14158        function weekOfYearFromDayOfYear(year, dayOfYear, dow, doy) {
14159          var weekOffset = firstWeekOffset(year, dow, doy), week = Math.floor((dayOfYear - weekOffset - 1) / 7) + 1, resWeek, resYear;
14160          if (week < 1) {
14161            resYear = year - 1;
14162            resWeek = week + weeksInYear(resYear, dow, doy);
14163          } else if (week > weeksInYear(year, dow, doy)) {
14164            resWeek = week - weeksInYear(year, dow, doy);
14165            resYear = year + 1;
14166          } else {
14167            resYear = year;
14168            resWeek = week;
14169          }
14170          return {
14171            week: resWeek,
14172            year: resYear
14173          };
14174        }
14175        function weekOfYear(mom, dow, doy) {
14176          return weekOfYearFromDayOfYear(mom.year(), mom.dayOfYear(), dow, doy);
14177        }
14178        function weekOfYearFromDate(year, month, date, dow, doy) {
14179          var dayOfYear = Math.round(
14180            (createUTCDate(year, month, date) - createUTCDate(year, 0, 1)) / 864e5
14181          ) + 1;
14182          return weekOfYearFromDayOfYear(year, dayOfYear, dow, doy);
14183        }
14184        function weeksInYear(year, dow, doy) {
14185          var weekOffset = firstWeekOffset(year, dow, doy), weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
14186          return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
14187        }
14188        addFormatToken("w", ["ww", 2], "wo", "week");
14189        addFormatToken("W", ["WW", 2], "Wo", "isoWeek");
14190        addRegexToken("w", match1to2, match1to2NoLeadingZero);
14191        addRegexToken("ww", match1to2, match2);
14192        addRegexToken("W", match1to2, match1to2NoLeadingZero);
14193        addRegexToken("WW", match1to2, match2);
14194        addWeekParseToken(
14195          ["w", "ww", "W", "WW"],
14196          function(input, week, config, token2) {
14197            week[token2.substr(0, 1)] = toInt(input);
14198          }
14199        );
14200        function localeWeek(mom) {
14201          return weekOfYear(mom, this._week.dow, this._week.doy).week;
14202        }
14203        var defaultLocaleWeek = {
14204          dow: 0,
14205          // Sunday is the first day of the week.
14206          doy: 6
14207          // The week that contains Jan 6th is the first week of the year.
14208        };
14209        function localeFirstDayOfWeek() {
14210          return this._week.dow;
14211        }
14212        function localeFirstDayOfYear() {
14213          return this._week.doy;
14214        }
14215        function getSetWeek(input) {
14216          var week = this.localeData().week(this);
14217          return input == null ? week : this.add((input - week) * 7, "d");
14218        }
14219        function getSetISOWeek(input) {
14220          var week = weekOfYear(this, 1, 4).week;
14221          return input == null ? week : this.add((input - week) * 7, "d");
14222        }
14223        function hFormat() {
14224          return this.hours() % 12 || 12;
14225        }
14226        function kFormat() {
14227          return this.hours() || 24;
14228        }
14229        addFormatToken("H", ["HH", 2], 0, "hour");
14230        addFormatToken("h", ["hh", 2], 0, hFormat);
14231        addFormatToken("k", ["kk", 2], 0, kFormat);
14232        addFormatToken("hmm", 0, 0, function() {
14233          return "" + hFormat.apply(this) + zeroFill(this.minutes(), 2);
14234        });
14235        addFormatToken("hmmss", 0, 0, function() {
14236          return "" + hFormat.apply(this) + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);
14237        });
14238        addFormatToken("Hmm", 0, 0, function() {
14239          return "" + this.hours() + zeroFill(this.minutes(), 2);
14240        });
14241        addFormatToken("Hmmss", 0, 0, function() {
14242          return "" + this.hours() + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);
14243        });
14244        function meridiem(token2, lowercase) {
14245          addFormatToken(token2, 0, 0, function() {
14246            return this.localeData().meridiem(
14247              this.hours(),
14248              this.minutes(),
14249              lowercase
14250            );
14251          });
14252        }
14253        meridiem("a", true);
14254        meridiem("A", false);
14255        function matchMeridiem(isStrict, locale2) {
14256          return locale2._meridiemParse;
14257        }
14258        addRegexToken("a", matchMeridiem);
14259        addRegexToken("A", matchMeridiem);
14260        addRegexToken("H", match1to2, match1to2HasZero);
14261        addRegexToken("h", match1to2, match1to2NoLeadingZero);
14262        addRegexToken("k", match1to2, match1to2NoLeadingZero);
14263        addRegexToken("HH", match1to2, match2);
14264        addRegexToken("hh", match1to2, match2);
14265        addRegexToken("kk", match1to2, match2);
14266        addRegexToken("hmm", match3to4);
14267        addRegexToken("hmmss", match5to6);
14268        addRegexToken("Hmm", match3to4);
14269        addRegexToken("Hmmss", match5to6);
14270        addParseToken(["H", "HH"], HOUR);
14271        addParseToken(["k", "kk"], function(input, array, config) {
14272          var kInput = toInt(input);
14273          array[HOUR] = kInput === 24 ? 0 : kInput;
14274        });
14275        addParseToken(["a", "A"], function(input, array, config) {
14276          config._isPm = config._locale.isPM(input);
14277          config._meridiem = input;
14278        });
14279        addParseToken(["h", "hh"], function(input, array, config) {
14280          array[HOUR] = toInt(input);
14281          getParsingFlags(config).bigHour = true;
14282        });
14283        addParseToken("hmm", function(input, array, config) {
14284          var pos = input.length - 2;
14285          array[HOUR] = toInt(input.substr(0, pos));
14286          array[MINUTE] = toInt(input.substr(pos));
14287          getParsingFlags(config).bigHour = true;
14288        });
14289        addParseToken("hmmss", function(input, array, config) {
14290          var pos1 = input.length - 4, pos2 = input.length - 2;
14291          array[HOUR] = toInt(input.substr(0, pos1));
14292          array[MINUTE] = toInt(input.substr(pos1, 2));
14293          array[SECOND] = toInt(input.substr(pos2));
14294          getParsingFlags(config).bigHour = true;
14295        });
14296        addParseToken("Hmm", function(input, array, config) {
14297          var pos = input.length - 2;
14298          array[HOUR] = toInt(input.substr(0, pos));
14299          array[MINUTE] = toInt(input.substr(pos));
14300        });
14301        addParseToken("Hmmss", function(input, array, config) {
14302          var pos1 = input.length - 4, pos2 = input.length - 2;
14303          array[HOUR] = toInt(input.substr(0, pos1));
14304          array[MINUTE] = toInt(input.substr(pos1, 2));
14305          array[SECOND] = toInt(input.substr(pos2));
14306        });
14307        function localeIsPM(input) {
14308          return (input + "").toLowerCase().charAt(0) === "p";
14309        }
14310        var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i, getSetHour = makeGetSet("Hours", true);
14311        function localeMeridiem(hours2, minutes2, isLower) {
14312          if (hours2 > 11) {
14313            return isLower ? "pm" : "PM";
14314          } else {
14315            return isLower ? "am" : "AM";
14316          }
14317        }
14318        var baseConfig = {
14319          calendar: defaultCalendar,
14320          longDateFormat: defaultLongDateFormat,
14321          invalidDate: defaultInvalidDate,
14322          ordinal: defaultOrdinal,
14323          dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,
14324          relativeTime: defaultRelativeTime,
14325          months: defaultLocaleMonths,
14326          monthsShort: defaultLocaleMonthsShort,
14327          week: defaultLocaleWeek,
14328          weekdays: defaultLocaleWeekdays,
14329          weekdaysMin: defaultLocaleWeekdaysMin,
14330          weekdaysShort: defaultLocaleWeekdaysShort,
14331          meridiemParse: defaultLocaleMeridiemParse
14332        };
14333        var locales = {}, localeFamilies = {}, globalLocale;
14334        function commonPrefix(arr1, arr2) {
14335          var i, minl = Math.min(arr1.length, arr2.length);
14336          for (i = 0; i < minl; i += 1) {
14337            if (arr1[i] !== arr2[i]) {
14338              return i;
14339            }
14340          }
14341          return minl;
14342        }
14343        function normalizeLocale(key) {
14344          return key ? key.toLowerCase().replace("_", "-") : key;
14345        }
14346        function chooseLocale(names) {
14347          var i = 0, j, next, locale2, split;
14348          while (i < names.length) {
14349            split = normalizeLocale(names[i]).split("-");
14350            j = split.length;
14351            next = normalizeLocale(names[i + 1]);
14352            next = next ? next.split("-") : null;
14353            while (j > 0) {
14354              locale2 = loadLocale(split.slice(0, j).join("-"));
14355              if (locale2) {
14356                return locale2;
14357              }
14358              if (next && next.length >= j && commonPrefix(split, next) >= j - 1) {
14359                break;
14360              }
14361              j--;
14362            }
14363            i++;
14364          }
14365          return globalLocale;
14366        }
14367        function isLocaleNameSane(name) {
14368          return typeof name === "string" && /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(name);
14369        }
14370        function loadLocale(name) {
14371          var oldLocale = null, aliasedRequire, normalizedName;
14372          if (hasOwnProp(locales, name)) {
14373            return locales[name];
14374          }
14375          normalizedName = normalizeLocale(name);
14376          if (hasOwnProp(locales, normalizedName)) {
14377            return locales[normalizedName];
14378          }
14379          if (typeof module !== "undefined" && module && module.exports && isLocaleNameSane(normalizedName)) {
14380            try {
14381              oldLocale = globalLocale._abbr;
14382              aliasedRequire = __require;
14383              aliasedRequire("./locale/" + normalizedName);
14384              getSetGlobalLocale(oldLocale);
14385            } catch (e) {
14386              locales[normalizedName] = null;
14387            }
14388          }
14389          if (hasOwnProp(locales, normalizedName)) {
14390            return locales[normalizedName];
14391          }
14392        }
14393        function getSetGlobalLocale(key, values) {
14394          var data;
14395          if (key) {
14396            if (isUndefined(values)) {
14397              data = getLocale(key);
14398            } else {
14399              data = defineLocale(key, values);
14400            }
14401            if (data) {
14402              globalLocale = data;
14403            } else {
14404              if (typeof console !== "undefined" && console.warn) {
14405                console.warn(
14406                  "Locale " + key + " not found. Did you forget to load it?"
14407                );
14408              }
14409            }
14410          }
14411          return globalLocale._abbr;
14412        }
14413        function defineLocale(name, config) {
14414          if (config !== null) {
14415            var locale2, parentConfig = baseConfig;
14416            config.abbr = name;
14417            if (locales[name] != null) {
14418              deprecateSimple(
14419                "defineLocaleOverride",
14420                "use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."
14421              );
14422              parentConfig = locales[name]._config;
14423            } else if (config.parentLocale != null) {
14424              if (locales[config.parentLocale] != null) {
14425                parentConfig = locales[config.parentLocale]._config;
14426              } else {
14427                locale2 = loadLocale(config.parentLocale);
14428                if (locale2 != null) {
14429                  parentConfig = locale2._config;
14430                } else {
14431                  if (!localeFamilies[config.parentLocale]) {
14432                    localeFamilies[config.parentLocale] = [];
14433                  }
14434                  localeFamilies[config.parentLocale].push({
14435                    name,
14436                    config
14437                  });
14438                  return null;
14439                }
14440              }
14441            }
14442            locales[name] = new Locale(mergeConfigs(parentConfig, config));
14443            if (localeFamilies[name]) {
14444              localeFamilies[name].forEach(function(x) {
14445                defineLocale(x.name, x.config);
14446              });
14447            }
14448            getSetGlobalLocale(name);
14449            return locales[name];
14450          } else {
14451            delete locales[name];
14452            return null;
14453          }
14454        }
14455        function updateLocale(name, config) {
14456          var locale2, tmpLocale = loadLocale(name), parentConfig = baseConfig;
14457          if (tmpLocale != null) {
14458            name = tmpLocale._abbr;
14459          }
14460          if (config != null) {
14461            if (locales[name] != null && locales[name].parentLocale != null) {
14462              locales[name].set(mergeConfigs(locales[name]._config, config));
14463            } else {
14464              if (tmpLocale != null) {
14465                parentConfig = tmpLocale._config;
14466              }
14467              config = mergeConfigs(parentConfig, config);
14468              if (tmpLocale == null) {
14469                config.abbr = name;
14470              }
14471              locale2 = new Locale(config);
14472              locale2.parentLocale = locales[name];
14473              locales[name] = locale2;
14474            }
14475            getSetGlobalLocale(name);
14476          } else {
14477            if (locales[name] != null) {
14478              if (locales[name].parentLocale != null) {
14479                locales[name] = locales[name].parentLocale;
14480                if (name === getSetGlobalLocale()) {
14481                  getSetGlobalLocale(name);
14482                }
14483              } else if (locales[name] != null) {
14484                delete locales[name];
14485              }
14486            }
14487          }
14488          return locales[name];
14489        }
14490        function getLocale(key) {
14491          var locale2;
14492          if (key && key._locale && key._locale._abbr) {
14493            key = key._locale._abbr;
14494          }
14495          if (!key) {
14496            return globalLocale;
14497          }
14498          if (!isArray(key)) {
14499            locale2 = loadLocale(key);
14500            if (locale2) {
14501              return locale2;
14502            }
14503            key = [key];
14504          }
14505          return chooseLocale(key);
14506        }
14507        function listLocales() {
14508          return keys(locales);
14509        }
14510        function checkOverflow(m) {
14511          var overflow, a = m._a;
14512          if (a && getParsingFlags(m).overflow === -2) {
14513            overflow = a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : a[HOUR] < 0 || a[HOUR] > 24 || a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0) ? HOUR : a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : -1;
14514            if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
14515              overflow = DATE;
14516            }
14517            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
14518              overflow = WEEK;
14519            }
14520            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
14521              overflow = WEEKDAY;
14522            }
14523            getParsingFlags(m).overflow = overflow;
14524          }
14525          return m;
14526        }
14527        var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, tzRegex = /Z|[+-]\d\d(?::?\d\d)?/, isoDates = [
14528          ["YYYYYY-MM-DD", /[+-]\d{6}-\d\d-\d\d/],
14529          ["YYYY-MM-DD", /\d{4}-\d\d-\d\d/],
14530          ["GGGG-[W]WW-E", /\d{4}-W\d\d-\d/],
14531          ["GGGG-[W]WW", /\d{4}-W\d\d/, false],
14532          ["YYYY-DDD", /\d{4}-\d{3}/],
14533          ["YYYY-MM", /\d{4}-\d\d/, false],
14534          ["YYYYYYMMDD", /[+-]\d{10}/],
14535          ["YYYYMMDD", /\d{8}/],
14536          ["GGGG[W]WWE", /\d{4}W\d{3}/],
14537          ["GGGG[W]WW", /\d{4}W\d{2}/, false],
14538          ["YYYYDDD", /\d{7}/],
14539          ["YYYYMM", /\d{6}/, false],
14540          ["YYYY", /\d{4}/, false]
14541        ], isoTimes = [
14542          ["HH:mm:ss.SSSS", /\d\d:\d\d:\d\d\.\d+/],
14543          ["HH:mm:ss,SSSS", /\d\d:\d\d:\d\d,\d+/],
14544          ["HH:mm:ss", /\d\d:\d\d:\d\d/],
14545          ["HH:mm", /\d\d:\d\d/],
14546          ["HHmmss.SSSS", /\d\d\d\d\d\d\.\d+/],
14547          ["HHmmss,SSSS", /\d\d\d\d\d\d,\d+/],
14548          ["HHmmss", /\d\d\d\d\d\d/],
14549          ["HHmm", /\d\d\d\d/],
14550          ["HH", /\d\d/]
14551        ], aspNetJsonRegex = /^\/?Date\((-?\d+)/i, rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/, obsOffsets = {
14552          UT: 0,
14553          GMT: 0,
14554          EDT: -4 * 60,
14555          EST: -5 * 60,
14556          CDT: -5 * 60,
14557          CST: -6 * 60,
14558          MDT: -6 * 60,
14559          MST: -7 * 60,
14560          PDT: -7 * 60,
14561          PST: -8 * 60
14562        };
14563        function configFromISO(config) {
14564          var i, l, string = config._i, match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), allowTime, dateFormat, timeFormat, tzFormat, isoDatesLen = isoDates.length, isoTimesLen = isoTimes.length;
14565          if (match) {
14566            getParsingFlags(config).iso = true;
14567            for (i = 0, l = isoDatesLen; i < l; i++) {
14568              if (isoDates[i][1].exec(match[1])) {
14569                dateFormat = isoDates[i][0];
14570                allowTime = isoDates[i][2] !== false;
14571                break;
14572              }
14573            }
14574            if (dateFormat == null) {
14575              config._isValid = false;
14576              return;
14577            }
14578            if (match[3]) {
14579              for (i = 0, l = isoTimesLen; i < l; i++) {
14580                if (isoTimes[i][1].exec(match[3])) {
14581                  timeFormat = (match[2] || " ") + isoTimes[i][0];
14582                  break;
14583                }
14584              }
14585              if (timeFormat == null) {
14586                config._isValid = false;
14587                return;
14588              }
14589            }
14590            if (!allowTime && timeFormat != null) {
14591              config._isValid = false;
14592              return;
14593            }
14594            if (match[4]) {
14595              if (tzRegex.exec(match[4])) {
14596                tzFormat = "Z";
14597              } else {
14598                config._isValid = false;
14599                return;
14600              }
14601            }
14602            config._f = dateFormat + (timeFormat || "") + (tzFormat || "");
14603            configFromStringAndFormat(config);
14604          } else {
14605            config._isValid = false;
14606          }
14607        }
14608        function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {
14609          var result = [
14610            untruncateYear(yearStr),
14611            defaultLocaleMonthsShort.indexOf(monthStr),
14612            parseInt(dayStr, 10),
14613            parseInt(hourStr, 10),
14614            parseInt(minuteStr, 10)
14615          ];
14616          if (secondStr) {
14617            result.push(parseInt(secondStr, 10));
14618          }
14619          return result;
14620        }
14621        function untruncateYear(yearStr) {
14622          var year = parseInt(yearStr, 10);
14623          if (year <= 49) {
14624            return 2e3 + year;
14625          } else if (year <= 999) {
14626            return 1900 + year;
14627          }
14628          return year;
14629        }
14630        function preprocessRFC2822(s) {
14631          return s.replace(/\([^()]*\)|[\n\t]/g, " ").replace(/(\s\s+)/g, " ").replace(/^\s\s*/, "").replace(/\s\s*$/, "");
14632        }
14633        function checkWeekday(weekdayStr, parsedInput, config) {
14634          if (weekdayStr) {
14635            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr), weekdayActual = new Date(
14636              parsedInput[0],
14637              parsedInput[1],
14638              parsedInput[2]
14639            ).getDay();
14640            if (weekdayProvided !== weekdayActual) {
14641              getParsingFlags(config).weekdayMismatch = true;
14642              config._isValid = false;
14643              return false;
14644            }
14645          }
14646          return true;
14647        }
14648        function calculateOffset(obsOffset, militaryOffset, numOffset) {
14649          if (obsOffset) {
14650            return obsOffsets[obsOffset];
14651          } else if (militaryOffset) {
14652            return 0;
14653          } else {
14654            var hm = parseInt(numOffset, 10), m = hm % 100, h = (hm - m) / 100;
14655            return h * 60 + m;
14656          }
14657        }
14658        function configFromRFC2822(config) {
14659          var match = rfc2822.exec(preprocessRFC2822(config._i)), parsedArray;
14660          if (match) {
14661            parsedArray = extractFromRFC2822Strings(
14662              match[4],
14663              match[3],
14664              match[2],
14665              match[5],
14666              match[6],
14667              match[7]
14668            );
14669            if (!checkWeekday(match[1], parsedArray, config)) {
14670              return;
14671            }
14672            config._a = parsedArray;
14673            config._tzm = calculateOffset(match[8], match[9], match[10]);
14674            config._d = createUTCDate.apply(null, config._a);
14675            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
14676            getParsingFlags(config).rfc2822 = true;
14677          } else {
14678            config._isValid = false;
14679          }
14680        }
14681        function configFromString(config) {
14682          var matched = aspNetJsonRegex.exec(config._i);
14683          if (matched !== null) {
14684            config._d = /* @__PURE__ */ new Date(+matched[1]);
14685            return;
14686          }
14687          configFromISO(config);
14688          if (config._isValid === false) {
14689            delete config._isValid;
14690          } else {
14691            return;
14692          }
14693          configFromRFC2822(config);
14694          if (config._isValid === false) {
14695            delete config._isValid;
14696          } else {
14697            return;
14698          }
14699          if (config._strict) {
14700            config._isValid = false;
14701          } else {
14702            hooks.createFromInputFallback(config);
14703          }
14704        }
14705        hooks.createFromInputFallback = deprecate(
14706          "value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",
14707          function(config) {
14708            config._d = /* @__PURE__ */ new Date(config._i + (config._useUTC ? " UTC" : ""));
14709          }
14710        );
14711        function defaults(a, b, c) {
14712          if (a != null) {
14713            return a;
14714          }
14715          if (b != null) {
14716            return b;
14717          }
14718          return c;
14719        }
14720        function currentDateArray(config, now2, forWeek) {
14721          var hadWeekContext = Object.prototype.hasOwnProperty.call(
14722            config,
14723            "_isDefaultDatePartsForWeek"
14724          ), weekContext = config._isDefaultDatePartsForWeek;
14725          config._isDefaultDatePartsForWeek = !!forWeek;
14726          try {
14727            return hooks._getDefaultDateParts(config, now2, forWeek);
14728          } finally {
14729            if (hadWeekContext) {
14730              config._isDefaultDatePartsForWeek = weekContext;
14731            } else {
14732              delete config._isDefaultDatePartsForWeek;
14733            }
14734          }
14735        }
14736        function currentDateNow(config) {
14737          var now2 = config._defaultDatePartsNow;
14738          if (!now2) {
14739            return hooks.now();
14740          }
14741          if (!now2.hasValue) {
14742            now2.value = hooks.now();
14743            now2.hasValue = true;
14744          }
14745          return now2.value;
14746        }
14747        function getDefaultDateParts(config, now2, forWeek) {
14748          var useWeekDefaults = forWeek || config._isDefaultDatePartsForWeek, nowValue = useWeekDefaults ? createLocal(now2) : new Date(now2);
14749          if (useWeekDefaults) {
14750            return [nowValue.year(), nowValue.month(), nowValue.date()];
14751          }
14752          if (config._useUTC) {
14753            return [
14754              nowValue.getUTCFullYear(),
14755              nowValue.getUTCMonth(),
14756              nowValue.getUTCDate()
14757            ];
14758          }
14759          return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
14760        }
14761        hooks._getDefaultDateParts = getDefaultDateParts;
14762        function configFromArray(config) {
14763          var i, date, input = [], now2, currentDate, expectedWeekday, yearToUse, dateIsDefaulted;
14764          if (config._d) {
14765            return;
14766          }
14767          if (config._a[YEAR] == null || config._a[MONTH] == null || config._a[DATE] == null) {
14768            now2 = currentDateNow(config);
14769            currentDate = currentDateArray(config, now2);
14770          }
14771          if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
14772            dayOfYearFromWeekInfo(config, currentDateArray(config, now2, true));
14773          }
14774          if (config._dayOfYear != null) {
14775            yearToUse = config._a[YEAR] != null ? config._a[YEAR] : currentDate[YEAR];
14776            if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {
14777              getParsingFlags(config)._overflowDayOfYear = true;
14778            }
14779            date = createUTCDate(yearToUse, 0, config._dayOfYear);
14780            config._a[MONTH] = date.getUTCMonth();
14781            config._a[DATE] = date.getUTCDate();
14782          }
14783          dateIsDefaulted = config._a[YEAR] == null || config._a[MONTH] == null || config._a[DATE] == null;
14784          for (i = 0; i < 3 && config._a[i] == null; ++i) {
14785            config._a[i] = input[i] = currentDate[i];
14786          }
14787          for (; i < 7; i++) {
14788            config._a[i] = input[i] = config._a[i] == null ? i === 2 ? 1 : 0 : config._a[i];
14789          }
14790          if (config._a[HOUR] === 24 && config._a[MINUTE] === 0 && config._a[SECOND] === 0 && config._a[MILLISECOND] === 0) {
14791            config._nextDay = true;
14792            config._a[HOUR] = 0;
14793          }
14794          config._d = (config._useUTC ? createUTCDate : createDate).apply(
14795            null,
14796            input
14797          );
14798          expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();
14799          if (config._tzm != null) {
14800            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
14801          }
14802          if (config._nextDay) {
14803            config._a[HOUR] = 24;
14804          }
14805          if (config._w && typeof config._w.d !== "undefined" && !dateIsDefaulted && config._w.d !== expectedWeekday) {
14806            getParsingFlags(config).weekdayMismatch = true;
14807          }
14808        }
14809        function dayOfYearFromWeekInfo(config, currentDate) {
14810          var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;
14811          w = config._w;
14812          if (w.GG != null || w.W != null || w.E != null) {
14813            dow = 1;
14814            doy = 4;
14815            weekYear = defaults(
14816              w.GG,
14817              config._a[YEAR],
14818              weekOfYearFromDate(
14819                currentDate[YEAR],
14820                currentDate[MONTH],
14821                currentDate[DATE],
14822                1,
14823                4
14824              ).year
14825            );
14826            week = defaults(w.W, 1);
14827            weekday = defaults(w.E, 1);
14828            if (weekday < 1 || weekday > 7) {
14829              weekdayOverflow = true;
14830            }
14831          } else {
14832            dow = config._locale._week.dow;
14833            doy = config._locale._week.doy;
14834            curWeek = weekOfYearFromDate(
14835              currentDate[YEAR],
14836              currentDate[MONTH],
14837              currentDate[DATE],
14838              dow,
14839              doy
14840            );
14841            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);
14842            week = defaults(w.w, curWeek.week);
14843            if (w.d != null) {
14844              weekday = w.d;
14845              if (weekday < 0 || weekday > 6) {
14846                weekdayOverflow = true;
14847              }
14848            } else if (w.e != null) {
14849              weekday = w.e + dow;
14850              if (w.e < 0 || w.e > 6) {
14851                weekdayOverflow = true;
14852              }
14853            } else {
14854              weekday = dow;
14855            }
14856          }
14857          if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
14858            getParsingFlags(config)._overflowWeeks = true;
14859          } else if (weekdayOverflow != null) {
14860            getParsingFlags(config)._overflowWeekday = true;
14861          } else {
14862            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
14863            config._a[YEAR] = temp.year;
14864            config._dayOfYear = temp.dayOfYear;
14865          }
14866        }
14867        hooks.ISO_8601 = function() {
14868        };
14869        hooks.RFC_2822 = function() {
14870        };
14871        function configFromStringAndFormat(config) {
14872          if (config._f === hooks.ISO_8601) {
14873            configFromISO(config);
14874            return;
14875          }
14876          if (config._f === hooks.RFC_2822) {
14877            configFromRFC2822(config);
14878            return;
14879          }
14880          config._a = [];
14881          getParsingFlags(config).empty = true;
14882          var string = "" + config._i, i, parsedInput, tokens2, token2, skipped, stringLength = string.length, totalParsedInputLength = 0, era, tokenLen;
14883          tokens2 = expandFormat(config._f, config._locale).match(formattingTokens) || [];
14884          tokenLen = tokens2.length;
14885          for (i = 0; i < tokenLen; i++) {
14886            token2 = tokens2[i];
14887            parsedInput = (string.match(getParseRegexForToken(token2, config)) || [])[0];
14888            if (parsedInput) {
14889              skipped = string.substr(0, string.indexOf(parsedInput));
14890              if (skipped.length > 0) {
14891                getParsingFlags(config).unusedInput.push(skipped);
14892              }
14893              string = string.slice(
14894                string.indexOf(parsedInput) + parsedInput.length
14895              );
14896              totalParsedInputLength += parsedInput.length;
14897            }
14898            if (formatTokenFunctions[token2]) {
14899              if (parsedInput) {
14900                getParsingFlags(config).empty = false;
14901              } else {
14902                getParsingFlags(config).unusedTokens.push(token2);
14903              }
14904              addTimeToArrayFromToken(token2, parsedInput, config);
14905            } else if (config._strict && !parsedInput) {
14906              getParsingFlags(config).unusedTokens.push(token2);
14907            }
14908          }
14909          getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;
14910          if (string.length > 0) {
14911            getParsingFlags(config).unusedInput.push(string);
14912          }
14913          if (config._a[HOUR] <= 12 && getParsingFlags(config).bigHour === true && config._a[HOUR] > 0) {
14914            getParsingFlags(config).bigHour = void 0;
14915          }
14916          getParsingFlags(config).parsedDateParts = config._a.slice(0);
14917          getParsingFlags(config).meridiem = config._meridiem;
14918          config._a[HOUR] = meridiemFixWrap(
14919            config._locale,
14920            config._a[HOUR],
14921            config._meridiem
14922          );
14923          era = getParsingFlags(config).era;
14924          if (era !== null) {
14925            config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);
14926          }
14927          configFromArray(config);
14928          checkOverflow(config);
14929        }
14930        function meridiemFixWrap(locale2, hour, meridiem2) {
14931          var isPm;
14932          if (meridiem2 == null) {
14933            return hour;
14934          }
14935          if (locale2.meridiemHour != null) {
14936            return locale2.meridiemHour(hour, meridiem2);
14937          } else if (locale2.isPM != null) {
14938            isPm = locale2.isPM(meridiem2);
14939            if (isPm && hour < 12) {
14940              hour += 12;
14941            }
14942            if (!isPm && hour === 12) {
14943              hour = 0;
14944            }
14945            return hour;
14946          } else {
14947            return hour;
14948          }
14949        }
14950        function configFromStringAndArray(config) {
14951          var tempConfig, bestMoment, scoreToBeat, i, currentScore, validFormatFound, bestFormatIsValid = false, defaultDatePartsNow = {}, configfLen = config._f.length;
14952          if (configfLen === 0) {
14953            getParsingFlags(config).invalidFormat = true;
14954            config._d = /* @__PURE__ */ new Date(NaN);
14955            return;
14956          }
14957          for (i = 0; i < configfLen; i++) {
14958            currentScore = 0;
14959            validFormatFound = false;
14960            tempConfig = copyConfig({}, config);
14961            if (config._useUTC != null) {
14962              tempConfig._useUTC = config._useUTC;
14963            }
14964            tempConfig._defaultDatePartsNow = defaultDatePartsNow;
14965            tempConfig._f = config._f[i];
14966            configFromStringAndFormat(tempConfig);
14967            if (isValid$2(tempConfig)) {
14968              validFormatFound = true;
14969            }
14970            currentScore += getParsingFlags(tempConfig).charsLeftOver;
14971            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
14972            getParsingFlags(tempConfig).score = currentScore;
14973            if (!bestFormatIsValid) {
14974              if (scoreToBeat == null || currentScore < scoreToBeat || validFormatFound) {
14975                scoreToBeat = currentScore;
14976                bestMoment = tempConfig;
14977                if (validFormatFound) {
14978                  bestFormatIsValid = true;
14979                }
14980              }
14981            } else {
14982              if (currentScore < scoreToBeat) {
14983                scoreToBeat = currentScore;
14984                bestMoment = tempConfig;
14985              }
14986            }
14987          }
14988          extend(config, bestMoment || tempConfig);
14989        }
14990        function configFromObject(config) {
14991          if (config._d) {
14992            return;
14993          }
14994          var i = normalizeObjectUnits(config._i), dayOrDate = i.day === void 0 ? i.date : i.day;
14995          config._a = map(
14996            [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],
14997            function(obj) {
14998              return obj && parseInt(obj, 10);
14999            }
15000          );
15001          configFromArray(config);
15002        }
15003        function createFromConfig(config) {
15004          var res = new Moment(checkOverflow(prepareConfig(config)));
15005          if (res._nextDay) {
15006            res.add(1, "d");
15007            res._nextDay = void 0;
15008          }
15009          return res;
15010        }
15011        function prepareConfig(config) {
15012          var input = config._i, format2 = config._f;
15013          config._locale = config._locale || getLocale(config._l);
15014          if (input === null || format2 === void 0 && input === "") {
15015            return createInvalid$1({ nullInput: true });
15016          }
15017          if (typeof input === "string") {
15018            config._i = input = config._locale.preparse(input);
15019          }
15020          if (isMoment(input)) {
15021            return new Moment(checkOverflow(input));
15022          } else if (isDate(input)) {
15023            config._d = input;
15024          } else if (isArray(format2)) {
15025            configFromStringAndArray(config);
15026          } else if (format2) {
15027            configFromStringAndFormat(config);
15028          } else {
15029            configFromInput(config);
15030          }
15031          if (!isValid$2(config)) {
15032            config._d = null;
15033          }
15034          return config;
15035        }
15036        function configFromInput(config) {
15037          var input = config._i;
15038          if (isUndefined(input)) {
15039            config._d = new Date(hooks.now());
15040          } else if (isDate(input)) {
15041            config._d = new Date(input.valueOf());
15042          } else if (typeof input === "string") {
15043            configFromString(config);
15044          } else if (isArray(input)) {
15045            config._a = map(input.slice(0), function(obj) {
15046              return parseInt(obj, 10);
15047            });
15048            configFromArray(config);
15049          } else if (isObject(input)) {
15050            configFromObject(config);
15051          } else if (isNumber(input)) {
15052            config._d = new Date(input);
15053          } else {
15054            hooks.createFromInputFallback(config);
15055          }
15056        }
15057        function createLocalOrUTC(input, format2, locale2, strict, isUTC) {
15058          var c = {};
15059          if (format2 === true || format2 === false) {
15060            strict = format2;
15061            format2 = void 0;
15062          }
15063          if (locale2 === true || locale2 === false) {
15064            strict = locale2;
15065            locale2 = void 0;
15066          }
15067          if (isObject(input) && isObjectEmpty(input) || isArray(input) && input.length === 0) {
15068            input = void 0;
15069          }
15070          c._isAMomentObject = true;
15071          c._useUTC = c._isUTC = isUTC;
15072          c._l = locale2;
15073          c._i = input;
15074          c._f = format2;
15075          c._strict = strict;
15076          return createFromConfig(c);
15077        }
15078        function createLocal(input, format2, locale2, strict) {
15079          return createLocalOrUTC(input, format2, locale2, strict, false);
15080        }
15081        var prototypeMin = deprecate(
15082          "moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",
15083          function() {
15084            var other = createLocal.apply(null, arguments);
15085            if (this.isValid() && other.isValid()) {
15086              return other < this ? this : other;
15087            } else {
15088              return createInvalid$1();
15089            }
15090          }
15091        ), prototypeMax = deprecate(
15092          "moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",
15093          function() {
15094            var other = createLocal.apply(null, arguments);
15095            if (this.isValid() && other.isValid()) {
15096              return other > this ? this : other;
15097            } else {
15098              return createInvalid$1();
15099            }
15100          }
15101        );
15102        function pickBy(fn, moments) {
15103          var res, i;
15104          if (moments.length === 1 && isArray(moments[0])) {
15105            moments = moments[0];
15106          }
15107          if (!moments.length) {
15108            return createLocal();
15109          }
15110          for (i = 0; i < moments.length; ++i) {
15111            if (isMoment(moments[i])) {
15112              res = moments[i];
15113              break;
15114            }
15115          }
15116          if (!res) {
15117            return createInvalid$1();
15118          }
15119          for (++i; i < moments.length; ++i) {
15120            if (isMoment(moments[i]) && (!moments[i].isValid() || moments[i][fn](res))) {
15121              res = moments[i];
15122            }
15123          }
15124          return res;
15125        }
15126        function min() {
15127          var args = [].slice.call(arguments, 0);
15128          return pickBy("isBefore", args);
15129        }
15130        function max() {
15131          var args = [].slice.call(arguments, 0);
15132          return pickBy("isAfter", args);
15133        }
15134        var now = function() {
15135          return Date.now ? Date.now() : +/* @__PURE__ */ new Date();
15136        };
15137        var ordering = [
15138          "year",
15139          "quarter",
15140          "month",
15141          "week",
15142          "day",
15143          "hour",
15144          "minute",
15145          "second",
15146          "millisecond"
15147        ];
15148        function isDurationValid(m) {
15149          var key, unitHasDecimal = false, i, orderLen = ordering.length;
15150          for (key in m) {
15151            if (hasOwnProp(m, key) && !(indexOf2.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {
15152              return false;
15153            }
15154          }
15155          for (i = 0; i < orderLen; ++i) {
15156            if (m[ordering[i]]) {
15157              if (unitHasDecimal) {
15158                return false;
15159              }
15160              if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {
15161                unitHasDecimal = true;
15162              }
15163            }
15164          }
15165          return true;
15166        }
15167        function isValid$1() {
15168          return this._isValid;
15169        }
15170        function createInvalid() {
15171          return createDuration(NaN);
15172        }
15173        function Duration(duration) {
15174          var normalizedInput = normalizeObjectUnits(duration), years2 = normalizedInput.year || 0, quarters = normalizedInput.quarter || 0, months2 = normalizedInput.month || 0, weeks2 = normalizedInput.week || normalizedInput.isoWeek || 0, days2 = normalizedInput.day || 0, hours2 = normalizedInput.hour || 0, minutes2 = normalizedInput.minute || 0, seconds2 = normalizedInput.second || 0, milliseconds2 = normalizedInput.millisecond || 0;
15175          this._isValid = isDurationValid(normalizedInput);
15176          this._milliseconds = +milliseconds2 + seconds2 * 1e3 + // 1000
15177          minutes2 * 6e4 + // 1000 * 60
15178          hours2 * 1e3 * 60 * 60;
15179          this._days = +days2 + weeks2 * 7;
15180          this._months = +months2 + quarters * 3 + years2 * 12;
15181          this._data = {};
15182          this._locale = getLocale();
15183          this._bubble();
15184        }
15185        function isDuration(obj) {
15186          return obj instanceof Duration;
15187        }
15188        function absRound(number) {
15189          if (number < 0) {
15190            return Math.round(-1 * number) * -1;
15191          } else {
15192            return Math.round(number);
15193          }
15194        }
15195        function compareArrays(array1, array2, dontConvert) {
15196          var len = Math.min(array1.length, array2.length), lengthDiff = Math.abs(array1.length - array2.length), diffs = 0, i;
15197          for (i = 0; i < len; i++) {
15198            if (toInt(array1[i]) !== toInt(array2[i])) {
15199              diffs++;
15200            }
15201          }
15202          return diffs + lengthDiff;
15203        }
15204        function offset(token2, separator) {
15205          addFormatToken(token2, 0, 0, function() {
15206            var offset2 = this.utcOffset(), sign2 = "+";
15207            if (offset2 < 0) {
15208              offset2 = -offset2;
15209              sign2 = "-";
15210            }
15211            return sign2 + zeroFill(~~(offset2 / 60), 2) + separator + zeroFill(~~offset2 % 60, 2);
15212          });
15213        }
15214        offset("Z", ":");
15215        offset("ZZ", "");
15216        addRegexToken("Z", matchShortOffset);
15217        addRegexToken("ZZ", matchShortOffset);
15218        addParseToken(["Z", "ZZ"], function(input, array, config) {
15219          var offset2 = offsetFromString(matchShortOffset, input);
15220          config._useUTC = true;
15221          config._tzm = offset2;
15222          if (offset2 === null) {
15223            getParsingFlags(config).invalidOffset = input;
15224          }
15225        });
15226        var chunkOffset = /([\+\-]|\d\d)/gi;
15227        function offsetFromString(matcher, string) {
15228          var matches = (string || "").match(matcher), chunk, parts, minutes2;
15229          if (matches === null) {
15230            return null;
15231          }
15232          chunk = matches[matches.length - 1] || [];
15233          parts = (chunk + "").match(chunkOffset) || ["-", 0, 0];
15234          minutes2 = +(parts[1] * 60) + toInt(parts[2]);
15235          if (toInt(parts[2]) > 59 || (parts[0] === "+" ? minutes2 > 14 * 60 : minutes2 > 12 * 60)) {
15236            return null;
15237          }
15238          return minutes2 === 0 ? 0 : parts[0] === "+" ? minutes2 : -minutes2;
15239        }
15240        function cloneWithOffset(input, model) {
15241          var res, diff2;
15242          if (model._isUTC) {
15243            res = model.clone();
15244            diff2 = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();
15245            res._d.setTime(res._d.valueOf() + diff2);
15246            hooks.updateOffset(res, false);
15247            return res;
15248          } else {
15249            return createLocal(input).local();
15250          }
15251        }
15252        function getDateOffset(m) {
15253          return -Math.round(m._d.getTimezoneOffset());
15254        }
15255        hooks.updateOffset = function() {
15256        };
15257        function getSetOffset(input, keepLocalTime, keepMinutes) {
15258          var offset2 = this._offset || 0, localAdjust;
15259          if (!this.isValid()) {
15260            return input != null ? this : NaN;
15261          }
15262          if (input != null) {
15263            if (typeof input === "string") {
15264              input = offsetFromString(matchShortOffset, input);
15265              if (input === null) {
15266                return this;
15267              }
15268            } else if (Math.abs(input) < 16 && !keepMinutes) {
15269              input = input * 60;
15270            }
15271            if (!this._isUTC && keepLocalTime) {
15272              localAdjust = getDateOffset(this);
15273            }
15274            this._offset = input;
15275            this._isUTC = true;
15276            if (localAdjust != null) {
15277              this.add(localAdjust, "m");
15278            }
15279            if (offset2 !== input) {
15280              if (!keepLocalTime || this._changeInProgress) {
15281                addSubtract$1(
15282                  this,
15283                  createDuration(input - offset2, "m"),
15284                  1,
15285                  false
15286                );
15287              } else if (!this._changeInProgress) {
15288                this._changeInProgress = true;
15289                hooks.updateOffset(this, true);
15290                this._changeInProgress = null;
15291              }
15292            }
15293            return this;
15294          } else {
15295            return this._isUTC ? offset2 : getDateOffset(this);
15296          }
15297        }
15298        function getSetZone(input, keepLocalTime) {
15299          if (input != null) {
15300            if (typeof input !== "string") {
15301              input = -input;
15302            }
15303            this.utcOffset(input, keepLocalTime);
15304            return this;
15305          } else {
15306            return -this.utcOffset();
15307          }
15308        }
15309        function setOffsetToUTC(keepLocalTime) {
15310          return this.utcOffset(0, keepLocalTime);
15311        }
15312        function setOffsetToLocal(keepLocalTime) {
15313          if (this._isUTC) {
15314            this.utcOffset(0, keepLocalTime);
15315            this._isUTC = false;
15316            if (keepLocalTime) {
15317              this.subtract(getDateOffset(this), "m");
15318            }
15319          }
15320          return this;
15321        }
15322        function setOffsetToParsedOffset() {
15323          if (this._tzm != null) {
15324            this.utcOffset(this._tzm, false, true);
15325          } else if (typeof this._i === "string") {
15326            var tZone = offsetFromString(matchOffset, this._i);
15327            if (tZone != null) {
15328              this.utcOffset(tZone);
15329            } else {
15330              this.utcOffset(0, true);
15331            }
15332          }
15333          return this;
15334        }
15335        function hasAlignedHourOffset(input) {
15336          if (!this.isValid()) {
15337            return false;
15338          }
15339          input = input ? createLocal(input).utcOffset() : 0;
15340          return (this.utcOffset() - input) % 60 === 0;
15341        }
15342        function isDaylightSavingTime() {
15343          return this.utcOffset() > this.clone().month(0).utcOffset() || this.utcOffset() > this.clone().month(5).utcOffset();
15344        }
15345        function isDaylightSavingTimeShifted() {
15346          if (!isUndefined(this._isDSTShifted)) {
15347            return this._isDSTShifted;
15348          }
15349          var c = {}, other;
15350          copyConfig(c, this);
15351          c = prepareConfig(c);
15352          if (c._a) {
15353            other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
15354            this._isDSTShifted = this.isValid() && compareArrays(c._a, other.toArray()) > 0;
15355          } else {
15356            this._isDSTShifted = false;
15357          }
15358          return this._isDSTShifted;
15359        }
15360        function isLocal() {
15361          return this.isValid() ? !this._isUTC : false;
15362        }
15363        function isUtcOffset() {
15364          return this.isValid() ? this._isUTC : false;
15365        }
15366        function isUtc() {
15367          return this.isValid() ? this._isUTC && this._offset === 0 : false;
15368        }
15369        var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/, isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;
15370        function createDuration(input, key) {
15371          var duration = input, match = null, sign2, ret, diffRes;
15372          if (isDuration(input)) {
15373            duration = {
15374              ms: input._milliseconds,
15375              d: input._days,
15376              M: input._months
15377            };
15378          } else if (isNumber(input) || !isNaN(+input)) {
15379            duration = {};
15380            if (key) {
15381              duration[key] = +input;
15382            } else {
15383              duration.milliseconds = +input;
15384            }
15385          } else if (match = aspNetRegex.exec(input)) {
15386            sign2 = match[1] === "-" ? -1 : 1;
15387            duration = {
15388              y: 0,
15389              d: toInt(match[DATE]) * sign2,
15390              h: toInt(match[HOUR]) * sign2,
15391              m: toInt(match[MINUTE]) * sign2,
15392              s: toInt(match[SECOND]) * sign2,
15393              ms: toInt(absRound(match[MILLISECOND] * 1e3)) * sign2
15394              // the millisecond decimal point is included in the match
15395            };
15396          } else if (match = isoRegex.exec(input)) {
15397            sign2 = match[1] === "-" ? -1 : 1;
15398            duration = {
15399              y: parseIso(match[2], sign2),
15400              M: parseIso(match[3], sign2),
15401              w: parseIso(match[4], sign2),
15402              d: parseIso(match[5], sign2),
15403              h: parseIso(match[6], sign2),
15404              m: parseIso(match[7], sign2),
15405              s: parseIso(match[8], sign2)
15406            };
15407          } else if (duration == null) {
15408            duration = {};
15409          } else if (typeof duration === "object" && ("from" in duration || "to" in duration)) {
15410            diffRes = momentsDifference(
15411              createLocal(duration.from),
15412              createLocal(duration.to)
15413            );
15414            duration = {};
15415            duration.ms = diffRes.milliseconds;
15416            duration.M = diffRes.months;
15417          }
15418          ret = new Duration(duration);
15419          if (isDuration(input) && hasOwnProp(input, "_locale")) {
15420            ret._locale = input._locale;
15421          }
15422          if (isDuration(input) && hasOwnProp(input, "_isValid")) {
15423            ret._isValid = input._isValid;
15424          }
15425          return ret;
15426        }
15427        createDuration.fn = Duration.prototype;
15428        createDuration.invalid = createInvalid;
15429        function parseIso(inp, sign2) {
15430          var res = inp && parseFloat(inp.replace(",", "."));
15431          return (isNaN(res) ? 0 : res) * sign2;
15432        }
15433        function positiveMomentsDifference(base, other) {
15434          var res = {};
15435          res.months = other.month() - base.month() + (other.year() - base.year()) * 12;
15436          if (base.clone().add(res.months, "M").isAfter(other)) {
15437            --res.months;
15438          }
15439          res.milliseconds = +other - +base.clone().add(res.months, "M");
15440          return res;
15441        }
15442        function momentsDifference(base, other) {
15443          var res;
15444          if (!(base.isValid() && other.isValid())) {
15445            return { milliseconds: 0, months: 0 };
15446          }
15447          other = cloneWithOffset(other, base);
15448          if (base.isBefore(other)) {
15449            res = positiveMomentsDifference(base, other);
15450          } else {
15451            res = positiveMomentsDifference(other, base);
15452            res.milliseconds = -res.milliseconds;
15453            res.months = -res.months;
15454          }
15455          return res;
15456        }
15457        function createAdder(direction, name) {
15458          return function(val, period) {
15459            var dur, tmp;
15460            if (period !== null && !isNaN(+period)) {
15461              deprecateSimple(
15462                name,
15463                "moment()." + name + "(period, number) is deprecated. Please use moment()." + name + "(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."
15464              );
15465              tmp = val;
15466              val = period;
15467              period = tmp;
15468            }
15469            dur = createDuration(val, period);
15470            addSubtract$1(this, dur, direction);
15471            return this;
15472          };
15473        }
15474        function addSubtract$1(mom, duration, isAdding, updateOffset) {
15475          var milliseconds2 = duration._milliseconds, days2 = absRound(duration._days), months2 = absRound(duration._months);
15476          if (!mom.isValid()) {
15477            return;
15478          }
15479          updateOffset = updateOffset == null ? true : updateOffset;
15480          if (months2) {
15481            setMonth(mom, get$2(mom, "Month") + months2 * isAdding);
15482          }
15483          if (days2) {
15484            set$1(mom, "Date", get$2(mom, "Date") + days2 * isAdding);
15485          }
15486          if (milliseconds2) {
15487            mom._d.setTime(mom._d.valueOf() + milliseconds2 * isAdding);
15488          }
15489          if (updateOffset) {
15490            hooks.updateOffset(mom, days2 || months2);
15491          }
15492        }
15493        var add$1 = createAdder(1, "add"), subtract$1 = createAdder(-1, "subtract");
15494        function isString(input) {
15495          return typeof input === "string" || input instanceof String;
15496        }
15497        function isMomentInput(input) {
15498          return isMoment(input) || isDate(input) || isString(input) || isNumber(input) || isNumberOrStringArray(input) || isMomentInputObject(input) || input === null || input === void 0;
15499        }
15500        function isMomentInputObject(input) {
15501          var objectTest = isObject(input) && !isObjectEmpty(input), propertyTest = false, properties = [
15502            "years",
15503            "year",
15504            "y",
15505            "months",
15506            "month",
15507            "M",
15508            "days",
15509            "day",
15510            "d",
15511            "dates",
15512            "date",
15513            "D",
15514            "hours",
15515            "hour",
15516            "h",
15517            "minutes",
15518            "minute",
15519            "m",
15520            "seconds",
15521            "second",
15522            "s",
15523            "milliseconds",
15524            "millisecond",
15525            "ms"
15526          ], i, property, propertyLen = properties.length;
15527          for (i = 0; i < propertyLen; i += 1) {
15528            property = properties[i];
15529            propertyTest = propertyTest || hasOwnProp(input, property);
15530          }
15531          return objectTest && propertyTest;
15532        }
15533        function isNumberOrStringArray(input) {
15534          var arrayTest = isArray(input), dataTypeTest = false;
15535          if (arrayTest) {
15536            dataTypeTest = input.filter(function(item) {
15537              return !isNumber(item) && isString(input);
15538            }).length === 0;
15539          }
15540          return arrayTest && dataTypeTest;
15541        }
15542        function isCalendarSpec(input) {
15543          var objectTest = isObject(input) && !isObjectEmpty(input), propertyTest = false, properties = [
15544            "sameDay",
15545            "nextDay",
15546            "lastDay",
15547            "nextWeek",
15548            "lastWeek",
15549            "sameElse"
15550          ], i, property;
15551          for (i = 0; i < properties.length; i += 1) {
15552            property = properties[i];
15553            propertyTest = propertyTest || hasOwnProp(input, property);
15554          }
15555          return objectTest && propertyTest;
15556        }
15557        function getCalendarFormat(myMoment, now2) {
15558          var diff2 = myMoment.diff(now2, "days", true);
15559          return diff2 < -6 ? "sameElse" : diff2 < -1 ? "lastWeek" : diff2 < 0 ? "lastDay" : diff2 < 1 ? "sameDay" : diff2 < 2 ? "nextDay" : diff2 < 7 ? "nextWeek" : "sameElse";
15560        }
15561        function calendar(time, formats) {
15562          if (arguments.length === 1) {
15563            if (!arguments[0]) {
15564              time = void 0;
15565              formats = void 0;
15566            } else if (isMomentInput(arguments[0])) {
15567              time = arguments[0];
15568              formats = void 0;
15569            } else if (isCalendarSpec(arguments[0])) {
15570              formats = arguments[0];
15571              time = void 0;
15572            }
15573          }
15574          var now2 = time || createLocal(), sod = cloneWithOffset(now2, this).startOf("day"), format2 = hooks.calendarFormat(this, sod) || "sameElse", output = formats && (isFunction(formats[format2]) ? formats[format2].call(this, now2) : formats[format2]);
15575          return this.format(
15576            output || this.localeData().calendar(format2, this, createLocal(now2))
15577          );
15578        }
15579        function clone$1() {
15580          return new Moment(this);
15581        }
15582        function isAfter(input, units) {
15583          var localInput = isMoment(input) ? input : createLocal(input);
15584          if (!(this.isValid() && localInput.isValid())) {
15585            return false;
15586          }
15587          units = normalizeUnits(units) || "millisecond";
15588          if (units === "millisecond") {
15589            return this.valueOf() > localInput.valueOf();
15590          } else {
15591            return localInput.valueOf() < this.clone().startOf(units).valueOf();
15592          }
15593        }
15594        function isBefore(input, units) {
15595          var localInput = isMoment(input) ? input : createLocal(input);
15596          if (!(this.isValid() && localInput.isValid())) {
15597            return false;
15598          }
15599          units = normalizeUnits(units) || "millisecond";
15600          if (units === "millisecond") {
15601            return this.valueOf() < localInput.valueOf();
15602          } else {
15603            return this.clone().endOf(units).valueOf() < localInput.valueOf();
15604          }
15605        }
15606        function isBetween(from2, to2, units, inclusivity) {
15607          var localFrom = isMoment(from2) ? from2 : createLocal(from2), localTo = isMoment(to2) ? to2 : createLocal(to2);
15608          if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {
15609            return false;
15610          }
15611          inclusivity = inclusivity || "()";
15612          return (inclusivity[0] === "(" ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) && (inclusivity[1] === ")" ? this.isBefore(localTo, units) : !this.isAfter(localTo, units));
15613        }
15614        function isSame(input, units) {
15615          var localInput = isMoment(input) ? input : createLocal(input), inputMs;
15616          if (!(this.isValid() && localInput.isValid())) {
15617            return false;
15618          }
15619          units = normalizeUnits(units) || "millisecond";
15620          if (units === "millisecond") {
15621            return this.valueOf() === localInput.valueOf();
15622          } else {
15623            inputMs = localInput.valueOf();
15624            return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();
15625          }
15626        }
15627        function isSameOrAfter(input, units) {
15628          return this.isSame(input, units) || this.isAfter(input, units);
15629        }
15630        function isSameOrBefore(input, units) {
15631          return this.isSame(input, units) || this.isBefore(input, units);
15632        }
15633        function diff(input, units, asFloat) {
15634          var that, zoneDelta, output;
15635          if (!this.isValid()) {
15636            return NaN;
15637          }
15638          that = cloneWithOffset(input, this);
15639          if (!that.isValid()) {
15640            return NaN;
15641          }
15642          zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
15643          units = normalizeUnits(units);
15644          switch (units) {
15645            case "year":
15646              output = monthDiff(this, that) / 12;
15647              break;
15648            case "month":
15649              output = monthDiff(this, that);
15650              break;
15651            case "quarter":
15652              output = monthDiff(this, that) / 3;
15653              break;
15654            case "second":
15655              output = (this - that) / 1e3;
15656              break;
15657            // 1000
15658            case "minute":
15659              output = (this - that) / 6e4;
15660              break;
15661            // 1000 * 60
15662            case "hour":
15663              output = (this - that) / 36e5;
15664              break;
15665            // 1000 * 60 * 60
15666            case "day":
15667              output = (this - that - zoneDelta) / 864e5;
15668              break;
15669            // 1000 * 60 * 60 * 24, negate dst
15670            case "week":
15671              output = (this - that - zoneDelta) / 6048e5;
15672              break;
15673            // 1000 * 60 * 60 * 24 * 7, negate dst
15674            default:
15675              output = this - that;
15676          }
15677          return asFloat ? output : absFloor(output);
15678        }
15679        function monthDiff(a, b) {
15680          if (a.date() < b.date()) {
15681            return -monthDiff(b, a);
15682          }
15683          var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()), anchor = a.clone().add(wholeMonthDiff, "months"), anchor2, adjust;
15684          if (b - anchor < 0) {
15685            anchor2 = a.clone().add(wholeMonthDiff - 1, "months");
15686            adjust = (b - anchor) / (anchor - anchor2);
15687          } else {
15688            anchor2 = a.clone().add(wholeMonthDiff + 1, "months");
15689            adjust = (b - anchor) / (anchor2 - anchor);
15690          }
15691          return -(wholeMonthDiff + adjust) || 0;
15692        }
15693        hooks.defaultFormat = "YYYY-MM-DDTHH:mm:ssZ";
15694        hooks.defaultFormatUtc = "YYYY-MM-DDTHH:mm:ss[Z]";
15695        function toString() {
15696          return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ");
15697        }
15698        function toISOString$1(keepOffset) {
15699          if (!this.isValid()) {
15700            return null;
15701          }
15702          var utc = keepOffset !== true, m = utc ? this.clone().utc() : this;
15703          if (m.year() < 0 || m.year() > 9999) {
15704            return formatMoment(
15705              m,
15706              utc ? "YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]" : "YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"
15707            );
15708          }
15709          if (isFunction(Date.prototype.toISOString)) {
15710            if (utc) {
15711              return this.toDate().toISOString();
15712            } else {
15713              return new Date(this.valueOf() + this.utcOffset() * 60 * 1e3).toISOString().replace("Z", formatMoment(m, "Z"));
15714            }
15715          }
15716          return formatMoment(
15717            m,
15718            utc ? "YYYY-MM-DD[T]HH:mm:ss.SSS[Z]" : "YYYY-MM-DD[T]HH:mm:ss.SSSZ"
15719          );
15720        }
15721        function inspect() {
15722          if (!this.isValid()) {
15723            return "moment.invalid(/* " + this._i + " */)";
15724          }
15725          var func = "moment", zone = "", prefix, year, datetime, suffix;
15726          if (!this.isLocal()) {
15727            func = this.utcOffset() === 0 ? "moment.utc" : "moment.parseZone";
15728            zone = "Z";
15729          }
15730          prefix = "[" + func + '("]';
15731          year = 0 <= this.year() && this.year() <= 9999 ? "YYYY" : "YYYYYY";
15732          datetime = "-MM-DD[T]HH:mm:ss.SSS";
15733          suffix = zone + '[")]';
15734          return this.format(prefix + year + datetime + suffix);
15735        }
15736        function format(inputString) {
15737          if (!inputString) {
15738            inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;
15739          }
15740          var output = formatMoment(this, inputString);
15741          return this.localeData().postformat(output);
15742        }
15743        function from(time, withoutSuffix) {
15744          if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {
15745            return createDuration({ to: this, from: time }).locale(this.locale()).humanize(!withoutSuffix);
15746          } else {
15747            return this.localeData().invalidDate();
15748          }
15749        }
15750        function fromNow(withoutSuffix) {
15751          return this.from(createLocal(), withoutSuffix);
15752        }
15753        function to(time, withoutSuffix) {
15754          if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {
15755            return createDuration({ from: this, to: time }).locale(this.locale()).humanize(!withoutSuffix);
15756          } else {
15757            return this.localeData().invalidDate();
15758          }
15759        }
15760        function toNow(withoutSuffix) {
15761          return this.to(createLocal(), withoutSuffix);
15762        }
15763        function locale(key) {
15764          var newLocaleData;
15765          if (key === void 0) {
15766            return this._locale._abbr;
15767          } else {
15768            newLocaleData = getLocale(key);
15769            if (newLocaleData != null) {
15770              this._locale = newLocaleData;
15771            }
15772            return this;
15773          }
15774        }
15775        var lang = deprecate(
15776          "moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",
15777          function(key) {
15778            if (key === void 0) {
15779              return this.localeData();
15780            } else {
15781              return this.locale(key);
15782            }
15783          }
15784        );
15785        function localeData() {
15786          return this._locale;
15787        }
15788        var MS_PER_SECOND = 1e3, MS_PER_MINUTE = 60 * MS_PER_SECOND, MS_PER_HOUR = 60 * MS_PER_MINUTE, MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;
15789        function mod(dividend, divisor) {
15790          return (dividend % divisor + divisor) % divisor;
15791        }
15792        function localStartOfDate(y, m, d) {
15793          if (y < 100 && y >= 0) {
15794            return new Date(y + 400, m, d) - MS_PER_400_YEARS;
15795          } else {
15796            return new Date(y, m, d).valueOf();
15797          }
15798        }
15799        function utcStartOfDate(y, m, d) {
15800          if (y < 100 && y >= 0) {
15801            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;
15802          } else {
15803            return Date.UTC(y, m, d);
15804          }
15805        }
15806        function startOf(units) {
15807          var time, startOfDate;
15808          units = normalizeUnits(units);
15809          if (units === void 0 || units === "millisecond" || !this.isValid()) {
15810            return this;
15811          }
15812          startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
15813          switch (units) {
15814            case "year":
15815              time = startOfDate(this.year(), 0, 1);
15816              break;
15817            case "quarter":
15818              time = startOfDate(
15819                this.year(),
15820                this.month() - this.month() % 3,
15821                1
15822              );
15823              break;
15824            case "month":
15825              time = startOfDate(this.year(), this.month(), 1);
15826              break;
15827            case "week":
15828              time = startOfDate(
15829                this.year(),
15830                this.month(),
15831                this.date() - this.weekday()
15832              );
15833              break;
15834            case "isoWeek":
15835              time = startOfDate(
15836                this.year(),
15837                this.month(),
15838                this.date() - (this.isoWeekday() - 1)
15839              );
15840              break;
15841            case "day":
15842            case "date":
15843              time = startOfDate(this.year(), this.month(), this.date());
15844              break;
15845            case "hour":
15846              time = this._d.valueOf();
15847              time -= mod(
15848                time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
15849                MS_PER_HOUR
15850              );
15851              break;
15852            case "minute":
15853              time = this._d.valueOf();
15854              time -= mod(time, MS_PER_MINUTE);
15855              break;
15856            case "second":
15857              time = this._d.valueOf();
15858              time -= mod(time, MS_PER_SECOND);
15859              break;
15860          }
15861          this._d.setTime(time);
15862          hooks.updateOffset(this, true);
15863          return this;
15864        }
15865        function endOf(units) {
15866          var time, startOfDate;
15867          units = normalizeUnits(units);
15868          if (units === void 0 || units === "millisecond" || !this.isValid()) {
15869            return this;
15870          }
15871          startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
15872          switch (units) {
15873            case "year":
15874              time = startOfDate(this.year() + 1, 0, 1) - 1;
15875              break;
15876            case "quarter":
15877              time = startOfDate(
15878                this.year(),
15879                this.month() - this.month() % 3 + 3,
15880                1
15881              ) - 1;
15882              break;
15883            case "month":
15884              time = startOfDate(this.year(), this.month() + 1, 1) - 1;
15885              break;
15886            case "week":
15887              time = startOfDate(
15888                this.year(),
15889                this.month(),
15890                this.date() - this.weekday() + 7
15891              ) - 1;
15892              break;
15893            case "isoWeek":
15894              time = startOfDate(
15895                this.year(),
15896                this.month(),
15897                this.date() - (this.isoWeekday() - 1) + 7
15898              ) - 1;
15899              break;
15900            case "day":
15901            case "date":
15902              time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;
15903              break;
15904            case "hour":
15905              time = this._d.valueOf();
15906              time += MS_PER_HOUR - mod(
15907                time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
15908                MS_PER_HOUR
15909              ) - 1;
15910              break;
15911            case "minute":
15912              time = this._d.valueOf();
15913              time += MS_PER_MINUTE - mod(time, MS_PER_MINUTE) - 1;
15914              break;
15915            case "second":
15916              time = this._d.valueOf();
15917              time += MS_PER_SECOND - mod(time, MS_PER_SECOND) - 1;
15918              break;
15919          }
15920          this._d.setTime(time);
15921          hooks.updateOffset(this, true);
15922          return this;
15923        }
15924        function valueOf$1() {
15925          return this._d.valueOf() - (this._offset || 0) * 6e4;
15926        }
15927        function unix() {
15928          return Math.floor(this.valueOf() / 1e3);
15929        }
15930        function toDate() {
15931          return new Date(this.valueOf());
15932        }
15933        function toArray() {
15934          var m = this;
15935          return [
15936            m.year(),
15937            m.month(),
15938            m.date(),
15939            m.hour(),
15940            m.minute(),
15941            m.second(),
15942            m.millisecond()
15943          ];
15944        }
15945        function toObject() {
15946          var m = this;
15947          return {
15948            years: m.year(),
15949            months: m.month(),
15950            date: m.date(),
15951            hours: m.hours(),
15952            minutes: m.minutes(),
15953            seconds: m.seconds(),
15954            milliseconds: m.milliseconds()
15955          };
15956        }
15957        function toJSON() {
15958          return this.isValid() ? this.toISOString() : null;
15959        }
15960        function isValid() {
15961          return isValid$2(this);
15962        }
15963        function parsingFlags() {
15964          return extend({}, getParsingFlags(this));
15965        }
15966        function invalidAt() {
15967          return getParsingFlags(this).overflow;
15968        }
15969        function creationData() {
15970          return {
15971            input: this._i,
15972            format: this._f,
15973            locale: this._locale,
15974            isUTC: this._isUTC,
15975            strict: this._strict
15976          };
15977        }
15978        addFormatToken("N", 0, 0, "eraAbbr");
15979        addFormatToken("NN", 0, 0, "eraAbbr");
15980        addFormatToken("NNN", 0, 0, "eraAbbr");
15981        addFormatToken("NNNN", 0, 0, "eraName");
15982        addFormatToken("NNNNN", 0, 0, "eraNarrow");
15983        addFormatToken("y", ["y", 1], "yo", "eraYear");
15984        addFormatToken("y", ["yy", 2], 0, "eraYear");
15985        addFormatToken("y", ["yyy", 3], 0, "eraYear");
15986        addFormatToken("y", ["yyyy", 4], 0, "eraYear");
15987        addRegexToken("N", matchEraAbbr);
15988        addRegexToken("NN", matchEraAbbr);
15989        addRegexToken("NNN", matchEraAbbr);
15990        addRegexToken("NNNN", matchEraName);
15991        addRegexToken("NNNNN", matchEraNarrow);
15992        addParseToken(
15993          ["N", "NN", "NNN", "NNNN", "NNNNN"],
15994          function(input, array, config, token2) {
15995            var era = config._locale.erasParse(input, token2, config._strict);
15996            if (era) {
15997              getParsingFlags(config).era = era;
15998            } else {
15999              getParsingFlags(config).invalidEra = input;
16000            }
16001          }
16002        );
16003        addRegexToken("y", matchUnsigned);
16004        addRegexToken("yy", matchUnsigned);
16005        addRegexToken("yyy", matchUnsigned);
16006        addRegexToken("yyyy", matchUnsigned);
16007        addRegexToken("yo", matchEraYearOrdinal);
16008        addParseToken(["y", "yy", "yyy", "yyyy"], YEAR);
16009        addParseToken(["yo"], function(input, array, config, token2) {
16010          var match;
16011          if (config._locale._eraYearOrdinalRegex) {
16012            match = input.match(config._locale._eraYearOrdinalRegex);
16013          }
16014          if (config._locale.eraYearOrdinalParse) {
16015            array[YEAR] = config._locale.eraYearOrdinalParse(input, match);
16016          } else {
16017            array[YEAR] = parseInt(input, 10);
16018          }
16019        });
16020        function localeEras(m, format2) {
16021          var i, l, date, eras = this._eras || getLocale("en")._eras;
16022          for (i = 0, l = eras.length; i < l; ++i) {
16023            switch (typeof eras[i].since) {
16024              case "string":
16025                date = hooks(eras[i].since).startOf("day");
16026                eras[i].since = date.valueOf();
16027                break;
16028            }
16029            switch (typeof eras[i].until) {
16030              case "undefined":
16031                eras[i].until = Infinity;
16032                break;
16033              case "string":
16034                date = hooks(eras[i].until).startOf("day").valueOf();
16035                eras[i].until = date.valueOf();
16036                break;
16037            }
16038          }
16039          return eras;
16040        }
16041        function localeErasParse(eraName, format2, strict) {
16042          var i, l, eras = this.eras(), name, abbr, narrow;
16043          eraName = eraName.toUpperCase();
16044          for (i = 0, l = eras.length; i < l; ++i) {
16045            name = eras[i].name.toUpperCase();
16046            abbr = eras[i].abbr.toUpperCase();
16047            narrow = eras[i].narrow.toUpperCase();
16048            if (strict) {
16049              switch (format2) {
16050                case "N":
16051                case "NN":
16052                case "NNN":
16053                  if (abbr === eraName) {
16054                    return eras[i];
16055                  }
16056                  break;
16057                case "NNNN":
16058                  if (name === eraName) {
16059                    return eras[i];
16060                  }
16061                  break;
16062                case "NNNNN":
16063                  if (narrow === eraName) {
16064                    return eras[i];
16065                  }
16066                  break;
16067              }
16068            } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {
16069              return eras[i];
16070            }
16071          }
16072        }
16073        function localeErasConvertYear(era, year) {
16074          var dir = era.since <= era.until ? 1 : -1;
16075          if (year === void 0) {
16076            return hooks(era.since).year();
16077          } else {
16078            return hooks(era.since).year() + (year - era.offset) * dir;
16079          }
16080        }
16081        function getEraName() {
16082          var i, l, val, eras = this.localeData().eras();
16083          for (i = 0, l = eras.length; i < l; ++i) {
16084            val = this.clone().startOf("day").valueOf();
16085            if (eras[i].since <= val && val <= eras[i].until) {
16086              return eras[i].name;
16087            }
16088            if (eras[i].until <= val && val <= eras[i].since) {
16089              return eras[i].name;
16090            }
16091          }
16092          return "";
16093        }
16094        function getEraNarrow() {
16095          var i, l, val, eras = this.localeData().eras();
16096          for (i = 0, l = eras.length; i < l; ++i) {
16097            val = this.clone().startOf("day").valueOf();
16098            if (eras[i].since <= val && val <= eras[i].until) {
16099              return eras[i].narrow;
16100            }
16101            if (eras[i].until <= val && val <= eras[i].since) {
16102              return eras[i].narrow;
16103            }
16104          }
16105          return "";
16106        }
16107        function getEraAbbr() {
16108          var i, l, val, eras = this.localeData().eras();
16109          for (i = 0, l = eras.length; i < l; ++i) {
16110            val = this.clone().startOf("day").valueOf();
16111            if (eras[i].since <= val && val <= eras[i].until) {
16112              return eras[i].abbr;
16113            }
16114            if (eras[i].until <= val && val <= eras[i].since) {
16115              return eras[i].abbr;
16116            }
16117          }
16118          return "";
16119        }
16120        function getEraYear() {
16121          var i, l, dir, val, eras = this.localeData().eras();
16122          for (i = 0, l = eras.length; i < l; ++i) {
16123            dir = eras[i].since <= eras[i].until ? 1 : -1;
16124            val = this.clone().startOf("day").valueOf();
16125            if (eras[i].since <= val && val <= eras[i].until || eras[i].until <= val && val <= eras[i].since) {
16126              return (this.year() - hooks(eras[i].since).year()) * dir + eras[i].offset;
16127            }
16128          }
16129          return this.year();
16130        }
16131        function erasNameRegex(isStrict) {
16132          if (!hasOwnProp(this, "_erasNameRegex")) {
16133            computeErasParse.call(this);
16134          }
16135          return isStrict ? this._erasNameRegex : this._erasRegex;
16136        }
16137        function erasAbbrRegex(isStrict) {
16138          if (!hasOwnProp(this, "_erasAbbrRegex")) {
16139            computeErasParse.call(this);
16140          }
16141          return isStrict ? this._erasAbbrRegex : this._erasRegex;
16142        }
16143        function erasNarrowRegex(isStrict) {
16144          if (!hasOwnProp(this, "_erasNarrowRegex")) {
16145            computeErasParse.call(this);
16146          }
16147          return isStrict ? this._erasNarrowRegex : this._erasRegex;
16148        }
16149        function matchEraAbbr(isStrict, locale2) {
16150          return locale2.erasAbbrRegex(isStrict);
16151        }
16152        function matchEraName(isStrict, locale2) {
16153          return locale2.erasNameRegex(isStrict);
16154        }
16155        function matchEraNarrow(isStrict, locale2) {
16156          return locale2.erasNarrowRegex(isStrict);
16157        }
16158        function matchEraYearOrdinal(isStrict, locale2) {
16159          return locale2._eraYearOrdinalRegex || matchUnsigned;
16160        }
16161        function computeErasParse() {
16162          var abbrPieces = [], namePieces = [], narrowPieces = [], mixedPieces = [], i, l, erasName, erasAbbr, erasNarrow, eras = this.eras();
16163          for (i = 0, l = eras.length; i < l; ++i) {
16164            erasName = regexEscape(eras[i].name);
16165            erasAbbr = regexEscape(eras[i].abbr);
16166            erasNarrow = regexEscape(eras[i].narrow);
16167            namePieces.push(erasName);
16168            abbrPieces.push(erasAbbr);
16169            narrowPieces.push(erasNarrow);
16170            mixedPieces.push(erasName);
16171            mixedPieces.push(erasAbbr);
16172            mixedPieces.push(erasNarrow);
16173          }
16174          this._erasRegex = new RegExp("^(" + mixedPieces.join("|") + ")", "i");
16175          this._erasNameRegex = new RegExp("^(" + namePieces.join("|") + ")", "i");
16176          this._erasAbbrRegex = new RegExp("^(" + abbrPieces.join("|") + ")", "i");
16177          this._erasNarrowRegex = new RegExp(
16178            "^(" + narrowPieces.join("|") + ")",
16179            "i"
16180          );
16181        }
16182        addFormatToken(0, ["gg", 2], 0, function() {
16183          return this.weekYear() % 100;
16184        });
16185        addFormatToken(0, ["GG", 2], 0, function() {
16186          return this.isoWeekYear() % 100;
16187        });
16188        function addWeekYearFormatToken(token2, getter) {
16189          addFormatToken(0, [token2, token2.length], 0, getter);
16190        }
16191        addWeekYearFormatToken("gggg", "weekYear");
16192        addWeekYearFormatToken("ggggg", "weekYear");
16193        addWeekYearFormatToken("GGGG", "isoWeekYear");
16194        addWeekYearFormatToken("GGGGG", "isoWeekYear");
16195        addRegexToken("G", matchSigned);
16196        addRegexToken("g", matchSigned);
16197        addRegexToken("GG", match1to2, match2);
16198        addRegexToken("gg", match1to2, match2);
16199        addRegexToken("GGGG", match1to4, match4);
16200        addRegexToken("gggg", match1to4, match4);
16201        addRegexToken("GGGGG", match1to6, match6);
16202        addRegexToken("ggggg", match1to6, match6);
16203        addWeekParseToken(
16204          ["gggg", "ggggg", "GGGG", "GGGGG"],
16205          function(input, week, config, token2) {
16206            week[token2.substr(0, 2)] = toInt(input);
16207          }
16208        );
16209        addWeekParseToken(["gg", "GG"], function(input, week, config, token2) {
16210          week[token2] = hooks.parseTwoDigitYear(input);
16211        });
16212        function getSetWeekYear(input) {
16213          return getSetWeekYearHelper.call(
16214            this,
16215            input,
16216            this.week(),
16217            this.weekday() + this.localeData()._week.dow,
16218            this.localeData()._week.dow,
16219            this.localeData()._week.doy
16220          );
16221        }
16222        function getSetISOWeekYear(input) {
16223          return getSetWeekYearHelper.call(
16224            this,
16225            input,
16226            this.isoWeek(),
16227            this.isoWeekday(),
16228            1,
16229            4
16230          );
16231        }
16232        function getISOWeeksInYear() {
16233          return weeksInYear(this.year(), 1, 4);
16234        }
16235        function getISOWeeksInISOWeekYear() {
16236          return weeksInYear(this.isoWeekYear(), 1, 4);
16237        }
16238        function getWeeksInYear() {
16239          var weekInfo = this.localeData()._week;
16240          return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
16241        }
16242        function getWeeksInWeekYear() {
16243          var weekInfo = this.localeData()._week;
16244          return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);
16245        }
16246        function getSetWeekYearHelper(input, week, weekday, dow, doy) {
16247          var weeksTarget;
16248          if (input == null) {
16249            return weekOfYear(this, dow, doy).year;
16250          } else {
16251            weeksTarget = weeksInYear(input, dow, doy);
16252            if (week > weeksTarget) {
16253              week = weeksTarget;
16254            }
16255            return setWeekAll.call(this, input, week, weekday, dow, doy);
16256          }
16257        }
16258        function setWeekAll(weekYear, week, weekday, dow, doy) {
16259          var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
16260          this.year(date.getUTCFullYear());
16261          this.month(date.getUTCMonth());
16262          this.date(date.getUTCDate());
16263          return this;
16264        }
16265        addFormatToken("Q", 0, "Qo", "quarter");
16266        addRegexToken("Q", match1);
16267        addParseToken("Q", function(input, array) {
16268          array[MONTH] = (toInt(input) - 1) * 3;
16269        });
16270        function getSetQuarter(input) {
16271          return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);
16272        }
16273        addFormatToken("D", ["DD", 2], "Do", "date");
16274        addRegexToken("D", match1to2, match1to2NoLeadingZero);
16275        addRegexToken("DD", match1to2, match2);
16276        addRegexToken("Do", function(isStrict, locale2) {
16277          return isStrict ? locale2._dayOfMonthOrdinalParse || locale2._ordinalParse : locale2._dayOfMonthOrdinalParseLenient;
16278        });
16279        addParseToken(["D", "DD"], DATE);
16280        addParseToken("Do", function(input, array) {
16281          array[DATE] = toInt(input.match(match1to2)[0]);
16282        });
16283        var getSetDayOfMonth = makeGetSet("Date", true);
16284        addFormatToken("DDD", ["DDDD", 3], "DDDo", "dayOfYear");
16285        addRegexToken("DDD", match1to3);
16286        addRegexToken("DDDD", match3);
16287        addParseToken(["DDD", "DDDD"], function(input, array, config) {
16288          config._dayOfYear = toInt(input);
16289        });
16290        function getSetDayOfYear(input) {
16291          var dayOfYear = Math.round(
16292            (this.clone().startOf("day") - this.clone().startOf("year")) / 864e5
16293          ) + 1;
16294          return input == null ? dayOfYear : this.add(input - dayOfYear, "d");
16295        }
16296        addFormatToken("m", ["mm", 2], 0, "minute");
16297        addRegexToken("m", match1to2, match1to2HasZero);
16298        addRegexToken("mm", match1to2, match2);
16299        addParseToken(["m", "mm"], MINUTE);
16300        var getSetMinute = makeGetSet("Minutes", false);
16301        addFormatToken("s", ["ss", 2], 0, "second");
16302        addRegexToken("s", match1to2, match1to2HasZero);
16303        addRegexToken("ss", match1to2, match2);
16304        addParseToken(["s", "ss"], SECOND);
16305        var getSetSecond = makeGetSet("Seconds", false);
16306        addFormatToken("S", 0, 0, function() {
16307          return ~~(this.millisecond() / 100);
16308        });
16309        addFormatToken(0, ["SS", 2], 0, function() {
16310          return ~~(this.millisecond() / 10);
16311        });
16312        addFormatToken(0, ["SSS", 3], 0, "millisecond");
16313        addFormatToken(0, ["SSSS", 4], 0, function() {
16314          return this.millisecond() * 10;
16315        });
16316        addFormatToken(0, ["SSSSS", 5], 0, function() {
16317          return this.millisecond() * 100;
16318        });
16319        addFormatToken(0, ["SSSSSS", 6], 0, function() {
16320          return this.millisecond() * 1e3;
16321        });
16322        addFormatToken(0, ["SSSSSSS", 7], 0, function() {
16323          return this.millisecond() * 1e4;
16324        });
16325        addFormatToken(0, ["SSSSSSSS", 8], 0, function() {
16326          return this.millisecond() * 1e5;
16327        });
16328        addFormatToken(0, ["SSSSSSSSS", 9], 0, function() {
16329          return this.millisecond() * 1e6;
16330        });
16331        addRegexToken("S", match1to3, match1);
16332        addRegexToken("SS", match1to3, match2);
16333        addRegexToken("SSS", match1to3, match3);
16334        var token, getSetMillisecond;
16335        for (token = "SSSS"; token.length <= 9; token += "S") {
16336          addRegexToken(token, matchUnsigned);
16337        }
16338        function parseMs(input, array) {
16339          array[MILLISECOND] = toInt(("0." + input) * 1e3);
16340        }
16341        for (token = "S"; token.length <= 9; token += "S") {
16342          addParseToken(token, parseMs);
16343        }
16344        getSetMillisecond = makeGetSet("Milliseconds", false);
16345        addFormatToken("z", 0, 0, "zoneAbbr");
16346        addFormatToken("zz", 0, 0, "zoneName");
16347        function getZoneAbbr() {
16348          return this._isUTC ? "UTC" : "";
16349        }
16350        function getZoneName() {
16351          return this._isUTC ? "Coordinated Universal Time" : "";
16352        }
16353        var proto$2 = Moment.prototype;
16354        proto$2.add = add$1;
16355        proto$2.calendar = calendar;
16356        proto$2.clone = clone$1;
16357        proto$2.diff = diff;
16358        proto$2.endOf = endOf;
16359        proto$2.format = format;
16360        proto$2.from = from;
16361        proto$2.fromNow = fromNow;
16362        proto$2.to = to;
16363        proto$2.toNow = toNow;
16364        proto$2.get = stringGet;
16365        proto$2.invalidAt = invalidAt;
16366        proto$2.isAfter = isAfter;
16367        proto$2.isBefore = isBefore;
16368        proto$2.isBetween = isBetween;
16369        proto$2.isSame = isSame;
16370        proto$2.isSameOrAfter = isSameOrAfter;
16371        proto$2.isSameOrBefore = isSameOrBefore;
16372        proto$2.isValid = isValid;
16373        proto$2.lang = lang;
16374        proto$2.locale = locale;
16375        proto$2.localeData = localeData;
16376        proto$2.max = prototypeMax;
16377        proto$2.min = prototypeMin;
16378        proto$2.parsingFlags = parsingFlags;
16379        proto$2.set = stringSet;
16380        proto$2.startOf = startOf;
16381        proto$2.subtract = subtract$1;
16382        proto$2.toArray = toArray;
16383        proto$2.toObject = toObject;
16384        proto$2.toDate = toDate;
16385        proto$2.toISOString = toISOString$1;
16386        proto$2.inspect = inspect;
16387        if (typeof Symbol !== "undefined" && Symbol.for != null) {
16388          proto$2[/* @__PURE__ */ Symbol.for("nodejs.util.inspect.custom")] = function() {
16389            return "Moment<" + this.format() + ">";
16390          };
16391        }
16392        proto$2.toJSON = toJSON;
16393        proto$2.toString = toString;
16394        proto$2.unix = unix;
16395        proto$2.valueOf = valueOf$1;
16396        proto$2.creationData = creationData;
16397        proto$2.eraName = getEraName;
16398        proto$2.eraNarrow = getEraNarrow;
16399        proto$2.eraAbbr = getEraAbbr;
16400        proto$2.eraYear = getEraYear;
16401        proto$2.year = getSetYear;
16402        proto$2.isLeapYear = getIsLeapYear;
16403        proto$2.weekYear = getSetWeekYear;
16404        proto$2.isoWeekYear = getSetISOWeekYear;
16405        proto$2.quarter = proto$2.quarters = getSetQuarter;
16406        proto$2.month = getSetMonth;
16407        proto$2.daysInMonth = getDaysInMonth;
16408        proto$2.week = proto$2.weeks = getSetWeek;
16409        proto$2.isoWeek = proto$2.isoWeeks = getSetISOWeek;
16410        proto$2.weeksInYear = getWeeksInYear;
16411        proto$2.weeksInWeekYear = getWeeksInWeekYear;
16412        proto$2.isoWeeksInYear = getISOWeeksInYear;
16413        proto$2.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;
16414        proto$2.date = getSetDayOfMonth;
16415        proto$2.day = proto$2.days = getSetDayOfWeek;
16416        proto$2.weekday = getSetLocaleDayOfWeek;
16417        proto$2.isoWeekday = getSetISODayOfWeek;
16418        proto$2.dayOfYear = getSetDayOfYear;
16419        proto$2.hour = proto$2.hours = getSetHour;
16420        proto$2.minute = proto$2.minutes = getSetMinute;
16421        proto$2.second = proto$2.seconds = getSetSecond;
16422        proto$2.millisecond = proto$2.milliseconds = getSetMillisecond;
16423        proto$2.utcOffset = getSetOffset;
16424        proto$2.utc = setOffsetToUTC;
16425        proto$2.local = setOffsetToLocal;
16426        proto$2.parseZone = setOffsetToParsedOffset;
16427        proto$2.hasAlignedHourOffset = hasAlignedHourOffset;
16428        proto$2.isDST = isDaylightSavingTime;
16429        proto$2.isLocal = isLocal;
16430        proto$2.isUtcOffset = isUtcOffset;
16431        proto$2.isUtc = isUtc;
16432        proto$2.isUTC = isUtc;
16433        proto$2.zoneAbbr = getZoneAbbr;
16434        proto$2.zoneName = getZoneName;
16435        proto$2.dates = deprecate(
16436          "dates accessor is deprecated. Use date instead.",
16437          getSetDayOfMonth
16438        );
16439        proto$2.months = deprecate(
16440          "months accessor is deprecated. Use month instead",
16441          getSetMonth
16442        );
16443        proto$2.years = deprecate(
16444          "years accessor is deprecated. Use year instead",
16445          getSetYear
16446        );
16447        proto$2.zone = deprecate(
16448          "moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",
16449          getSetZone
16450        );
16451        proto$2.isDSTShifted = deprecate(
16452          "isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",
16453          isDaylightSavingTimeShifted
16454        );
16455        function createUnix(input) {
16456          return createLocal(input * 1e3);
16457        }
16458        function createInZone() {
16459          return createLocal.apply(null, arguments).parseZone();
16460        }
16461        function preParsePostFormat(string) {
16462          return string;
16463        }
16464        var proto$1 = Locale.prototype;
16465        proto$1.calendar = calendar$1;
16466        proto$1.longDateFormat = longDateFormat;
16467        proto$1.invalidDate = invalidDate;
16468        proto$1.ordinal = ordinal;
16469        proto$1.preparse = preParsePostFormat;
16470        proto$1.postformat = preParsePostFormat;
16471        proto$1.relativeTime = relativeTime$1;
16472        proto$1.pastFuture = pastFuture;
16473        proto$1.set = set;
16474        proto$1.eras = localeEras;
16475        proto$1.erasParse = localeErasParse;
16476        proto$1.erasConvertYear = localeErasConvertYear;
16477        proto$1.erasAbbrRegex = erasAbbrRegex;
16478        proto$1.erasNameRegex = erasNameRegex;
16479        proto$1.erasNarrowRegex = erasNarrowRegex;
16480        proto$1.months = localeMonths;
16481        proto$1.monthsShort = localeMonthsShort;
16482        proto$1.monthsParse = localeMonthsParse;
16483        proto$1.monthsRegex = monthsRegex;
16484        proto$1.monthsShortRegex = monthsShortRegex;
16485        proto$1.week = localeWeek;
16486        proto$1.firstDayOfYear = localeFirstDayOfYear;
16487        proto$1.firstDayOfWeek = localeFirstDayOfWeek;
16488        proto$1.weekdays = localeWeekdays;
16489        proto$1.weekdaysMin = localeWeekdaysMin;
16490        proto$1.weekdaysShort = localeWeekdaysShort;
16491        proto$1.weekdaysParse = localeWeekdaysParse;
16492        proto$1.weekdaysRegex = weekdaysRegex;
16493        proto$1.weekdaysShortRegex = weekdaysShortRegex;
16494        proto$1.weekdaysMinRegex = weekdaysMinRegex;
16495        proto$1.isPM = localeIsPM;
16496        proto$1.meridiem = localeMeridiem;
16497        function get$1(format2, index, field, setter) {
16498          var locale2 = getLocale(), utc = createUTC().set(setter, index);
16499          return locale2[field](utc, format2);
16500        }
16501        function listMonthsImpl(format2, index, field) {
16502          if (isNumber(format2)) {
16503            index = format2;
16504            format2 = void 0;
16505          }
16506          format2 = format2 || "";
16507          if (index != null) {
16508            return get$1(format2, index, field, "month");
16509          }
16510          var i, out = [];
16511          for (i = 0; i < 12; i++) {
16512            out[i] = get$1(format2, i, field, "month");
16513          }
16514          return out;
16515        }
16516        function listWeekdaysImpl(localeSorted, format2, index, field) {
16517          if (typeof localeSorted === "boolean") {
16518            if (isNumber(format2)) {
16519              index = format2;
16520              format2 = void 0;
16521            }
16522            format2 = format2 || "";
16523          } else {
16524            format2 = localeSorted;
16525            index = format2;
16526            localeSorted = false;
16527            if (isNumber(format2)) {
16528              index = format2;
16529              format2 = void 0;
16530            }
16531            format2 = format2 || "";
16532          }
16533          var locale2 = getLocale(), shift = localeSorted ? locale2._week.dow : 0, i, out = [];
16534          if (index != null) {
16535            return get$1(format2, (index + shift) % 7, field, "day");
16536          }
16537          for (i = 0; i < 7; i++) {
16538            out[i] = get$1(format2, (i + shift) % 7, field, "day");
16539          }
16540          return out;
16541        }
16542        function listMonths(format2, index) {
16543          return listMonthsImpl(format2, index, "months");
16544        }
16545        function listMonthsShort(format2, index) {
16546          return listMonthsImpl(format2, index, "monthsShort");
16547        }
16548        function listWeekdays(localeSorted, format2, index) {
16549          return listWeekdaysImpl(localeSorted, format2, index, "weekdays");
16550        }
16551        function listWeekdaysShort(localeSorted, format2, index) {
16552          return listWeekdaysImpl(localeSorted, format2, index, "weekdaysShort");
16553        }
16554        function listWeekdaysMin(localeSorted, format2, index) {
16555          return listWeekdaysImpl(localeSorted, format2, index, "weekdaysMin");
16556        }
16557        getSetGlobalLocale("en", {
16558          eras: [
16559            {
16560              since: "0001-01-01",
16561              until: Infinity,
16562              offset: 1,
16563              name: "Anno Domini",
16564              narrow: "AD",
16565              abbr: "AD"
16566            },
16567            {
16568              since: "0000-12-31",
16569              until: -Infinity,
16570              offset: 1,
16571              name: "Before Christ",
16572              narrow: "BC",
16573              abbr: "BC"
16574            }
16575          ],
16576          dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
16577          ordinal: function(number) {
16578            var b = number % 10, output = toInt(number % 100 / 10) === 1 ? "th" : b === 1 ? "st" : b === 2 ? "nd" : b === 3 ? "rd" : "th";
16579            return number + output;
16580          }
16581        });
16582        hooks.lang = deprecate(
16583          "moment.lang is deprecated. Use moment.locale instead.",
16584          getSetGlobalLocale
16585        );
16586        hooks.langData = deprecate(
16587          "moment.langData is deprecated. Use moment.localeData instead.",
16588          getLocale
16589        );
16590        var mathAbs = Math.abs;
16591        function abs$1() {
16592          var data = this._data;
16593          this._milliseconds = mathAbs(this._milliseconds);
16594          this._days = mathAbs(this._days);
16595          this._months = mathAbs(this._months);
16596          data.milliseconds = mathAbs(data.milliseconds);
16597          data.seconds = mathAbs(data.seconds);
16598          data.minutes = mathAbs(data.minutes);
16599          data.hours = mathAbs(data.hours);
16600          data.months = mathAbs(data.months);
16601          data.years = mathAbs(data.years);
16602          return this;
16603        }
16604        function addSubtract(duration, input, value, direction) {
16605          var other = createDuration(input, value);
16606          duration._milliseconds += direction * other._milliseconds;
16607          duration._days += direction * other._days;
16608          duration._months += direction * other._months;
16609          return duration._bubble();
16610        }
16611        function add(input, value) {
16612          return addSubtract(this, input, value, 1);
16613        }
16614        function subtract(input, value) {
16615          return addSubtract(this, input, value, -1);
16616        }
16617        function absCeil(number) {
16618          if (number < 0) {
16619            return Math.floor(number);
16620          } else {
16621            return Math.ceil(number);
16622          }
16623        }
16624        function bubble() {
16625          var milliseconds2 = this._milliseconds, days2 = this._days, months2 = this._months, data = this._data, seconds2, minutes2, hours2, years2, monthsFromDays;
16626          if (!(milliseconds2 >= 0 && days2 >= 0 && months2 >= 0 || milliseconds2 <= 0 && days2 <= 0 && months2 <= 0)) {
16627            milliseconds2 += absCeil(monthsToDays(months2) + days2) * 864e5;
16628            days2 = 0;
16629            months2 = 0;
16630          }
16631          data.milliseconds = milliseconds2 % 1e3;
16632          seconds2 = absFloor(milliseconds2 / 1e3);
16633          data.seconds = seconds2 % 60;
16634          minutes2 = absFloor(seconds2 / 60);
16635          data.minutes = minutes2 % 60;
16636          hours2 = absFloor(minutes2 / 60);
16637          data.hours = hours2 % 24;
16638          days2 += absFloor(hours2 / 24);
16639          monthsFromDays = absFloor(daysToMonths(days2));
16640          months2 += monthsFromDays;
16641          days2 -= absCeil(monthsToDays(monthsFromDays));
16642          years2 = absFloor(months2 / 12);
16643          months2 %= 12;
16644          data.days = days2;
16645          data.months = months2;
16646          data.years = years2;
16647          return this;
16648        }
16649        function daysToMonths(days2) {
16650          return days2 * 4800 / 146097;
16651        }
16652        function monthsToDays(months2) {
16653          return months2 * 146097 / 4800;
16654        }
16655        function as(units) {
16656          if (!this.isValid()) {
16657            return NaN;
16658          }
16659          var days2, months2, milliseconds2 = this._milliseconds;
16660          units = normalizeUnits(units);
16661          if (units === "month" || units === "quarter" || units === "year") {
16662            days2 = this._days + milliseconds2 / 864e5;
16663            months2 = this._months + daysToMonths(days2);
16664            switch (units) {
16665              case "month":
16666                return months2;
16667              case "quarter":
16668                return months2 / 3;
16669              case "year":
16670                return months2 / 12;
16671            }
16672          } else {
16673            days2 = this._days + Math.round(monthsToDays(this._months));
16674            switch (units) {
16675              case "week":
16676                return days2 / 7 + milliseconds2 / 6048e5;
16677              case "day":
16678                return days2 + milliseconds2 / 864e5;
16679              case "hour":
16680                return days2 * 24 + milliseconds2 / 36e5;
16681              case "minute":
16682                return days2 * 1440 + milliseconds2 / 6e4;
16683              case "second":
16684                return days2 * 86400 + milliseconds2 / 1e3;
16685              // Math.floor prevents floating point math errors here
16686              case "millisecond":
16687                return Math.floor(days2 * 864e5) + milliseconds2;
16688              default:
16689                throw new Error("Unknown unit " + units);
16690            }
16691          }
16692        }
16693        function makeAs(alias) {
16694          return function() {
16695            return this.as(alias);
16696          };
16697        }
16698        var asMilliseconds = makeAs("ms"), asSeconds = makeAs("s"), asMinutes = makeAs("m"), asHours = makeAs("h"), asDays = makeAs("d"), asWeeks = makeAs("w"), asMonths = makeAs("M"), asQuarters = makeAs("Q"), asYears = makeAs("y"), valueOf = asMilliseconds;
16699        function clone() {
16700          return createDuration(this);
16701        }
16702        function get(units) {
16703          units = normalizeUnits(units);
16704          return this.isValid() ? this[units + "s"]() : NaN;
16705        }
16706        function makeGetter(name) {
16707          return function() {
16708            return this.isValid() ? this._data[name] : NaN;
16709          };
16710        }
16711        var milliseconds = makeGetter("milliseconds"), seconds = makeGetter("seconds"), minutes = makeGetter("minutes"), hours = makeGetter("hours"), days = makeGetter("days"), months = makeGetter("months"), years = makeGetter("years");
16712        function weeks() {
16713          return absFloor(this.days() / 7);
16714        }
16715        var round = Math.round, thresholds = {
16716          ss: 44,
16717          // a few seconds to seconds
16718          s: 45,
16719          // seconds to minute
16720          m: 45,
16721          // minutes to hour
16722          h: 22,
16723          // hours to day
16724          d: 26,
16725          // days to month/week
16726          w: null,
16727          // weeks to month
16728          M: 11
16729          // months to year
16730        };
16731        function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale2) {
16732          return relativeTimeWithoutPostformat.call(
16733            locale2,
16734            number || 1,
16735            !!withoutSuffix,
16736            string,
16737            isFuture
16738          );
16739        }
16740        function relativeTime(posNegDuration, withoutSuffix, thresholds2, locale2) {
16741          var duration = createDuration(posNegDuration).abs(), seconds2 = round(duration.as("s")), minutes2 = round(duration.as("m")), hours2 = round(duration.as("h")), days2 = round(duration.as("d")), months2 = round(duration.as("M")), weeks2 = round(duration.as("w")), years2 = round(duration.as("y")), a = seconds2 <= thresholds2.ss && ["s", seconds2] || seconds2 < thresholds2.s && ["ss", seconds2] || minutes2 <= 1 && ["m"] || minutes2 < thresholds2.m && ["mm", minutes2] || hours2 <= 1 && ["h"] || hours2 < thresholds2.h && ["hh", hours2] || days2 <= 1 && ["d"] || days2 < thresholds2.d && ["dd", days2];
16742          if (thresholds2.w != null) {
16743            a = a || weeks2 <= 1 && ["w"] || weeks2 < thresholds2.w && ["ww", weeks2];
16744          }
16745          a = a || months2 <= 1 && ["M"] || months2 < thresholds2.M && ["MM", months2] || years2 <= 1 && ["y"] || ["yy", years2];
16746          a[2] = withoutSuffix;
16747          a[3] = +posNegDuration > 0;
16748          a[4] = locale2;
16749          return substituteTimeAgo.apply(null, a);
16750        }
16751        function getSetRelativeTimeRounding(roundingFunction) {
16752          if (roundingFunction === void 0) {
16753            return round;
16754          }
16755          if (typeof roundingFunction === "function") {
16756            round = roundingFunction;
16757            return true;
16758          }
16759          return false;
16760        }
16761        function getSetRelativeTimeThreshold(threshold, limit) {
16762          if (thresholds[threshold] === void 0) {
16763            return false;
16764          }
16765          if (limit === void 0) {
16766            return thresholds[threshold];
16767          }
16768          thresholds[threshold] = limit;
16769          if (threshold === "s") {
16770            thresholds.ss = limit - 1;
16771          }
16772          return true;
16773        }
16774        function humanize(argWithSuffix, argThresholds) {
16775          if (!this.isValid()) {
16776            return this.localeData().invalidDate();
16777          }
16778          var withSuffix = false, th = thresholds, locale2, output;
16779          if (typeof argWithSuffix === "object") {
16780            argThresholds = argWithSuffix;
16781            argWithSuffix = false;
16782          }
16783          if (typeof argWithSuffix === "boolean") {
16784            withSuffix = argWithSuffix;
16785          }
16786          if (typeof argThresholds === "object") {
16787            th = extend(extend({}, thresholds), argThresholds || {});
16788            if (argThresholds.s != null && argThresholds.ss == null) {
16789              th.ss = argThresholds.s - 1;
16790            }
16791          }
16792          locale2 = this.localeData();
16793          output = relativeTime(this, !withSuffix, th, locale2);
16794          if (withSuffix) {
16795            output = pastFutureWithoutPostformat.call(locale2, +this, output);
16796          }
16797          return locale2.postformat(output);
16798        }
16799        var abs = Math.abs;
16800        function sign(x) {
16801          return (x > 0) - (x < 0) || +x;
16802        }
16803        function toISOString() {
16804          if (!this.isValid()) {
16805            return this.localeData().invalidDate();
16806          }
16807          var seconds2 = abs(this._milliseconds) / 1e3, days2 = abs(this._days), months2 = abs(this._months), minutes2, hours2, years2, s, total = this.asSeconds(), totalSign, ymSign, daysSign, hmsSign;
16808          if (!total) {
16809            return "P0D";
16810          }
16811          minutes2 = absFloor(seconds2 / 60);
16812          hours2 = absFloor(minutes2 / 60);
16813          seconds2 %= 60;
16814          minutes2 %= 60;
16815          years2 = absFloor(months2 / 12);
16816          months2 %= 12;
16817          s = seconds2 ? seconds2.toFixed(3).replace(/\.?0+$/, "") : "";
16818          totalSign = total < 0 ? "-" : "";
16819          ymSign = sign(this._months) !== sign(total) ? "-" : "";
16820          daysSign = sign(this._days) !== sign(total) ? "-" : "";
16821          hmsSign = sign(this._milliseconds) !== sign(total) ? "-" : "";
16822          return totalSign + "P" + (years2 ? ymSign + years2 + "Y" : "") + (months2 ? ymSign + months2 + "M" : "") + (days2 ? daysSign + days2 + "D" : "") + (hours2 || minutes2 || seconds2 ? "T" : "") + (hours2 ? hmsSign + hours2 + "H" : "") + (minutes2 ? hmsSign + minutes2 + "M" : "") + (seconds2 ? hmsSign + s + "S" : "");
16823        }
16824        var proto = Duration.prototype;
16825        proto.isValid = isValid$1;
16826        proto.abs = abs$1;
16827        proto.add = add;
16828        proto.subtract = subtract;
16829        proto.as = as;
16830        proto.asMilliseconds = asMilliseconds;
16831        proto.asSeconds = asSeconds;
16832        proto.asMinutes = asMinutes;
16833        proto.asHours = asHours;
16834        proto.asDays = asDays;
16835        proto.asWeeks = asWeeks;
16836        proto.asMonths = asMonths;
16837        proto.asQuarters = asQuarters;
16838        proto.asYears = asYears;
16839        proto.valueOf = valueOf;
16840        proto._bubble = bubble;
16841        proto.clone = clone;
16842        proto.get = get;
16843        proto.milliseconds = milliseconds;
16844        proto.seconds = seconds;
16845        proto.minutes = minutes;
16846        proto.hours = hours;
16847        proto.days = days;
16848        proto.weeks = weeks;
16849        proto.months = months;
16850        proto.years = years;
16851        proto.humanize = humanize;
16852        proto.toISOString = toISOString;
16853        proto.toString = toISOString;
16854        proto.toJSON = toISOString;
16855        proto.locale = locale;
16856        proto.localeData = localeData;
16857        proto.toIsoString = deprecate(
16858          "toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",
16859          toISOString
16860        );
16861        proto.lang = lang;
16862        addFormatToken("X", 0, 0, "unix");
16863        addFormatToken("x", 0, 0, "valueOf");
16864        addRegexToken("x", matchSigned);
16865        addRegexToken("X", matchTimestamp);
16866        addParseToken("X", function(input, array, config) {
16867          config._d = new Date(parseFloat(input) * 1e3);
16868        });
16869        addParseToken("x", function(input, array, config) {
16870          config._d = new Date(toInt(input));
16871        });
16872        hooks.version = "2.31.0";
16873        setHookCallback(createLocal);
16874        hooks.fn = proto$2;
16875        hooks.min = min;
16876        hooks.max = max;
16877        hooks.now = now;
16878        hooks.utc = createUTC;
16879        hooks.unix = createUnix;
16880        hooks.months = listMonths;
16881        hooks.isDate = isDate;
16882        hooks.locale = getSetGlobalLocale;
16883        hooks.invalid = createInvalid$1;
16884        hooks.duration = createDuration;
16885        hooks.isMoment = isMoment;
16886        hooks.weekdays = listWeekdays;
16887        hooks.parseZone = createInZone;
16888        hooks.localeData = getLocale;
16889        hooks.isDuration = isDuration;
16890        hooks.monthsShort = listMonthsShort;
16891        hooks.weekdaysMin = listWeekdaysMin;
16892        hooks.defineLocale = defineLocale;
16893        hooks.updateLocale = updateLocale;
16894        hooks.locales = listLocales;
16895        hooks.weekdaysShort = listWeekdaysShort;
16896        hooks.normalizeUnits = normalizeUnits;
16897        hooks.relativeTimeRounding = getSetRelativeTimeRounding;
16898        hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
16899        hooks.calendarFormat = getCalendarFormat;
16900        hooks.prototype = proto$2;
16901        hooks.HTML5_FMT = {
16902          DATETIME_LOCAL: "YYYY-MM-DDTHH:mm",
16903          // <input type="datetime-local" />
16904          DATETIME_LOCAL_SECONDS: "YYYY-MM-DDTHH:mm:ss",
16905          // <input type="datetime-local" step="1" />
16906          DATETIME_LOCAL_MS: "YYYY-MM-DDTHH:mm:ss.SSS",
16907          // <input type="datetime-local" step="0.001" />
16908          DATE: "YYYY-MM-DD",
16909          // <input type="date" />
16910          TIME: "HH:mm",
16911          // <input type="time" />
16912          TIME_SECONDS: "HH:mm:ss",
16913          // <input type="time" step="1" />
16914          TIME_MS: "HH:mm:ss.SSS",
16915          // <input type="time" step="0.001" />
16916          WEEK: "GGGG-[W]WW",
16917          // <input type="week" />
16918          MONTH: "YYYY-MM"
16919          // <input type="month" />
16920        };
16921        return hooks;
16922      }));
16923    }
16924  });
16925
16926  
vendor: 39,386 bytes, lines 16926-17852
16926// node_modules/pikaday/pikaday.js
16927  var require_pikaday = __commonJS({
16928    "node_modules/pikaday/pikaday.js"(exports, module) {
16929      init_esbuild_shims();
16930      (function(root, factory) {
16931        "use strict";
16932        var moment2;
16933        if (typeof exports === "object") {
16934          try {
16935            moment2 = require_moment();
16936          } catch (e) {
16937          }
16938          module.exports = factory(moment2);
16939        } else if (typeof define === "function" && define.amd) {
16940          define(function(req) {
16941            var id = "moment";
16942            try {
16943              moment2 = req(id);
16944            } catch (e) {
16945            }
16946            return factory(moment2);
16947          });
16948        } else {
16949          root.Pikaday = factory(root.moment);
16950        }
16951      })(exports, function(moment2) {
16952        "use strict";
16953        var hasMoment = typeof moment2 === "function", hasEventListeners = !!window.addEventListener, document2 = window.document, sto = window.setTimeout, addEvent = function(el, e, callback, capture) {
16954          if (hasEventListeners) {
16955            el.addEventListener(e, callback, !!capture);
16956          } else {
16957            el.attachEvent("on" + e, callback);
16958          }
16959        }, removeEvent = function(el, e, callback, capture) {
16960          if (hasEventListeners) {
16961            el.removeEventListener(e, callback, !!capture);
16962          } else {
16963            el.detachEvent("on" + e, callback);
16964          }
16965        }, trim = function(str) {
16966          return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, "");
16967        }, hasClass = function(el, cn) {
16968          return (" " + el.className + " ").indexOf(" " + cn + " ") !== -1;
16969        }, addClass = function(el, cn) {
16970          if (!hasClass(el, cn)) {
16971            el.className = el.className === "" ? cn : el.className + " " + cn;
16972          }
16973        }, removeClass = function(el, cn) {
16974          el.className = trim((" " + el.className + " ").replace(" " + cn + " ", " "));
16975        }, isArray = function(obj) {
16976          return /Array/.test(Object.prototype.toString.call(obj));
16977        }, isDate = function(obj) {
16978          return /Date/.test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime());
16979        }, isWeekend = function(date) {
16980          var day = date.getDay();
16981          return day === 0 || day === 6;
16982        }, isLeapYear = function(year) {
16983          return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
16984        }, getDaysInMonth = function(year, month) {
16985          return [31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
16986        }, setToStartOfDay = function(date) {
16987          if (isDate(date)) date.setHours(0, 0, 0, 0);
16988        }, compareDates = function(a, b) {
16989          return a.getTime() === b.getTime();
16990        }, extend = function(to, from, overwrite) {
16991          var prop, hasProp;
16992          for (prop in from) {
16993            hasProp = to[prop] !== void 0;
16994            if (hasProp && typeof from[prop] === "object" && from[prop] !== null && from[prop].nodeName === void 0) {
16995              if (isDate(from[prop])) {
16996                if (overwrite) {
16997                  to[prop] = new Date(from[prop].getTime());
16998                }
16999              } else if (isArray(from[prop])) {
17000                if (overwrite) {
17001                  to[prop] = from[prop].slice(0);
17002                }
17003              } else {
17004                to[prop] = extend({}, from[prop], overwrite);
17005              }
17006            } else if (overwrite || !hasProp) {
17007              to[prop] = from[prop];
17008            }
17009          }
17010          return to;
17011        }, fireEvent = function(el, eventName, data) {
17012          var ev;
17013          if (document2.createEvent) {
17014            ev = document2.createEvent("HTMLEvents");
17015            ev.initEvent(eventName, true, false);
17016            ev = extend(ev, data);
17017            el.dispatchEvent(ev);
17018          } else if (document2.createEventObject) {
17019            ev = document2.createEventObject();
17020            ev = extend(ev, data);
17021            el.fireEvent("on" + eventName, ev);
17022          }
17023        }, adjustCalendar = function(calendar) {
17024          if (calendar.month < 0) {
17025            calendar.year -= Math.ceil(Math.abs(calendar.month) / 12);
17026            calendar.month += 12;
17027          }
17028          if (calendar.month > 11) {
17029            calendar.year += Math.floor(Math.abs(calendar.month) / 12);
17030            calendar.month -= 12;
17031          }
17032          return calendar;
17033        }, defaults = {
17034          // bind the picker to a form field
17035          field: null,
17036          // automatically show/hide the picker on `field` focus (default `true` if `field` is set)
17037          bound: void 0,
17038          // data-attribute on the input field with an aria assistance text (only applied when `bound` is set)
17039          ariaLabel: "Use the arrow keys to pick a date",
17040          // position of the datepicker, relative to the field (default to bottom & left)
17041          // ('bottom' & 'left' keywords are not used, 'top' & 'right' are modifier on the bottom/left position)
17042          position: "bottom left",
17043          // automatically fit in the viewport even if it means repositioning from the position option
17044          reposition: true,
17045          // the default output format for `.toString()` and `field` value
17046          format: "YYYY-MM-DD",
17047          // the toString function which gets passed a current date object and format
17048          // and returns a string
17049          toString: null,
17050          // used to create date object from current input string
17051          parse: null,
17052          // the initial date to view when first opened
17053          defaultDate: null,
17054          // make the `defaultDate` the initial selected value
17055          setDefaultDate: false,
17056          // first day of week (0: Sunday, 1: Monday etc)
17057          firstDay: 0,
17058          // minimum number of days in the week that gets week number one
17059          // default ISO 8601, week 01 is the week with the first Thursday (4)
17060          firstWeekOfYearMinDays: 4,
17061          // the default flag for moment's strict date parsing
17062          formatStrict: false,
17063          // the minimum/earliest date that can be selected
17064          minDate: null,
17065          // the maximum/latest date that can be selected
17066          maxDate: null,
17067          // number of years either side, or array of upper/lower range
17068          yearRange: 10,
17069          // show week numbers at head of row
17070          showWeekNumber: false,
17071          // Week picker mode
17072          pickWholeWeek: false,
17073          // used internally (don't config outside)
17074          minYear: 0,
17075          maxYear: 9999,
17076          minMonth: void 0,
17077          maxMonth: void 0,
17078          startRange: null,
17079          endRange: null,
17080          isRTL: false,
17081          // Additional text to append to the year in the calendar title
17082          yearSuffix: "",
17083          // Render the month after year in the calendar title
17084          showMonthAfterYear: false,
17085          // Render days of the calendar grid that fall in the next or previous month
17086          showDaysInNextAndPreviousMonths: false,
17087          // Allows user to select days that fall in the next or previous month
17088          enableSelectionDaysInNextAndPreviousMonths: false,
17089          // how many months are visible
17090          numberOfMonths: 1,
17091          // when numberOfMonths is used, this will help you to choose where the main calendar will be (default `left`, can be set to `right`)
17092          // only used for the first display or when a selected date is not visible
17093          mainCalendar: "left",
17094          // Specify a DOM element to render the calendar in
17095          container: void 0,
17096          // Blur field when date is selected
17097          blurFieldOnSelect: true,
17098          // internationalization
17099          i18n: {
17100            previousMonth: "Previous Month",
17101            nextMonth: "Next Month",
17102            months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
17103            weekdays: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
17104            weekdaysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
17105          },
17106          // Theme Classname
17107          theme: null,
17108          // events array
17109          events: [],
17110          // callback function
17111          onSelect: null,
17112          onOpen: null,
17113          onClose: null,
17114          onDraw: null,
17115          // Enable keyboard input
17116          keyboardInput: true
17117        }, renderDayName = function(opts, day, abbr) {
17118          day += opts.firstDay;
17119          while (day >= 7) {
17120            day -= 7;
17121          }
17122          return abbr ? opts.i18n.weekdaysShort[day] : opts.i18n.weekdays[day];
17123        }, renderDay = function(opts) {
17124          var arr = [];
17125          var ariaSelected = "false";
17126          if (opts.isEmpty) {
17127            if (opts.showDaysInNextAndPreviousMonths) {
17128              arr.push("is-outside-current-month");
17129              if (!opts.enableSelectionDaysInNextAndPreviousMonths) {
17130                arr.push("is-selection-disabled");
17131              }
17132            } else {
17133              return '<td class="is-empty"></td>';
17134            }
17135          }
17136          if (opts.isDisabled) {
17137            arr.push("is-disabled");
17138          }
17139          if (opts.isToday) {
17140            arr.push("is-today");
17141          }
17142          if (opts.isSelected) {
17143            arr.push("is-selected");
17144            ariaSelected = "true";
17145          }
17146          if (opts.hasEvent) {
17147            arr.push("has-event");
17148          }
17149          if (opts.isInRange) {
17150            arr.push("is-inrange");
17151          }
17152          if (opts.isStartRange) {
17153            arr.push("is-startrange");
17154          }
17155          if (opts.isEndRange) {
17156            arr.push("is-endrange");
17157          }
17158          return '<td data-day="' + opts.day + '" class="' + arr.join(" ") + '" aria-selected="' + ariaSelected + '"><button class="pika-button pika-day" type="button" data-pika-year="' + opts.year + '" data-pika-month="' + opts.month + '" data-pika-day="' + opts.day + '">' + opts.day + "</button></td>";
17159        }, isoWeek = function(date, firstWeekOfYearMinDays) {
17160          date.setHours(0, 0, 0, 0);
17161          var yearDay = date.getDate(), weekDay = date.getDay(), dayInFirstWeek = firstWeekOfYearMinDays, dayShift = dayInFirstWeek - 1, daysPerWeek = 7, prevWeekDay = function(day) {
17162            return (day + daysPerWeek - 1) % daysPerWeek;
17163          };
17164          date.setDate(yearDay + dayShift - prevWeekDay(weekDay));
17165          var jan4th = new Date(date.getFullYear(), 0, dayInFirstWeek), msPerDay = 24 * 60 * 60 * 1e3, daysBetween = (date.getTime() - jan4th.getTime()) / msPerDay, weekNum = 1 + Math.round((daysBetween - dayShift + prevWeekDay(jan4th.getDay())) / daysPerWeek);
17166          return weekNum;
17167        }, renderWeek = function(d, m, y, firstWeekOfYearMinDays) {
17168          var date = new Date(y, m, d), week = hasMoment ? moment2(date).isoWeek() : isoWeek(date, firstWeekOfYearMinDays);
17169          return '<td class="pika-week">' + week + "</td>";
17170        }, renderRow = function(days, isRTL, pickWholeWeek, isRowSelected) {
17171          return '<tr class="pika-row' + (pickWholeWeek ? " pick-whole-week" : "") + (isRowSelected ? " is-selected" : "") + '">' + (isRTL ? days.reverse() : days).join("") + "</tr>";
17172        }, renderBody = function(rows) {
17173          return "<tbody>" + rows.join("") + "</tbody>";
17174        }, renderHead = function(opts) {
17175          var i, arr = [];
17176          if (opts.showWeekNumber) {
17177            arr.push("<th></th>");
17178          }
17179          for (i = 0; i < 7; i++) {
17180            arr.push('<th scope="col"><abbr title="' + renderDayName(opts, i) + '">' + renderDayName(opts, i, true) + "</abbr></th>");
17181          }
17182          return "<thead><tr>" + (opts.isRTL ? arr.reverse() : arr).join("") + "</tr></thead>";
17183        }, renderTitle = function(instance, c, year, month, refYear, randId) {
17184          var i, j, arr, opts = instance._o, isMinYear = year === opts.minYear, isMaxYear = year === opts.maxYear, html = '<div id="' + randId + '" class="pika-title" role="heading" aria-live="assertive">', monthHtml, yearHtml, prev = true, next = true;
17185          for (arr = [], i = 0; i < 12; i++) {
17186            arr.push('<option value="' + (year === refYear ? i - c : 12 + i - c) + '"' + (i === month ? ' selected="selected"' : "") + (isMinYear && i < opts.minMonth || isMaxYear && i > opts.maxMonth ? ' disabled="disabled"' : "") + ">" + opts.i18n.months[i] + "</option>");
17187          }
17188          monthHtml = '<div class="pika-label">' + opts.i18n.months[month] + '<select class="pika-select pika-select-month" tabindex="-1">' + arr.join("") + "</select></div>";
17189          if (isArray(opts.yearRange)) {
17190            i = opts.yearRange[0];
17191            j = opts.yearRange[1] + 1;
17192          } else {
17193            i = year - opts.yearRange;
17194            j = 1 + year + opts.yearRange;
17195          }
17196          for (arr = []; i < j && i <= opts.maxYear; i++) {
17197            if (i >= opts.minYear) {
17198              arr.push('<option value="' + i + '"' + (i === year ? ' selected="selected"' : "") + ">" + i + "</option>");
17199            }
17200          }
17201          yearHtml = '<div class="pika-label">' + year + opts.yearSuffix + '<select class="pika-select pika-select-year" tabindex="-1">' + arr.join("") + "</select></div>";
17202          if (opts.showMonthAfterYear) {
17203            html += yearHtml + monthHtml;
17204          } else {
17205            html += monthHtml + yearHtml;
17206          }
17207          if (isMinYear && (month === 0 || opts.minMonth >= month)) {
17208            prev = false;
17209          }
17210          if (isMaxYear && (month === 11 || opts.maxMonth <= month)) {
17211            next = false;
17212          }
17213          if (c === 0) {
17214            html += '<button class="pika-prev' + (prev ? "" : " is-disabled") + '" type="button">' + opts.i18n.previousMonth + "</button>";
17215          }
17216          if (c === instance._o.numberOfMonths - 1) {
17217            html += '<button class="pika-next' + (next ? "" : " is-disabled") + '" type="button">' + opts.i18n.nextMonth + "</button>";
17218          }
17219          return html += "</div>";
17220        }, renderTable = function(opts, data, randId) {
17221          return '<table cellpadding="0" cellspacing="0" class="pika-table" role="grid" aria-labelledby="' + randId + '">' + renderHead(opts) + renderBody(data) + "</table>";
17222        }, Pikaday3 = function(options) {
17223          var self2 = this, opts = self2.config(options);
17224          self2._onMouseDown = function(e) {
17225            if (!self2._v) {
17226              return;
17227            }
17228            e = e || window.event;
17229            var target = e.target || e.srcElement;
17230            if (!target) {
17231              return;
17232            }
17233            if (!hasClass(target, "is-disabled")) {
17234              if (hasClass(target, "pika-button") && !hasClass(target, "is-empty") && !hasClass(target.parentNode, "is-disabled")) {
17235                self2.setDate(new Date(target.getAttribute("data-pika-year"), target.getAttribute("data-pika-month"), target.getAttribute("data-pika-day")));
17236                if (opts.bound) {
17237                  sto(function() {
17238                    self2.hide();
17239                    if (opts.blurFieldOnSelect && opts.field) {
17240                      opts.field.blur();
17241                    }
17242                  }, 100);
17243                }
17244              } else if (hasClass(target, "pika-prev")) {
17245                self2.prevMonth();
17246              } else if (hasClass(target, "pika-next")) {
17247                self2.nextMonth();
17248              }
17249            }
17250            if (!hasClass(target, "pika-select")) {
17251              if (e.preventDefault) {
17252                e.preventDefault();
17253              } else {
17254                e.returnValue = false;
17255                return false;
17256              }
17257            } else {
17258              self2._c = true;
17259            }
17260          };
17261          self2._onChange = function(e) {
17262            e = e || window.event;
17263            var target = e.target || e.srcElement;
17264            if (!target) {
17265              return;
17266            }
17267            if (hasClass(target, "pika-select-month")) {
17268              self2.gotoMonth(target.value);
17269            } else if (hasClass(target, "pika-select-year")) {
17270              self2.gotoYear(target.value);
17271            }
17272          };
17273          self2._onKeyChange = function(e) {
17274            e = e || window.event;
17275            if (self2.isVisible()) {
17276              switch (e.keyCode) {
17277                case 13:
17278                case 27:
17279                  if (opts.field) {
17280                    opts.field.blur();
17281                  }
17282                  break;
17283                case 37:
17284                  self2.adjustDate("subtract", 1);
17285                  break;
17286                case 38:
17287                  self2.adjustDate("subtract", 7);
17288                  break;
17289                case 39:
17290                  self2.adjustDate("add", 1);
17291                  break;
17292                case 40:
17293                  self2.adjustDate("add", 7);
17294                  break;
17295                case 8:
17296                case 46:
17297                  self2.setDate(null);
17298                  break;
17299              }
17300            }
17301          };
17302          self2._parseFieldValue = function() {
17303            if (opts.parse) {
17304              return opts.parse(opts.field.value, opts.format);
17305            } else if (hasMoment) {
17306              var date = moment2(opts.field.value, opts.format, opts.formatStrict);
17307              return date && date.isValid() ? date.toDate() : null;
17308            } else {
17309              return new Date(Date.parse(opts.field.value));
17310            }
17311          };
17312          self2._onInputChange = function(e) {
17313            var date;
17314            if (e.firedBy === self2) {
17315              return;
17316            }
17317            date = self2._parseFieldValue();
17318            if (isDate(date)) {
17319              self2.setDate(date);
17320            }
17321            if (!self2._v) {
17322              self2.show();
17323            }
17324          };
17325          self2._onInputFocus = function() {
17326            self2.show();
17327          };
17328          self2._onInputClick = function() {
17329            self2.show();
17330          };
17331          self2._onInputBlur = function() {
17332            var pEl = document2.activeElement;
17333            do {
17334              if (hasClass(pEl, "pika-single")) {
17335                return;
17336              }
17337            } while (pEl = pEl.parentNode);
17338            if (!self2._c) {
17339              self2._b = sto(function() {
17340                self2.hide();
17341              }, 50);
17342            }
17343            self2._c = false;
17344          };
17345          self2._onClick = function(e) {
17346            e = e || window.event;
17347            var target = e.target || e.srcElement, pEl = target;
17348            if (!target) {
17349              return;
17350            }
17351            if (!hasEventListeners && hasClass(target, "pika-select")) {
17352              if (!target.onchange) {
17353                target.setAttribute("onchange", "return;");
17354                addEvent(target, "change", self2._onChange);
17355              }
17356            }
17357            do {
17358              if (hasClass(pEl, "pika-single") || pEl === opts.trigger) {
17359                return;
17360              }
17361            } while (pEl = pEl.parentNode);
17362            if (self2._v && target !== opts.trigger && pEl !== opts.trigger) {
17363              self2.hide();
17364            }
17365          };
17366          self2.el = document2.createElement("div");
17367          self2.el.className = "pika-single" + (opts.isRTL ? " is-rtl" : "") + (opts.theme ? " " + opts.theme : "");
17368          addEvent(self2.el, "mousedown", self2._onMouseDown, true);
17369          addEvent(self2.el, "touchend", self2._onMouseDown, true);
17370          addEvent(self2.el, "change", self2._onChange);
17371          if (opts.keyboardInput) {
17372            addEvent(document2, "keydown", self2._onKeyChange);
17373          }
17374          if (opts.field) {
17375            if (opts.container) {
17376              opts.container.appendChild(self2.el);
17377            } else if (opts.bound) {
17378              document2.body.appendChild(self2.el);
17379            } else {
17380              opts.field.parentNode.insertBefore(self2.el, opts.field.nextSibling);
17381            }
17382            addEvent(opts.field, "change", self2._onInputChange);
17383            if (!opts.defaultDate) {
17384              opts.defaultDate = self2._parseFieldValue();
17385              opts.setDefaultDate = true;
17386            }
17387          }
17388          var defDate = opts.defaultDate;
17389          if (isDate(defDate)) {
17390            if (opts.setDefaultDate) {
17391              self2.setDate(defDate, true);
17392            } else {
17393              self2.gotoDate(defDate);
17394            }
17395          } else {
17396            self2.gotoDate(/* @__PURE__ */ new Date());
17397          }
17398          if (opts.bound) {
17399            this.hide();
17400            self2.el.className += " is-bound";
17401            addEvent(opts.trigger, "click", self2._onInputClick);
17402            addEvent(opts.trigger, "focus", self2._onInputFocus);
17403            addEvent(opts.trigger, "blur", self2._onInputBlur);
17404          } else {
17405            this.show();
17406          }
17407        };
17408        Pikaday3.prototype = {
17409          /**
17410           * configure functionality
17411           */
17412          config: function(options) {
17413            if (!this._o) {
17414              this._o = extend({}, defaults, true);
17415            }
17416            var opts = extend(this._o, options, true);
17417            opts.isRTL = !!opts.isRTL;
17418            opts.field = opts.field && opts.field.nodeName ? opts.field : null;
17419            opts.theme = typeof opts.theme === "string" && opts.theme ? opts.theme : null;
17420            opts.bound = !!(opts.bound !== void 0 ? opts.field && opts.bound : opts.field);
17421            opts.trigger = opts.trigger && opts.trigger.nodeName ? opts.trigger : opts.field;
17422            opts.disableWeekends = !!opts.disableWeekends;
17423            opts.disableDayFn = typeof opts.disableDayFn === "function" ? opts.disableDayFn : null;
17424            var nom = parseInt(opts.numberOfMonths, 10) || 1;
17425            opts.numberOfMonths = nom > 4 ? 4 : nom;
17426            if (!isDate(opts.minDate)) {
17427              opts.minDate = false;
17428            }
17429            if (!isDate(opts.maxDate)) {
17430              opts.maxDate = false;
17431            }
17432            if (opts.minDate && opts.maxDate && opts.maxDate < opts.minDate) {
17433              opts.maxDate = opts.minDate = false;
17434            }
17435            if (opts.minDate) {
17436              this.setMinDate(opts.minDate);
17437            }
17438            if (opts.maxDate) {
17439              this.setMaxDate(opts.maxDate);
17440            }
17441            if (isArray(opts.yearRange)) {
17442              var fallback = (/* @__PURE__ */ new Date()).getFullYear() - 10;
17443              opts.yearRange[0] = parseInt(opts.yearRange[0], 10) || fallback;
17444              opts.yearRange[1] = parseInt(opts.yearRange[1], 10) || fallback;
17445            } else {
17446              opts.yearRange = Math.abs(parseInt(opts.yearRange, 10)) || defaults.yearRange;
17447              if (opts.yearRange > 100) {
17448                opts.yearRange = 100;
17449              }
17450            }
17451            return opts;
17452          },
17453          /**
17454           * return a formatted string of the current selection (using Moment.js if available)
17455           */
17456          toString: function(format) {
17457            format = format || this._o.format;
17458            if (!isDate(this._d)) {
17459              return "";
17460            }
17461            if (this._o.toString) {
17462              return this._o.toString(this._d, format);
17463            }
17464            if (hasMoment) {
17465              return moment2(this._d).format(format);
17466            }
17467            return this._d.toDateString();
17468          },
17469          /**
17470           * return a Moment.js object of the current selection (if available)
17471           */
17472          getMoment: function() {
17473            return hasMoment ? moment2(this._d) : null;
17474          },
17475          /**
17476           * set the current selection from a Moment.js object (if available)
17477           */
17478          setMoment: function(date, preventOnSelect) {
17479            if (hasMoment && moment2.isMoment(date)) {
17480              this.setDate(date.toDate(), preventOnSelect);
17481            }
17482          },
17483          /**
17484           * return a Date object of the current selection
17485           */
17486          getDate: function() {
17487            return isDate(this._d) ? new Date(this._d.getTime()) : null;
17488          },
17489          /**
17490           * set the current selection
17491           */
17492          setDate: function(date, preventOnSelect) {
17493            if (!date) {
17494              this._d = null;
17495              if (this._o.field) {
17496                this._o.field.value = "";
17497                fireEvent(this._o.field, "change", { firedBy: this });
17498              }
17499              return this.draw();
17500            }
17501            if (typeof date === "string") {
17502              date = new Date(Date.parse(date));
17503            }
17504            if (!isDate(date)) {
17505              return;
17506            }
17507            var min = this._o.minDate, max = this._o.maxDate;
17508            if (isDate(min) && date < min) {
17509              date = min;
17510            } else if (isDate(max) && date > max) {
17511              date = max;
17512            }
17513            this._d = new Date(date.getTime());
17514            setToStartOfDay(this._d);
17515            this.gotoDate(this._d);
17516            if (this._o.field) {
17517              this._o.field.value = this.toString();
17518              fireEvent(this._o.field, "change", { firedBy: this });
17519            }
17520            if (!preventOnSelect && typeof this._o.onSelect === "function") {
17521              this._o.onSelect.call(this, this.getDate());
17522            }
17523          },
17524          /**
17525           * clear and reset the date
17526           */
17527          clear: function() {
17528            this.setDate(null);
17529          },
17530          /**
17531           * change view to a specific date
17532           */
17533          gotoDate: function(date) {
17534            var newCalendar = true;
17535            if (!isDate(date)) {
17536              return;
17537            }
17538            if (this.calendars) {
17539              var firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1), lastVisibleDate = new Date(this.calendars[this.calendars.length - 1].year, this.calendars[this.calendars.length - 1].month, 1), visibleDate = date.getTime();
17540              lastVisibleDate.setMonth(lastVisibleDate.getMonth() + 1);
17541              lastVisibleDate.setDate(lastVisibleDate.getDate() - 1);
17542              newCalendar = visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate;
17543            }
17544            if (newCalendar) {
17545              this.calendars = [{
17546                month: date.getMonth(),
17547                year: date.getFullYear()
17548              }];
17549              if (this._o.mainCalendar === "right") {
17550                this.calendars[0].month += 1 - this._o.numberOfMonths;
17551              }
17552            }
17553            this.adjustCalendars();
17554          },
17555          adjustDate: function(sign, days) {
17556            var day = this.getDate() || /* @__PURE__ */ new Date();
17557            var difference = parseInt(days) * 24 * 60 * 60 * 1e3;
17558            var newDay;
17559            if (sign === "add") {
17560              newDay = new Date(day.valueOf() + difference);
17561            } else if (sign === "subtract") {
17562              newDay = new Date(day.valueOf() - difference);
17563            }
17564            this.setDate(newDay);
17565          },
17566          adjustCalendars: function() {
17567            this.calendars[0] = adjustCalendar(this.calendars[0]);
17568            for (var c = 1; c < this._o.numberOfMonths; c++) {
17569              this.calendars[c] = adjustCalendar({
17570                month: this.calendars[0].month + c,
17571                year: this.calendars[0].year
17572              });
17573            }
17574            this.draw();
17575          },
17576          gotoToday: function() {
17577            this.gotoDate(/* @__PURE__ */ new Date());
17578          },
17579          /**
17580           * change view to a specific month (zero-index, e.g. 0: January)
17581           */
17582          gotoMonth: function(month) {
17583            if (!isNaN(month)) {
17584              this.calendars[0].month = parseInt(month, 10);
17585              this.adjustCalendars();
17586            }
17587          },
17588          nextMonth: function() {
17589            this.calendars[0].month++;
17590            this.adjustCalendars();
17591          },
17592          prevMonth: function() {
17593            this.calendars[0].month--;
17594            this.adjustCalendars();
17595          },
17596          /**
17597           * change view to a specific full year (e.g. "2012")
17598           */
17599          gotoYear: function(year) {
17600            if (!isNaN(year)) {
17601              this.calendars[0].year = parseInt(year, 10);
17602              this.adjustCalendars();
17603            }
17604          },
17605          /**
17606           * change the minDate
17607           */
17608          setMinDate: function(value) {
17609            if (value instanceof Date) {
17610              setToStartOfDay(value);
17611              this._o.minDate = value;
17612              this._o.minYear = value.getFullYear();
17613              this._o.minMonth = value.getMonth();
17614            } else {
17615              this._o.minDate = defaults.minDate;
17616              this._o.minYear = defaults.minYear;
17617              this._o.minMonth = defaults.minMonth;
17618              this._o.startRange = defaults.startRange;
17619            }
17620            this.draw();
17621          },
17622          /**
17623           * change the maxDate
17624           */
17625          setMaxDate: function(value) {
17626            if (value instanceof Date) {
17627              setToStartOfDay(value);
17628              this._o.maxDate = value;
17629              this._o.maxYear = value.getFullYear();
17630              this._o.maxMonth = value.getMonth();
17631            } else {
17632              this._o.maxDate = defaults.maxDate;
17633              this._o.maxYear = defaults.maxYear;
17634              this._o.maxMonth = defaults.maxMonth;
17635              this._o.endRange = defaults.endRange;
17636            }
17637            this.draw();
17638          },
17639          setStartRange: function(value) {
17640            this._o.startRange = value;
17641          },
17642          setEndRange: function(value) {
17643            this._o.endRange = value;
17644          },
17645          /**
17646           * refresh the HTML
17647           */
17648          draw: function(force) {
17649            if (!this._v && !force) {
17650              return;
17651            }
17652            var opts = this._o, minYear = opts.minYear, maxYear = opts.maxYear, minMonth = opts.minMonth, maxMonth = opts.maxMonth, html = "", randId;
17653            if (this._y <= minYear) {
17654              this._y = minYear;
17655              if (!isNaN(minMonth) && this._m < minMonth) {
17656                this._m = minMonth;
17657              }
17658            }
17659            if (this._y >= maxYear) {
17660              this._y = maxYear;
17661              if (!isNaN(maxMonth) && this._m > maxMonth) {
17662                this._m = maxMonth;
17663              }
17664            }
17665            for (var c = 0; c < opts.numberOfMonths; c++) {
17666              randId = "pika-title-" + Math.random().toString(36).replace(/[^a-z]+/g, "").substr(0, 2);
17667              html += '<div class="pika-lendar">' + renderTitle(this, c, this.calendars[c].year, this.calendars[c].month, this.calendars[0].year, randId) + this.render(this.calendars[c].year, this.calendars[c].month, randId) + "</div>";
17668            }
17669            this.el.innerHTML = html;
17670            if (opts.bound) {
17671              if (opts.field.type !== "hidden") {
17672                sto(function() {
17673                  opts.trigger.focus();
17674                }, 1);
17675              }
17676            }
17677            if (typeof this._o.onDraw === "function") {
17678              this._o.onDraw(this);
17679            }
17680            if (opts.bound) {
17681              opts.field.setAttribute("aria-label", opts.ariaLabel);
17682            }
17683          },
17684          adjustPosition: function() {
17685            var field, pEl, width, height, viewportWidth, viewportHeight, scrollTop, left, top, clientRect, leftAligned, bottomAligned;
17686            if (this._o.container) return;
17687            this.el.style.position = "absolute";
17688            field = this._o.trigger;
17689            pEl = field;
17690            width = this.el.offsetWidth;
17691            height = this.el.offsetHeight;
17692            viewportWidth = window.innerWidth || document2.documentElement.clientWidth;
17693            viewportHeight = window.innerHeight || document2.documentElement.clientHeight;
17694            scrollTop = window.pageYOffset || document2.body.scrollTop || document2.documentElement.scrollTop;
17695            leftAligned = true;
17696            bottomAligned = true;
17697            if (typeof field.getBoundingClientRect === "function") {
17698              clientRect = field.getBoundingClientRect();
17699              left = clientRect.left + window.pageXOffset;
17700              top = clientRect.bottom + window.pageYOffset;
17701            } else {
17702              left = pEl.offsetLeft;
17703              top = pEl.offsetTop + pEl.offsetHeight;
17704              while (pEl = pEl.offsetParent) {
17705                left += pEl.offsetLeft;
17706                top += pEl.offsetTop;
17707              }
17708            }
17709            if (this._o.reposition && left + width > viewportWidth || this._o.position.indexOf("right") > -1 && left - width + field.offsetWidth > 0) {
17710              left = left - width + field.offsetWidth;
17711              leftAligned = false;
17712            }
17713            if (this._o.reposition && top + height > viewportHeight + scrollTop || this._o.position.indexOf("top") > -1 && top - height - field.offsetHeight > 0) {
17714              top = top - height - field.offsetHeight;
17715              bottomAligned = false;
17716            }
17717            this.el.style.left = left + "px";
17718            this.el.style.top = top + "px";
17719            addClass(this.el, leftAligned ? "left-aligned" : "right-aligned");
17720            addClass(this.el, bottomAligned ? "bottom-aligned" : "top-aligned");
17721            removeClass(this.el, !leftAligned ? "left-aligned" : "right-aligned");
17722            removeClass(this.el, !bottomAligned ? "bottom-aligned" : "top-aligned");
17723          },
17724          /**
17725           * render HTML for a particular month
17726           */
17727          render: function(year, month, randId) {
17728            var opts = this._o, now = /* @__PURE__ */ new Date(), days = getDaysInMonth(year, month), before = new Date(year, month, 1).getDay(), data = [], row = [];
17729            setToStartOfDay(now);
17730            if (opts.firstDay > 0) {
17731              before -= opts.firstDay;
17732              if (before < 0) {
17733                before += 7;
17734              }
17735            }
17736            var previousMonth = month === 0 ? 11 : month - 1, nextMonth = month === 11 ? 0 : month + 1, yearOfPreviousMonth = month === 0 ? year - 1 : year, yearOfNextMonth = month === 11 ? year + 1 : year, daysInPreviousMonth = getDaysInMonth(yearOfPreviousMonth, previousMonth);
17737            var cells = days + before, after = cells;
17738            while (after > 7) {
17739              after -= 7;
17740            }
17741            cells += 7 - after;
17742            var isWeekSelected = false;
17743            for (var i = 0, r = 0; i < cells; i++) {
17744              var day = new Date(year, month, 1 + (i - before)), isSelected = isDate(this._d) ? compareDates(day, this._d) : false, isToday = compareDates(day, now), hasEvent = opts.events.indexOf(day.toDateString()) !== -1 ? true : false, isEmpty = i < before || i >= days + before, dayNumber = 1 + (i - before), monthNumber = month, yearNumber = year, isStartRange = opts.startRange && compareDates(opts.startRange, day), isEndRange = opts.endRange && compareDates(opts.endRange, day), isInRange = opts.startRange && opts.endRange && opts.startRange < day && day < opts.endRange, isDisabled = opts.minDate && day < opts.minDate || opts.maxDate && day > opts.maxDate || opts.disableWeekends && isWeekend(day) || opts.disableDayFn && opts.disableDayFn(day);
17745              if (isEmpty) {
17746                if (i < before) {
17747                  dayNumber = daysInPreviousMonth + dayNumber;
17748                  monthNumber = previousMonth;
17749                  yearNumber = yearOfPreviousMonth;
17750                } else {
17751                  dayNumber = dayNumber - days;
17752                  monthNumber = nextMonth;
17753                  yearNumber = yearOfNextMonth;
17754                }
17755              }
17756              var dayConfig = {
17757                day: dayNumber,
17758                month: monthNumber,
17759                year: yearNumber,
17760                hasEvent,
17761                isSelected,
17762                isToday,
17763                isDisabled,
17764                isEmpty,
17765                isStartRange,
17766                isEndRange,
17767                isInRange,
17768                showDaysInNextAndPreviousMonths: opts.showDaysInNextAndPreviousMonths,
17769                enableSelectionDaysInNextAndPreviousMonths: opts.enableSelectionDaysInNextAndPreviousMonths
17770              };
17771              if (opts.pickWholeWeek && isSelected) {
17772                isWeekSelected = true;
17773              }
17774              row.push(renderDay(dayConfig));
17775              if (++r === 7) {
17776                if (opts.showWeekNumber) {
17777                  row.unshift(renderWeek(i - before, month, year, opts.firstWeekOfYearMinDays));
17778                }
17779                data.push(renderRow(row, opts.isRTL, opts.pickWholeWeek, isWeekSelected));
17780                row = [];
17781                r = 0;
17782                isWeekSelected = false;
17783              }
17784            }
17785            return renderTable(opts, data, randId);
17786          },
17787          isVisible: function() {
17788            return this._v;
17789          },
17790          show: function() {
17791            if (!this.isVisible()) {
17792              this._v = true;
17793              this.draw();
17794              removeClass(this.el, "is-hidden");
17795              if (this._o.bound) {
17796                addEvent(document2, "click", this._onClick);
17797                this.adjustPosition();
17798              }
17799              if (typeof this._o.onOpen === "function") {
17800                this._o.onOpen.call(this);
17801              }
17802            }
17803          },
17804          hide: function() {
17805            var v = this._v;
17806            if (v !== false) {
17807              if (this._o.bound) {
17808                removeEvent(document2, "click", this._onClick);
17809              }
17810              if (!this._o.container) {
17811                this.el.style.position = "static";
17812                this.el.style.left = "auto";
17813                this.el.style.top = "auto";
17814              }
17815              addClass(this.el, "is-hidden");
17816              this._v = false;
17817              if (v !== void 0 && typeof this._o.onClose === "function") {
17818                this._o.onClose.call(this);
17819              }
17820            }
17821          },
17822          /**
17823           * GAME OVER
17824           */
17825          destroy: function() {
17826            var opts = this._o;
17827            this.hide();
17828            removeEvent(this.el, "mousedown", this._onMouseDown, true);
17829            removeEvent(this.el, "touchend", this._onMouseDown, true);
17830            removeEvent(this.el, "change", this._onChange);
17831            if (opts.keyboardInput) {
17832              removeEvent(document2, "keydown", this._onKeyChange);
17833            }
17834            if (opts.field) {
17835              removeEvent(opts.field, "change", this._onInputChange);
17836              if (opts.bound) {
17837                removeEvent(opts.trigger, "click", this._onInputClick);
17838                removeEvent(opts.trigger, "focus", this._onInputFocus);
17839                removeEvent(opts.trigger, "blur", this._onInputBlur);
17840              }
17841            }
17842            if (this.el.parentNode) {
17843              this.el.parentNode.removeChild(this.el);
17844            }
17845          }
17846        };
17847        return Pikaday3;
17848      });
17849    }
17850  });
17851
17852  
vendor: 83,084 bytes, lines 17852-19811
17852// node_modules/slick-carousel/slick/slick.js
17853  var require_slick = __commonJS({
17854    "node_modules/slick-carousel/slick/slick.js"(exports, module) {
17855      init_esbuild_shims();
17856      (function(factory) {
17857        "use strict";
17858        if (typeof define === "function" && define.amd) {
17859          define(["jquery"], factory);
17860        } else if (typeof exports !== "undefined") {
17861          module.exports = factory(require_jquery());
17862        } else {
17863          factory(jQuery);
17864        }
17865      })(function($3) {
17866        "use strict";
17867        var Slick = window.Slick || {};
17868        Slick = /* @__PURE__ */ (function() {
17869          var instanceUid = 0;
17870          function Slick2(element, settings) {
17871            var _ = this, dataSettings;
17872            _.defaults = {
17873              accessibility: true,
17874              adaptiveHeight: false,
17875              appendArrows: $3(element),
17876              appendDots: $3(element),
17877              arrows: true,
17878              asNavFor: null,
17879              prevArrow: '<button class="slick-prev" aria-label="Previous" type="button">Previous</button>',
17880              nextArrow: '<button class="slick-next" aria-label="Next" type="button">Next</button>',
17881              autoplay: false,
17882              autoplaySpeed: 3e3,
17883              centerMode: false,
17884              centerPadding: "50px",
17885              cssEase: "ease",
17886              customPaging: function(slider, i) {
17887                return $3('<button type="button" />').text(i + 1);
17888              },
17889              dots: false,
17890              dotsClass: "slick-dots",
17891              draggable: true,
17892              easing: "linear",
17893              edgeFriction: 0.35,
17894              fade: false,
17895              focusOnSelect: false,
17896              focusOnChange: false,
17897              infinite: true,
17898              initialSlide: 0,
17899              lazyLoad: "ondemand",
17900              mobileFirst: false,
17901              pauseOnHover: true,
17902              pauseOnFocus: true,
17903              pauseOnDotsHover: false,
17904              respondTo: "window",
17905              responsive: null,
17906              rows: 1,
17907              rtl: false,
17908              slide: "",
17909              slidesPerRow: 1,
17910              slidesToShow: 1,
17911              slidesToScroll: 1,
17912              speed: 500,
17913              swipe: true,
17914              swipeToSlide: false,
17915              touchMove: true,
17916              touchThreshold: 5,
17917              useCSS: true,
17918              useTransform: true,
17919              variableWidth: false,
17920              vertical: false,
17921              verticalSwiping: false,
17922              waitForAnimate: true,
17923              zIndex: 1e3
17924            };
17925            _.initials = {
17926              animating: false,
17927              dragging: false,
17928              autoPlayTimer: null,
17929              currentDirection: 0,
17930              currentLeft: null,
17931              currentSlide: 0,
17932              direction: 1,
17933              $dots: null,
17934              listWidth: null,
17935              listHeight: null,
17936              loadIndex: 0,
17937              $nextArrow: null,
17938              $prevArrow: null,
17939              scrolling: false,
17940              slideCount: null,
17941              slideWidth: null,
17942              $slideTrack: null,
17943              $slides: null,
17944              sliding: false,
17945              slideOffset: 0,
17946              swipeLeft: null,
17947              swiping: false,
17948              $list: null,
17949              touchObject: {},
17950              transformsEnabled: false,
17951              unslicked: false
17952            };
17953            $3.extend(_, _.initials);
17954            _.activeBreakpoint = null;
17955            _.animType = null;
17956            _.animProp = null;
17957            _.breakpoints = [];
17958            _.breakpointSettings = [];
17959            _.cssTransitions = false;
17960            _.focussed = false;
17961            _.interrupted = false;
17962            _.hidden = "hidden";
17963            _.paused = true;
17964            _.positionProp = null;
17965            _.respondTo = null;
17966            _.rowCount = 1;
17967            _.shouldClick = true;
17968            _.$slider = $3(element);
17969            _.$slidesCache = null;
17970            _.transformType = null;
17971            _.transitionType = null;
17972            _.visibilityChange = "visibilitychange";
17973            _.windowWidth = 0;
17974            _.windowTimer = null;
17975            dataSettings = $3(element).data("slick") || {};
17976            _.options = $3.extend({}, _.defaults, settings, dataSettings);
17977            _.currentSlide = _.options.initialSlide;
17978            _.originalSettings = _.options;
17979            if (typeof document.mozHidden !== "undefined") {
17980              _.hidden = "mozHidden";
17981              _.visibilityChange = "mozvisibilitychange";
17982            } else if (typeof document.webkitHidden !== "undefined") {
17983              _.hidden = "webkitHidden";
17984              _.visibilityChange = "webkitvisibilitychange";
17985            }
17986            _.autoPlay = $3.proxy(_.autoPlay, _);
17987            _.autoPlayClear = $3.proxy(_.autoPlayClear, _);
17988            _.autoPlayIterator = $3.proxy(_.autoPlayIterator, _);
17989            _.changeSlide = $3.proxy(_.changeSlide, _);
17990            _.clickHandler = $3.proxy(_.clickHandler, _);
17991            _.selectHandler = $3.proxy(_.selectHandler, _);
17992            _.setPosition = $3.proxy(_.setPosition, _);
17993            _.swipeHandler = $3.proxy(_.swipeHandler, _);
17994            _.dragHandler = $3.proxy(_.dragHandler, _);
17995            _.keyHandler = $3.proxy(_.keyHandler, _);
17996            _.instanceUid = instanceUid++;
17997            _.htmlExpr = /^(?:\s*(<[\w\W]+>)[^>]*)$/;
17998            _.registerBreakpoints();
17999            _.init(true);
18000          }
18001          return Slick2;
18002        })();
18003        Slick.prototype.activateADA = function() {
18004          var _ = this;
18005          _.$slideTrack.find(".slick-active").attr({
18006            "aria-hidden": "false"
18007          }).find("a, input, button, select").attr({
18008            "tabindex": "0"
18009          });
18010        };
18011        Slick.prototype.addSlide = Slick.prototype.slickAdd = function(markup, index, addBefore) {
18012          var _ = this;
18013          if (typeof index === "boolean") {
18014            addBefore = index;
18015            index = null;
18016          } else if (index < 0 || index >= _.slideCount) {
18017            return false;
18018          }
18019          _.unload();
18020          if (typeof index === "number") {
18021            if (index === 0 && _.$slides.length === 0) {
18022              $3(markup).appendTo(_.$slideTrack);
18023            } else if (addBefore) {
18024              $3(markup).insertBefore(_.$slides.eq(index));
18025            } else {
18026              $3(markup).insertAfter(_.$slides.eq(index));
18027            }
18028          } else {
18029            if (addBefore === true) {
18030              $3(markup).prependTo(_.$slideTrack);
18031            } else {
18032              $3(markup).appendTo(_.$slideTrack);
18033            }
18034          }
18035          _.$slides = _.$slideTrack.children(this.options.slide);
18036          _.$slideTrack.children(this.options.slide).detach();
18037          _.$slideTrack.append(_.$slides);
18038          _.$slides.each(function(index2, element) {
18039            $3(element).attr("data-slick-index", index2);
18040          });
18041          _.$slidesCache = _.$slides;
18042          _.reinit();
18043        };
18044        Slick.prototype.animateHeight = function() {
18045          var _ = this;
18046          if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {
18047            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);
18048            _.$list.animate({
18049              height: targetHeight
18050            }, _.options.speed);
18051          }
18052        };
18053        Slick.prototype.animateSlide = function(targetLeft, callback) {
18054          var animProps = {}, _ = this;
18055          _.animateHeight();
18056          if (_.options.rtl === true && _.options.vertical === false) {
18057            targetLeft = -targetLeft;
18058          }
18059          if (_.transformsEnabled === false) {
18060            if (_.options.vertical === false) {
18061              _.$slideTrack.animate({
18062                left: targetLeft
18063              }, _.options.speed, _.options.easing, callback);
18064            } else {
18065              _.$slideTrack.animate({
18066                top: targetLeft
18067              }, _.options.speed, _.options.easing, callback);
18068            }
18069          } else {
18070            if (_.cssTransitions === false) {
18071              if (_.options.rtl === true) {
18072                _.currentLeft = -_.currentLeft;
18073              }
18074              $3({
18075                animStart: _.currentLeft
18076              }).animate({
18077                animStart: targetLeft
18078              }, {
18079                duration: _.options.speed,
18080                easing: _.options.easing,
18081                step: function(now) {
18082                  now = Math.ceil(now);
18083                  if (_.options.vertical === false) {
18084                    animProps[_.animType] = "translate(" + now + "px, 0px)";
18085                    _.$slideTrack.css(animProps);
18086                  } else {
18087                    animProps[_.animType] = "translate(0px," + now + "px)";
18088                    _.$slideTrack.css(animProps);
18089                  }
18090                },
18091                complete: function() {
18092                  if (callback) {
18093                    callback.call();
18094                  }
18095                }
18096              });
18097            } else {
18098              _.applyTransition();
18099              targetLeft = Math.ceil(targetLeft);
18100              if (_.options.vertical === false) {
18101                animProps[_.animType] = "translate3d(" + targetLeft + "px, 0px, 0px)";
18102              } else {
18103                animProps[_.animType] = "translate3d(0px," + targetLeft + "px, 0px)";
18104              }
18105              _.$slideTrack.css(animProps);
18106              if (callback) {
18107                setTimeout(function() {
18108                  _.disableTransition();
18109                  callback.call();
18110                }, _.options.speed);
18111              }
18112            }
18113          }
18114        };
18115        Slick.prototype.getNavTarget = function() {
18116          var _ = this, asNavFor = _.options.asNavFor;
18117          if (asNavFor && asNavFor !== null) {
18118            asNavFor = $3(asNavFor).not(_.$slider);
18119          }
18120          return asNavFor;
18121        };
18122        Slick.prototype.asNavFor = function(index) {
18123          var _ = this, asNavFor = _.getNavTarget();
18124          if (asNavFor !== null && typeof asNavFor === "object") {
18125            asNavFor.each(function() {
18126              var target = $3(this).slick("getSlick");
18127              if (!target.unslicked) {
18128                target.slideHandler(index, true);
18129              }
18130            });
18131          }
18132        };
18133        Slick.prototype.applyTransition = function(slide) {
18134          var _ = this, transition = {};
18135          if (_.options.fade === false) {
18136            transition[_.transitionType] = _.transformType + " " + _.options.speed + "ms " + _.options.cssEase;
18137          } else {
18138            transition[_.transitionType] = "opacity " + _.options.speed + "ms " + _.options.cssEase;
18139          }
18140          if (_.options.fade === false) {
18141            _.$slideTrack.css(transition);
18142          } else {
18143            _.$slides.eq(slide).css(transition);
18144          }
18145        };
18146        Slick.prototype.autoPlay = function() {
18147          var _ = this;
18148          _.autoPlayClear();
18149          if (_.slideCount > _.options.slidesToShow) {
18150            _.autoPlayTimer = setInterval(_.autoPlayIterator, _.options.autoplaySpeed);
18151          }
18152        };
18153        Slick.prototype.autoPlayClear = function() {
18154          var _ = this;
18155          if (_.autoPlayTimer) {
18156            clearInterval(_.autoPlayTimer);
18157          }
18158        };
18159        Slick.prototype.autoPlayIterator = function() {
18160          var _ = this, slideTo = _.currentSlide + _.options.slidesToScroll;
18161          if (!_.paused && !_.interrupted && !_.focussed) {
18162            if (_.options.infinite === false) {
18163              if (_.direction === 1 && _.currentSlide + 1 === _.slideCount - 1) {
18164                _.direction = 0;
18165              } else if (_.direction === 0) {
18166                slideTo = _.currentSlide - _.options.slidesToScroll;
18167                if (_.currentSlide - 1 === 0) {
18168                  _.direction = 1;
18169                }
18170              }
18171            }
18172            _.slideHandler(slideTo);
18173          }
18174        };
18175        Slick.prototype.buildArrows = function() {
18176          var _ = this;
18177          if (_.options.arrows === true) {
18178            _.$prevArrow = $3(_.options.prevArrow).addClass("slick-arrow");
18179            _.$nextArrow = $3(_.options.nextArrow).addClass("slick-arrow");
18180            if (_.slideCount > _.options.slidesToShow) {
18181              _.$prevArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex");
18182              _.$nextArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex");
18183              if (_.htmlExpr.test(_.options.prevArrow)) {
18184                _.$prevArrow.prependTo(_.options.appendArrows);
18185              }
18186              if (_.htmlExpr.test(_.options.nextArrow)) {
18187                _.$nextArrow.appendTo(_.options.appendArrows);
18188              }
18189              if (_.options.infinite !== true) {
18190                _.$prevArrow.addClass("slick-disabled").attr("aria-disabled", "true");
18191              }
18192            } else {
18193              _.$prevArrow.add(_.$nextArrow).addClass("slick-hidden").attr({
18194                "aria-disabled": "true",
18195                "tabindex": "-1"
18196              });
18197            }
18198          }
18199        };
18200        Slick.prototype.buildDots = function() {
18201          var _ = this, i, dot;
18202          if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
18203            _.$slider.addClass("slick-dotted");
18204            dot = $3("<ul />").addClass(_.options.dotsClass);
18205            for (i = 0; i <= _.getDotCount(); i += 1) {
18206              dot.append($3("<li />").append(_.options.customPaging.call(this, _, i)));
18207            }
18208            _.$dots = dot.appendTo(_.options.appendDots);
18209            _.$dots.find("li").first().addClass("slick-active");
18210          }
18211        };
18212        Slick.prototype.buildOut = function() {
18213          var _ = this;
18214          _.$slides = _.$slider.children(_.options.slide + ":not(.slick-cloned)").addClass("slick-slide");
18215          _.slideCount = _.$slides.length;
18216          _.$slides.each(function(index, element) {
18217            $3(element).attr("data-slick-index", index).data("originalStyling", $3(element).attr("style") || "");
18218          });
18219          _.$slider.addClass("slick-slider");
18220          _.$slideTrack = _.slideCount === 0 ? $3('<div class="slick-track"/>').appendTo(_.$slider) : _.$slides.wrapAll('<div class="slick-track"/>').parent();
18221          _.$list = _.$slideTrack.wrap(
18222            '<div class="slick-list"/>'
18223          ).parent();
18224          _.$slideTrack.css("opacity", 0);
18225          if (_.options.centerMode === true || _.options.swipeToSlide === true) {
18226            _.options.slidesToScroll = 1;
18227          }
18228          $3("img[data-lazy]", _.$slider).not("[src]").addClass("slick-loading");
18229          _.setupInfinite();
18230          _.buildArrows();
18231          _.buildDots();
18232          _.updateDots();
18233          _.setSlideClasses(typeof _.currentSlide === "number" ? _.currentSlide : 0);
18234          if (_.options.draggable === true) {
18235            _.$list.addClass("draggable");
18236          }
18237        };
18238        Slick.prototype.buildRows = function() {
18239          var _ = this, a, b, c, newSlides, numOfSlides, originalSlides, slidesPerSection;
18240          newSlides = document.createDocumentFragment();
18241          originalSlides = _.$slider.children();
18242          if (_.options.rows > 0) {
18243            slidesPerSection = _.options.slidesPerRow * _.options.rows;
18244            numOfSlides = Math.ceil(
18245              originalSlides.length / slidesPerSection
18246            );
18247            for (a = 0; a < numOfSlides; a++) {
18248              var slide = document.createElement("div");
18249              for (b = 0; b < _.options.rows; b++) {
18250                var row = document.createElement("div");
18251                for (c = 0; c < _.options.slidesPerRow; c++) {
18252                  var target = a * slidesPerSection + (b * _.options.slidesPerRow + c);
18253                  if (originalSlides.get(target)) {
18254                    row.appendChild(originalSlides.get(target));
18255                  }
18256                }
18257                slide.appendChild(row);
18258              }
18259              newSlides.appendChild(slide);
18260            }
18261            _.$slider.empty().append(newSlides);
18262            _.$slider.children().children().children().css({
18263              "width": 100 / _.options.slidesPerRow + "%",
18264              "display": "inline-block"
18265            });
18266          }
18267        };
18268        Slick.prototype.checkResponsive = function(initial, forceUpdate) {
18269          var _ = this, breakpoint, targetBreakpoint, respondToWidth, triggerBreakpoint = false;
18270          var sliderWidth = _.$slider.width();
18271          var windowWidth = window.innerWidth || $3(window).width();
18272          if (_.respondTo === "window") {
18273            respondToWidth = windowWidth;
18274          } else if (_.respondTo === "slider") {
18275            respondToWidth = sliderWidth;
18276          } else if (_.respondTo === "min") {
18277            respondToWidth = Math.min(windowWidth, sliderWidth);
18278          }
18279          if (_.options.responsive && _.options.responsive.length && _.options.responsive !== null) {
18280            targetBreakpoint = null;
18281            for (breakpoint in _.breakpoints) {
18282              if (_.breakpoints.hasOwnProperty(breakpoint)) {
18283                if (_.originalSettings.mobileFirst === false) {
18284                  if (respondToWidth < _.breakpoints[breakpoint]) {
18285                    targetBreakpoint = _.breakpoints[breakpoint];
18286                  }
18287                } else {
18288                  if (respondToWidth > _.breakpoints[breakpoint]) {
18289                    targetBreakpoint = _.breakpoints[breakpoint];
18290                  }
18291                }
18292              }
18293            }
18294            if (targetBreakpoint !== null) {
18295              if (_.activeBreakpoint !== null) {
18296                if (targetBreakpoint !== _.activeBreakpoint || forceUpdate) {
18297                  _.activeBreakpoint = targetBreakpoint;
18298                  if (_.breakpointSettings[targetBreakpoint] === "unslick") {
18299                    _.unslick(targetBreakpoint);
18300                  } else {
18301                    _.options = $3.extend(
18302                      {},
18303                      _.originalSettings,
18304                      _.breakpointSettings[targetBreakpoint]
18305                    );
18306                    if (initial === true) {
18307                      _.currentSlide = _.options.initialSlide;
18308                    }
18309                    _.refresh(initial);
18310                  }
18311                  triggerBreakpoint = targetBreakpoint;
18312                }
18313              } else {
18314                _.activeBreakpoint = targetBreakpoint;
18315                if (_.breakpointSettings[targetBreakpoint] === "unslick") {
18316                  _.unslick(targetBreakpoint);
18317                } else {
18318                  _.options = $3.extend(
18319                    {},
18320                    _.originalSettings,
18321                    _.breakpointSettings[targetBreakpoint]
18322                  );
18323                  if (initial === true) {
18324                    _.currentSlide = _.options.initialSlide;
18325                  }
18326                  _.refresh(initial);
18327                }
18328                triggerBreakpoint = targetBreakpoint;
18329              }
18330            } else {
18331              if (_.activeBreakpoint !== null) {
18332                _.activeBreakpoint = null;
18333                _.options = _.originalSettings;
18334                if (initial === true) {
18335                  _.currentSlide = _.options.initialSlide;
18336                }
18337                _.refresh(initial);
18338                triggerBreakpoint = targetBreakpoint;
18339              }
18340            }
18341            if (!initial && triggerBreakpoint !== false) {
18342              _.$slider.trigger("breakpoint", [_, triggerBreakpoint]);
18343            }
18344          }
18345        };
18346        Slick.prototype.changeSlide = function(event2, dontAnimate) {
18347          var _ = this, $target = $3(event2.currentTarget), indexOffset, slideOffset, unevenOffset;
18348          if ($target.is("a")) {
18349            event2.preventDefault();
18350          }
18351          if (!$target.is("li")) {
18352            $target = $target.closest("li");
18353          }
18354          unevenOffset = _.slideCount % _.options.slidesToScroll !== 0;
18355          indexOffset = unevenOffset ? 0 : (_.slideCount - _.currentSlide) % _.options.slidesToScroll;
18356          switch (event2.data.message) {
18357            case "previous":
18358              slideOffset = indexOffset === 0 ? _.options.slidesToScroll : _.options.slidesToShow - indexOffset;
18359              if (_.slideCount > _.options.slidesToShow) {
18360                _.slideHandler(_.currentSlide - slideOffset, false, dontAnimate);
18361              }
18362              break;
18363            case "next":
18364              slideOffset = indexOffset === 0 ? _.options.slidesToScroll : indexOffset;
18365              if (_.slideCount > _.options.slidesToShow) {
18366                _.slideHandler(_.currentSlide + slideOffset, false, dontAnimate);
18367              }
18368              break;
18369            case "index":
18370              var index = event2.data.index === 0 ? 0 : event2.data.index || $target.index() * _.options.slidesToScroll;
18371              _.slideHandler(_.checkNavigable(index), false, dontAnimate);
18372              $target.children().trigger("focus");
18373              break;
18374            default:
18375              return;
18376          }
18377        };
18378        Slick.prototype.checkNavigable = function(index) {
18379          var _ = this, navigables, prevNavigable;
18380          navigables = _.getNavigableIndexes();
18381          prevNavigable = 0;
18382          if (index > navigables[navigables.length - 1]) {
18383            index = navigables[navigables.length - 1];
18384          } else {
18385            for (var n in navigables) {
18386              if (index < navigables[n]) {
18387                index = prevNavigable;
18388                break;
18389              }
18390              prevNavigable = navigables[n];
18391            }
18392          }
18393          return index;
18394        };
18395        Slick.prototype.cleanUpEvents = function() {
18396          var _ = this;
18397          if (_.options.dots && _.$dots !== null) {
18398            $3("li", _.$dots).off("click.slick", _.changeSlide).off("mouseenter.slick", $3.proxy(_.interrupt, _, true)).off("mouseleave.slick", $3.proxy(_.interrupt, _, false));
18399            if (_.options.accessibility === true) {
18400              _.$dots.off("keydown.slick", _.keyHandler);
18401            }
18402          }
18403          _.$slider.off("focus.slick blur.slick");
18404          if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
18405            _.$prevArrow && _.$prevArrow.off("click.slick", _.changeSlide);
18406            _.$nextArrow && _.$nextArrow.off("click.slick", _.changeSlide);
18407            if (_.options.accessibility === true) {
18408              _.$prevArrow && _.$prevArrow.off("keydown.slick", _.keyHandler);
18409              _.$nextArrow && _.$nextArrow.off("keydown.slick", _.keyHandler);
18410            }
18411          }
18412          _.$list.off("touchstart.slick mousedown.slick", _.swipeHandler);
18413          _.$list.off("touchmove.slick mousemove.slick", _.swipeHandler);
18414          _.$list.off("touchend.slick mouseup.slick", _.swipeHandler);
18415          _.$list.off("touchcancel.slick mouseleave.slick", _.swipeHandler);
18416          _.$list.off("click.slick", _.clickHandler);
18417          $3(document).off(_.visibilityChange, _.visibility);
18418          _.cleanUpSlideEvents();
18419          if (_.options.accessibility === true) {
18420            _.$list.off("keydown.slick", _.keyHandler);
18421          }
18422          if (_.options.focusOnSelect === true) {
18423            $3(_.$slideTrack).children().off("click.slick", _.selectHandler);
18424          }
18425          $3(window).off("orientationchange.slick.slick-" + _.instanceUid, _.orientationChange);
18426          $3(window).off("resize.slick.slick-" + _.instanceUid, _.resize);
18427          $3("[draggable!=true]", _.$slideTrack).off("dragstart", _.preventDefault);
18428          $3(window).off("load.slick.slick-" + _.instanceUid, _.setPosition);
18429        };
18430        Slick.prototype.cleanUpSlideEvents = function() {
18431          var _ = this;
18432          _.$list.off("mouseenter.slick", $3.proxy(_.interrupt, _, true));
18433          _.$list.off("mouseleave.slick", $3.proxy(_.interrupt, _, false));
18434        };
18435        Slick.prototype.cleanUpRows = function() {
18436          var _ = this, originalSlides;
18437          if (_.options.rows > 0) {
18438            originalSlides = _.$slides.children().children();
18439            originalSlides.removeAttr("style");
18440            _.$slider.empty().append(originalSlides);
18441          }
18442        };
18443        Slick.prototype.clickHandler = function(event2) {
18444          var _ = this;
18445          if (_.shouldClick === false) {
18446            event2.stopImmediatePropagation();
18447            event2.stopPropagation();
18448            event2.preventDefault();
18449          }
18450        };
18451        Slick.prototype.destroy = function(refresh) {
18452          var _ = this;
18453          _.autoPlayClear();
18454          _.touchObject = {};
18455          _.cleanUpEvents();
18456          $3(".slick-cloned", _.$slider).detach();
18457          if (_.$dots) {
18458            _.$dots.remove();
18459          }
18460          if (_.$prevArrow && _.$prevArrow.length) {
18461            _.$prevArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display", "");
18462            if (_.htmlExpr.test(_.options.prevArrow)) {
18463              _.$prevArrow.remove();
18464            }
18465          }
18466          if (_.$nextArrow && _.$nextArrow.length) {
18467            _.$nextArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display", "");
18468            if (_.htmlExpr.test(_.options.nextArrow)) {
18469              _.$nextArrow.remove();
18470            }
18471          }
18472          if (_.$slides) {
18473            _.$slides.removeClass("slick-slide slick-active slick-center slick-visible slick-current").removeAttr("aria-hidden").removeAttr("data-slick-index").each(function() {
18474              $3(this).attr("style", $3(this).data("originalStyling"));
18475            });
18476            _.$slideTrack.children(this.options.slide).detach();
18477            _.$slideTrack.detach();
18478            _.$list.detach();
18479            _.$slider.append(_.$slides);
18480          }
18481          _.cleanUpRows();
18482          _.$slider.removeClass("slick-slider");
18483          _.$slider.removeClass("slick-initialized");
18484          _.$slider.removeClass("slick-dotted");
18485          _.unslicked = true;
18486          if (!refresh) {
18487            _.$slider.trigger("destroy", [_]);
18488          }
18489        };
18490        Slick.prototype.disableTransition = function(slide) {
18491          var _ = this, transition = {};
18492          transition[_.transitionType] = "";
18493          if (_.options.fade === false) {
18494            _.$slideTrack.css(transition);
18495          } else {
18496            _.$slides.eq(slide).css(transition);
18497          }
18498        };
18499        Slick.prototype.fadeSlide = function(slideIndex, callback) {
18500          var _ = this;
18501          if (_.cssTransitions === false) {
18502            _.$slides.eq(slideIndex).css({
18503              zIndex: _.options.zIndex
18504            });
18505            _.$slides.eq(slideIndex).animate({
18506              opacity: 1
18507            }, _.options.speed, _.options.easing, callback);
18508          } else {
18509            _.applyTransition(slideIndex);
18510            _.$slides.eq(slideIndex).css({
18511              opacity: 1,
18512              zIndex: _.options.zIndex
18513            });
18514            if (callback) {
18515              setTimeout(function() {
18516                _.disableTransition(slideIndex);
18517                callback.call();
18518              }, _.options.speed);
18519            }
18520          }
18521        };
18522        Slick.prototype.fadeSlideOut = function(slideIndex) {
18523          var _ = this;
18524          if (_.cssTransitions === false) {
18525            _.$slides.eq(slideIndex).animate({
18526              opacity: 0,
18527              zIndex: _.options.zIndex - 2
18528            }, _.options.speed, _.options.easing);
18529          } else {
18530            _.applyTransition(slideIndex);
18531            _.$slides.eq(slideIndex).css({
18532              opacity: 0,
18533              zIndex: _.options.zIndex - 2
18534            });
18535          }
18536        };
18537        Slick.prototype.filterSlides = Slick.prototype.slickFilter = function(filter) {
18538          var _ = this;
18539          if (filter !== null) {
18540            _.$slidesCache = _.$slides;
18541            _.unload();
18542            _.$slideTrack.children(this.options.slide).detach();
18543            _.$slidesCache.filter(filter).appendTo(_.$slideTrack);
18544            _.reinit();
18545          }
18546        };
18547        Slick.prototype.focusHandler = function() {
18548          var _ = this;
18549          _.$slider.off("focus.slick blur.slick").on("focus.slick blur.slick", "*", function(event2) {
18550            event2.stopImmediatePropagation();
18551            var $sf = $3(this);
18552            setTimeout(function() {
18553              if (_.options.pauseOnFocus) {
18554                _.focussed = $sf.is(":focus");
18555                _.autoPlay();
18556              }
18557            }, 0);
18558          });
18559        };
18560        Slick.prototype.getCurrent = Slick.prototype.slickCurrentSlide = function() {
18561          var _ = this;
18562          return _.currentSlide;
18563        };
18564        Slick.prototype.getDotCount = function() {
18565          var _ = this;
18566          var breakPoint = 0;
18567          var counter = 0;
18568          var pagerQty = 0;
18569          if (_.options.infinite === true) {
18570            if (_.slideCount <= _.options.slidesToShow) {
18571              ++pagerQty;
18572            } else {
18573              while (breakPoint < _.slideCount) {
18574                ++pagerQty;
18575                breakPoint = counter + _.options.slidesToScroll;
18576                counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
18577              }
18578            }
18579          } else if (_.options.centerMode === true) {
18580            pagerQty = _.slideCount;
18581          } else if (!_.options.asNavFor) {
18582            pagerQty = 1 + Math.ceil((_.slideCount - _.options.slidesToShow) / _.options.slidesToScroll);
18583          } else {
18584            while (breakPoint < _.slideCount) {
18585              ++pagerQty;
18586              breakPoint = counter + _.options.slidesToScroll;
18587              counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
18588            }
18589          }
18590          return pagerQty - 1;
18591        };
18592        Slick.prototype.getLeft = function(slideIndex) {
18593          var _ = this, targetLeft, verticalHeight, verticalOffset = 0, targetSlide, coef;
18594          _.slideOffset = 0;
18595          verticalHeight = _.$slides.first().outerHeight(true);
18596          if (_.options.infinite === true) {
18597            if (_.slideCount > _.options.slidesToShow) {
18598              _.slideOffset = _.slideWidth * _.options.slidesToShow * -1;
18599              coef = -1;
18600              if (_.options.vertical === true && _.options.centerMode === true) {
18601                if (_.options.slidesToShow === 2) {
18602                  coef = -1.5;
18603                } else if (_.options.slidesToShow === 1) {
18604                  coef = -2;
18605                }
18606              }
18607              verticalOffset = verticalHeight * _.options.slidesToShow * coef;
18608            }
18609            if (_.slideCount % _.options.slidesToScroll !== 0) {
18610              if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) {
18611                if (slideIndex > _.slideCount) {
18612                  _.slideOffset = (_.options.slidesToShow - (slideIndex - _.slideCount)) * _.slideWidth * -1;
18613                  verticalOffset = (_.options.slidesToShow - (slideIndex - _.slideCount)) * verticalHeight * -1;
18614                } else {
18615                  _.slideOffset = _.slideCount % _.options.slidesToScroll * _.slideWidth * -1;
18616                  verticalOffset = _.slideCount % _.options.slidesToScroll * verticalHeight * -1;
18617                }
18618              }
18619            }
18620          } else {
18621            if (slideIndex + _.options.slidesToShow > _.slideCount) {
18622              _.slideOffset = (slideIndex + _.options.slidesToShow - _.slideCount) * _.slideWidth;
18623              verticalOffset = (slideIndex + _.options.slidesToShow - _.slideCount) * verticalHeight;
18624            }
18625          }
18626          if (_.slideCount <= _.options.slidesToShow) {
18627            _.slideOffset = 0;
18628            verticalOffset = 0;
18629          }
18630          if (_.options.centerMode === true && _.slideCount <= _.options.slidesToShow) {
18631            _.slideOffset = _.slideWidth * Math.floor(_.options.slidesToShow) / 2 - _.slideWidth * _.slideCount / 2;
18632          } else if (_.options.centerMode === true && _.options.infinite === true) {
18633            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth;
18634          } else if (_.options.centerMode === true) {
18635            _.slideOffset = 0;
18636            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2);
18637          }
18638          if (_.options.vertical === false) {
18639            targetLeft = slideIndex * _.slideWidth * -1 + _.slideOffset;
18640          } else {
18641            targetLeft = slideIndex * verticalHeight * -1 + verticalOffset;
18642          }
18643          if (_.options.variableWidth === true) {
18644            if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {
18645              targetSlide = _.$slideTrack.children(".slick-slide").eq(slideIndex);
18646            } else {
18647              targetSlide = _.$slideTrack.children(".slick-slide").eq(slideIndex + _.options.slidesToShow);
18648            }
18649            if (_.options.rtl === true) {
18650              if (targetSlide[0]) {
18651                targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;
18652              } else {
18653                targetLeft = 0;
18654              }
18655            } else {
18656              targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;
18657            }
18658            if (_.options.centerMode === true) {
18659              if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {
18660                targetSlide = _.$slideTrack.children(".slick-slide").eq(slideIndex);
18661              } else {
18662                targetSlide = _.$slideTrack.children(".slick-slide").eq(slideIndex + _.options.slidesToShow + 1);
18663              }
18664              if (_.options.rtl === true) {
18665                if (targetSlide[0]) {
18666                  targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;
18667                } else {
18668                  targetLeft = 0;
18669                }
18670              } else {
18671                targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;
18672              }
18673              targetLeft += (_.$list.width() - targetSlide.outerWidth()) / 2;
18674            }
18675          }
18676          return targetLeft;
18677        };
18678        Slick.prototype.getOption = Slick.prototype.slickGetOption = function(option) {
18679          var _ = this;
18680          return _.options[option];
18681        };
18682        Slick.prototype.getNavigableIndexes = function() {
18683          var _ = this, breakPoint = 0, counter = 0, indexes = [], max;
18684          if (_.options.infinite === false) {
18685            max = _.slideCount;
18686          } else {
18687            breakPoint = _.options.slidesToScroll * -1;
18688            counter = _.options.slidesToScroll * -1;
18689            max = _.slideCount * 2;
18690          }
18691          while (breakPoint < max) {
18692            indexes.push(breakPoint);
18693            breakPoint = counter + _.options.slidesToScroll;
18694            counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
18695          }
18696          return indexes;
18697        };
18698        Slick.prototype.getSlick = function() {
18699          return this;
18700        };
18701        Slick.prototype.getSlideCount = function() {
18702          var _ = this, slidesTraversed, swipedSlide, centerOffset;
18703          centerOffset = _.options.centerMode === true ? _.slideWidth * Math.floor(_.options.slidesToShow / 2) : 0;
18704          if (_.options.swipeToSlide === true) {
18705            _.$slideTrack.find(".slick-slide").each(function(index, slide) {
18706              if (slide.offsetLeft - centerOffset + $3(slide).outerWidth() / 2 > _.swipeLeft * -1) {
18707                swipedSlide = slide;
18708                return false;
18709              }
18710            });
18711            slidesTraversed = Math.abs($3(swipedSlide).attr("data-slick-index") - _.currentSlide) || 1;
18712            return slidesTraversed;
18713          } else {
18714            return _.options.slidesToScroll;
18715          }
18716        };
18717        Slick.prototype.goTo = Slick.prototype.slickGoTo = function(slide, dontAnimate) {
18718          var _ = this;
18719          _.changeSlide({
18720            data: {
18721              message: "index",
18722              index: parseInt(slide)
18723            }
18724          }, dontAnimate);
18725        };
18726        Slick.prototype.init = function(creation) {
18727          var _ = this;
18728          if (!$3(_.$slider).hasClass("slick-initialized")) {
18729            $3(_.$slider).addClass("slick-initialized");
18730            _.buildRows();
18731            _.buildOut();
18732            _.setProps();
18733            _.startLoad();
18734            _.loadSlider();
18735            _.initializeEvents();
18736            _.updateArrows();
18737            _.updateDots();
18738            _.checkResponsive(true);
18739            _.focusHandler();
18740          }
18741          if (creation) {
18742            _.$slider.trigger("init", [_]);
18743          }
18744          if (_.options.accessibility === true) {
18745            _.initADA();
18746          }
18747          if (_.options.autoplay) {
18748            _.paused = false;
18749            _.autoPlay();
18750          }
18751        };
18752        Slick.prototype.initADA = function() {
18753          var _ = this, numDotGroups = Math.ceil(_.slideCount / _.options.slidesToShow), tabControlIndexes = _.getNavigableIndexes().filter(function(val) {
18754            return val >= 0 && val < _.slideCount;
18755          });
18756          _.$slides.add(_.$slideTrack.find(".slick-cloned")).attr({
18757            "aria-hidden": "true",
18758            "tabindex": "-1"
18759          }).find("a, input, button, select").attr({
18760            "tabindex": "-1"
18761          });
18762          if (_.$dots !== null) {
18763            _.$slides.not(_.$slideTrack.find(".slick-cloned")).each(function(i2) {
18764              var slideControlIndex = tabControlIndexes.indexOf(i2);
18765              $3(this).attr({
18766                "role": "tabpanel",
18767                "id": "slick-slide" + _.instanceUid + i2,
18768                "tabindex": -1
18769              });
18770              if (slideControlIndex !== -1) {
18771                var ariaButtonControl = "slick-slide-control" + _.instanceUid + slideControlIndex;
18772                if ($3("#" + ariaButtonControl).length) {
18773                  $3(this).attr({
18774                    "aria-describedby": ariaButtonControl
18775                  });
18776                }
18777              }
18778            });
18779            _.$dots.attr("role", "tablist").find("li").each(function(i2) {
18780              var mappedSlideIndex = tabControlIndexes[i2];
18781              $3(this).attr({
18782                "role": "presentation"
18783              });
18784              $3(this).find("button").first().attr({
18785                "role": "tab",
18786                "id": "slick-slide-control" + _.instanceUid + i2,
18787                "aria-controls": "slick-slide" + _.instanceUid + mappedSlideIndex,
18788                "aria-label": i2 + 1 + " of " + numDotGroups,
18789                "aria-selected": null,
18790                "tabindex": "-1"
18791              });
18792            }).eq(_.currentSlide).find("button").attr({
18793              "aria-selected": "true",
18794              "tabindex": "0"
18795            }).end();
18796          }
18797          for (var i = _.currentSlide, max = i + _.options.slidesToShow; i < max; i++) {
18798            if (_.options.focusOnChange) {
18799              _.$slides.eq(i).attr({ "tabindex": "0" });
18800            } else {
18801              _.$slides.eq(i).removeAttr("tabindex");
18802            }
18803          }
18804          _.activateADA();
18805        };
18806        Slick.prototype.initArrowEvents = function() {
18807          var _ = this;
18808          if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
18809            _.$prevArrow.off("click.slick").on("click.slick", {
18810              message: "previous"
18811            }, _.changeSlide);
18812            _.$nextArrow.off("click.slick").on("click.slick", {
18813              message: "next"
18814            }, _.changeSlide);
18815            if (_.options.accessibility === true) {
18816              _.$prevArrow.on("keydown.slick", _.keyHandler);
18817              _.$nextArrow.on("keydown.slick", _.keyHandler);
18818            }
18819          }
18820        };
18821        Slick.prototype.initDotEvents = function() {
18822          var _ = this;
18823          if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
18824            $3("li", _.$dots).on("click.slick", {
18825              message: "index"
18826            }, _.changeSlide);
18827            if (_.options.accessibility === true) {
18828              _.$dots.on("keydown.slick", _.keyHandler);
18829            }
18830          }
18831          if (_.options.dots === true && _.options.pauseOnDotsHover === true && _.slideCount > _.options.slidesToShow) {
18832            $3("li", _.$dots).on("mouseenter.slick", $3.proxy(_.interrupt, _, true)).on("mouseleave.slick", $3.proxy(_.interrupt, _, false));
18833          }
18834        };
18835        Slick.prototype.initSlideEvents = function() {
18836          var _ = this;
18837          if (_.options.pauseOnHover) {
18838            _.$list.on("mouseenter.slick", $3.proxy(_.interrupt, _, true));
18839            _.$list.on("mouseleave.slick", $3.proxy(_.interrupt, _, false));
18840          }
18841        };
18842        Slick.prototype.initializeEvents = function() {
18843          var _ = this;
18844          _.initArrowEvents();
18845          _.initDotEvents();
18846          _.initSlideEvents();
18847          _.$list.on("touchstart.slick mousedown.slick", {
18848            action: "start"
18849          }, _.swipeHandler);
18850          _.$list.on("touchmove.slick mousemove.slick", {
18851            action: "move"
18852          }, _.swipeHandler);
18853          _.$list.on("touchend.slick mouseup.slick", {
18854            action: "end"
18855          }, _.swipeHandler);
18856          _.$list.on("touchcancel.slick mouseleave.slick", {
18857            action: "end"
18858          }, _.swipeHandler);
18859          _.$list.on("click.slick", _.clickHandler);
18860          $3(document).on(_.visibilityChange, $3.proxy(_.visibility, _));
18861          if (_.options.accessibility === true) {
18862            _.$list.on("keydown.slick", _.keyHandler);
18863          }
18864          if (_.options.focusOnSelect === true) {
18865            $3(_.$slideTrack).children().on("click.slick", _.selectHandler);
18866          }
18867          $3(window).on("orientationchange.slick.slick-" + _.instanceUid, $3.proxy(_.orientationChange, _));
18868          $3(window).on("resize.slick.slick-" + _.instanceUid, $3.proxy(_.resize, _));
18869          $3("[draggable!=true]", _.$slideTrack).on("dragstart", _.preventDefault);
18870          $3(window).on("load.slick.slick-" + _.instanceUid, _.setPosition);
18871          $3(_.setPosition);
18872        };
18873        Slick.prototype.initUI = function() {
18874          var _ = this;
18875          if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
18876            _.$prevArrow.show();
18877            _.$nextArrow.show();
18878          }
18879          if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
18880            _.$dots.show();
18881          }
18882        };
18883        Slick.prototype.keyHandler = function(event2) {
18884          var _ = this;
18885          if (!event2.target.tagName.match("TEXTAREA|INPUT|SELECT")) {
18886            if (event2.keyCode === 37 && _.options.accessibility === true) {
18887              _.changeSlide({
18888                data: {
18889                  message: _.options.rtl === true ? "next" : "previous"
18890                }
18891              });
18892            } else if (event2.keyCode === 39 && _.options.accessibility === true) {
18893              _.changeSlide({
18894                data: {
18895                  message: _.options.rtl === true ? "previous" : "next"
18896                }
18897              });
18898            }
18899          }
18900        };
18901        Slick.prototype.lazyLoad = function() {
18902          var _ = this, loadRange, cloneRange, rangeStart, rangeEnd;
18903          function loadImages(imagesScope) {
18904            $3("img[data-lazy]", imagesScope).each(function() {
18905              var image = $3(this), imageSource = $3(this).attr("data-lazy"), imageSrcSet = $3(this).attr("data-srcset"), imageSizes = $3(this).attr("data-sizes") || _.$slider.attr("data-sizes"), imageToLoad = document.createElement("img");
18906              imageToLoad.onload = function() {
18907                image.animate({ opacity: 0 }, 100, function() {
18908                  if (imageSrcSet) {
18909                    image.attr("srcset", imageSrcSet);
18910                    if (imageSizes) {
18911                      image.attr("sizes", imageSizes);
18912                    }
18913                  }
18914                  image.attr("src", imageSource).animate({ opacity: 1 }, 200, function() {
18915                    image.removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading");
18916                  });
18917                  _.$slider.trigger("lazyLoaded", [_, image, imageSource]);
18918                });
18919              };
18920              imageToLoad.onerror = function() {
18921                image.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error");
18922                _.$slider.trigger("lazyLoadError", [_, image, imageSource]);
18923              };
18924              imageToLoad.src = imageSource;
18925            });
18926          }
18927          if (_.options.centerMode === true) {
18928            if (_.options.infinite === true) {
18929              rangeStart = _.currentSlide + (_.options.slidesToShow / 2 + 1);
18930              rangeEnd = rangeStart + _.options.slidesToShow + 2;
18931            } else {
18932              rangeStart = Math.max(0, _.currentSlide - (_.options.slidesToShow / 2 + 1));
18933              rangeEnd = 2 + (_.options.slidesToShow / 2 + 1) + _.currentSlide;
18934            }
18935          } else {
18936            rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide;
18937            rangeEnd = Math.ceil(rangeStart + _.options.slidesToShow);
18938            if (_.options.fade === true) {
18939              if (rangeStart > 0) rangeStart--;
18940              if (rangeEnd <= _.slideCount) rangeEnd++;
18941            }
18942          }
18943          loadRange = _.$slider.find(".slick-slide").slice(rangeStart, rangeEnd);
18944          if (_.options.lazyLoad === "anticipated") {
18945            var prevSlide = rangeStart - 1, nextSlide = rangeEnd, $slides = _.$slider.find(".slick-slide");
18946            for (var i = 0; i < _.options.slidesToScroll; i++) {
18947              if (prevSlide < 0) prevSlide = _.slideCount - 1;
18948              loadRange = loadRange.add($slides.eq(prevSlide));
18949              loadRange = loadRange.add($slides.eq(nextSlide));
18950              prevSlide--;
18951              nextSlide++;
18952            }
18953          }
18954          loadImages(loadRange);
18955          if (_.slideCount <= _.options.slidesToShow) {
18956            cloneRange = _.$slider.find(".slick-slide");
18957            loadImages(cloneRange);
18958          } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow) {
18959            cloneRange = _.$slider.find(".slick-cloned").slice(0, _.options.slidesToShow);
18960            loadImages(cloneRange);
18961          } else if (_.currentSlide === 0) {
18962            cloneRange = _.$slider.find(".slick-cloned").slice(_.options.slidesToShow * -1);
18963            loadImages(cloneRange);
18964          }
18965        };
18966        Slick.prototype.loadSlider = function() {
18967          var _ = this;
18968          _.setPosition();
18969          _.$slideTrack.css({
18970            opacity: 1
18971          });
18972          _.$slider.removeClass("slick-loading");
18973          _.initUI();
18974          if (_.options.lazyLoad === "progressive") {
18975            _.progressiveLazyLoad();
18976          }
18977        };
18978        Slick.prototype.next = Slick.prototype.slickNext = function() {
18979          var _ = this;
18980          _.changeSlide({
18981            data: {
18982              message: "next"
18983            }
18984          });
18985        };
18986        Slick.prototype.orientationChange = function() {
18987          var _ = this;
18988          _.checkResponsive();
18989          _.setPosition();
18990        };
18991        Slick.prototype.pause = Slick.prototype.slickPause = function() {
18992          var _ = this;
18993          _.autoPlayClear();
18994          _.paused = true;
18995        };
18996        Slick.prototype.play = Slick.prototype.slickPlay = function() {
18997          var _ = this;
18998          _.autoPlay();
18999          _.options.autoplay = true;
19000          _.paused = false;
19001          _.focussed = false;
19002          _.interrupted = false;
19003        };
19004        Slick.prototype.postSlide = function(index) {
19005          var _ = this;
19006          if (!_.unslicked) {
19007            _.$slider.trigger("afterChange", [_, index]);
19008            _.animating = false;
19009            if (_.slideCount > _.options.slidesToShow) {
19010              _.setPosition();
19011            }
19012            _.swipeLeft = null;
19013            if (_.options.autoplay) {
19014              _.autoPlay();
19015            }
19016            if (_.options.accessibility === true) {
19017              _.initADA();
19018              if (_.options.focusOnChange) {
19019                var $currentSlide = $3(_.$slides.get(_.currentSlide));
19020                $currentSlide.attr("tabindex", 0).focus();
19021              }
19022            }
19023          }
19024        };
19025        Slick.prototype.prev = Slick.prototype.slickPrev = function() {
19026          var _ = this;
19027          _.changeSlide({
19028            data: {
19029              message: "previous"
19030            }
19031          });
19032        };
19033        Slick.prototype.preventDefault = function(event2) {
19034          event2.preventDefault();
19035        };
19036        Slick.prototype.progressiveLazyLoad = function(tryCount) {
19037          tryCount = tryCount || 1;
19038          var _ = this, $imgsToLoad = $3("img[data-lazy]", _.$slider), image, imageSource, imageSrcSet, imageSizes, imageToLoad;
19039          if ($imgsToLoad.length) {
19040            image = $imgsToLoad.first();
19041            imageSource = image.attr("data-lazy");
19042            imageSrcSet = image.attr("data-srcset");
19043            imageSizes = image.attr("data-sizes") || _.$slider.attr("data-sizes");
19044            imageToLoad = document.createElement("img");
19045            imageToLoad.onload = function() {
19046              if (imageSrcSet) {
19047                image.attr("srcset", imageSrcSet);
19048                if (imageSizes) {
19049                  image.attr("sizes", imageSizes);
19050                }
19051              }
19052              image.attr("src", imageSource).removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading");
19053              if (_.options.adaptiveHeight === true) {
19054                _.setPosition();
19055              }
19056              _.$slider.trigger("lazyLoaded", [_, image, imageSource]);
19057              _.progressiveLazyLoad();
19058            };
19059            imageToLoad.onerror = function() {
19060              if (tryCount < 3) {
19061                setTimeout(function() {
19062                  _.progressiveLazyLoad(tryCount + 1);
19063                }, 500);
19064              } else {
19065                image.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error");
19066                _.$slider.trigger("lazyLoadError", [_, image, imageSource]);
19067                _.progressiveLazyLoad();
19068              }
19069            };
19070            imageToLoad.src = imageSource;
19071          } else {
19072            _.$slider.trigger("allImagesLoaded", [_]);
19073          }
19074        };
19075        Slick.prototype.refresh = function(initializing) {
19076          var _ = this, currentSlide, lastVisibleIndex;
19077          lastVisibleIndex = _.slideCount - _.options.slidesToShow;
19078          if (!_.options.infinite && _.currentSlide > lastVisibleIndex) {
19079            _.currentSlide = lastVisibleIndex;
19080          }
19081          if (_.slideCount <= _.options.slidesToShow) {
19082            _.currentSlide = 0;
19083          }
19084          currentSlide = _.currentSlide;
19085          _.destroy(true);
19086          $3.extend(_, _.initials, { currentSlide });
19087          _.init();
19088          if (!initializing) {
19089            _.changeSlide({
19090              data: {
19091                message: "index",
19092                index: currentSlide
19093              }
19094            }, false);
19095          }
19096        };
19097        Slick.prototype.registerBreakpoints = function() {
19098          var _ = this, breakpoint, currentBreakpoint, l, responsiveSettings = _.options.responsive || null;
19099          if ($3.type(responsiveSettings) === "array" && responsiveSettings.length) {
19100            _.respondTo = _.options.respondTo || "window";
19101            for (breakpoint in responsiveSettings) {
19102              l = _.breakpoints.length - 1;
19103              if (responsiveSettings.hasOwnProperty(breakpoint)) {
19104                currentBreakpoint = responsiveSettings[breakpoint].breakpoint;
19105                while (l >= 0) {
19106                  if (_.breakpoints[l] && _.breakpoints[l] === currentBreakpoint) {
19107                    _.breakpoints.splice(l, 1);
19108                  }
19109                  l--;
19110                }
19111                _.breakpoints.push(currentBreakpoint);
19112                _.breakpointSettings[currentBreakpoint] = responsiveSettings[breakpoint].settings;
19113              }
19114            }
19115            _.breakpoints.sort(function(a, b) {
19116              return _.options.mobileFirst ? a - b : b - a;
19117            });
19118          }
19119        };
19120        Slick.prototype.reinit = function() {
19121          var _ = this;
19122          _.$slides = _.$slideTrack.children(_.options.slide).addClass("slick-slide");
19123          _.slideCount = _.$slides.length;
19124          if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) {
19125            _.currentSlide = _.currentSlide - _.options.slidesToScroll;
19126          }
19127          if (_.slideCount <= _.options.slidesToShow) {
19128            _.currentSlide = 0;
19129          }
19130          _.registerBreakpoints();
19131          _.setProps();
19132          _.setupInfinite();
19133          _.buildArrows();
19134          _.updateArrows();
19135          _.initArrowEvents();
19136          _.buildDots();
19137          _.updateDots();
19138          _.initDotEvents();
19139          _.cleanUpSlideEvents();
19140          _.initSlideEvents();
19141          _.checkResponsive(false, true);
19142          if (_.options.focusOnSelect === true) {
19143            $3(_.$slideTrack).children().on("click.slick", _.selectHandler);
19144          }
19145          _.setSlideClasses(typeof _.currentSlide === "number" ? _.currentSlide : 0);
19146          _.setPosition();
19147          _.focusHandler();
19148          _.paused = !_.options.autoplay;
19149          _.autoPlay();
19150          _.$slider.trigger("reInit", [_]);
19151        };
19152        Slick.prototype.resize = function() {
19153          var _ = this;
19154          if ($3(window).width() !== _.windowWidth) {
19155            clearTimeout(_.windowDelay);
19156            _.windowDelay = window.setTimeout(function() {
19157              _.windowWidth = $3(window).width();
19158              _.checkResponsive();
19159              if (!_.unslicked) {
19160                _.setPosition();
19161              }
19162            }, 50);
19163          }
19164        };
19165        Slick.prototype.removeSlide = Slick.prototype.slickRemove = function(index, removeBefore, removeAll) {
19166          var _ = this;
19167          if (typeof index === "boolean") {
19168            removeBefore = index;
19169            index = removeBefore === true ? 0 : _.slideCount - 1;
19170          } else {
19171            index = removeBefore === true ? --index : index;
19172          }
19173          if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) {
19174            return false;
19175          }
19176          _.unload();
19177          if (removeAll === true) {
19178            _.$slideTrack.children().remove();
19179          } else {
19180            _.$slideTrack.children(this.options.slide).eq(index).remove();
19181          }
19182          _.$slides = _.$slideTrack.children(this.options.slide);
19183          _.$slideTrack.children(this.options.slide).detach();
19184          _.$slideTrack.append(_.$slides);
19185          _.$slidesCache = _.$slides;
19186          _.reinit();
19187        };
19188        Slick.prototype.setCSS = function(position) {
19189          var _ = this, positionProps = {}, x, y;
19190          if (_.options.rtl === true) {
19191            position = -position;
19192          }
19193          x = _.positionProp == "left" ? Math.ceil(position) + "px" : "0px";
19194          y = _.positionProp == "top" ? Math.ceil(position) + "px" : "0px";
19195          positionProps[_.positionProp] = position;
19196          if (_.transformsEnabled === false) {
19197            _.$slideTrack.css(positionProps);
19198          } else {
19199            positionProps = {};
19200            if (_.cssTransitions === false) {
19201              positionProps[_.animType] = "translate(" + x + ", " + y + ")";
19202              _.$slideTrack.css(positionProps);
19203            } else {
19204              positionProps[_.animType] = "translate3d(" + x + ", " + y + ", 0px)";
19205              _.$slideTrack.css(positionProps);
19206            }
19207          }
19208        };
19209        Slick.prototype.setDimensions = function() {
19210          var _ = this;
19211          if (_.options.vertical === false) {
19212            if (_.options.centerMode === true) {
19213              _.$list.css({
19214                padding: "0px " + _.options.centerPadding
19215              });
19216            }
19217          } else {
19218            _.$list.height(_.$slides.first().outerHeight(true) * _.options.slidesToShow);
19219            if (_.options.centerMode === true) {
19220              _.$list.css({
19221                padding: _.options.centerPadding + " 0px"
19222              });
19223            }
19224          }
19225          _.listWidth = _.$list.width();
19226          _.listHeight = _.$list.height();
19227          if (_.options.vertical === false && _.options.variableWidth === false) {
19228            _.slideWidth = Math.ceil(_.listWidth / _.options.slidesToShow);
19229            _.$slideTrack.width(Math.ceil(_.slideWidth * _.$slideTrack.children(".slick-slide").length));
19230          } else if (_.options.variableWidth === true) {
19231            _.$slideTrack.width(5e3 * _.slideCount);
19232          } else {
19233            _.slideWidth = Math.ceil(_.listWidth);
19234            _.$slideTrack.height(Math.ceil(_.$slides.first().outerHeight(true) * _.$slideTrack.children(".slick-slide").length));
19235          }
19236          var offset = _.$slides.first().outerWidth(true) - _.$slides.first().width();
19237          if (_.options.variableWidth === false) _.$slideTrack.children(".slick-slide").width(_.slideWidth - offset);
19238        };
19239        Slick.prototype.setFade = function() {
19240          var _ = this, targetLeft;
19241          _.$slides.each(function(index, element) {
19242            targetLeft = _.slideWidth * index * -1;
19243            if (_.options.rtl === true) {
19244              $3(element).css({
19245                position: "relative",
19246                right: targetLeft,
19247                top: 0,
19248                zIndex: _.options.zIndex - 2,
19249                opacity: 0
19250              });
19251            } else {
19252              $3(element).css({
19253                position: "relative",
19254                left: targetLeft,
19255                top: 0,
19256                zIndex: _.options.zIndex - 2,
19257                opacity: 0
19258              });
19259            }
19260          });
19261          _.$slides.eq(_.currentSlide).css({
19262            zIndex: _.options.zIndex - 1,
19263            opacity: 1
19264          });
19265        };
19266        Slick.prototype.setHeight = function() {
19267          var _ = this;
19268          if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {
19269            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);
19270            _.$list.css("height", targetHeight);
19271          }
19272        };
19273        Slick.prototype.setOption = Slick.prototype.slickSetOption = function() {
19274          var _ = this, l, item, option, value, refresh = false, type;
19275          if ($3.type(arguments[0]) === "object") {
19276            option = arguments[0];
19277            refresh = arguments[1];
19278            type = "multiple";
19279          } else if ($3.type(arguments[0]) === "string") {
19280            option = arguments[0];
19281            value = arguments[1];
19282            refresh = arguments[2];
19283            if (arguments[0] === "responsive" && $3.type(arguments[1]) === "array") {
19284              type = "responsive";
19285            } else if (typeof arguments[1] !== "undefined") {
19286              type = "single";
19287            }
19288          }
19289          if (type === "single") {
19290            _.options[option] = value;
19291          } else if (type === "multiple") {
19292            $3.each(option, function(opt, val) {
19293              _.options[opt] = val;
19294            });
19295          } else if (type === "responsive") {
19296            for (item in value) {
19297              if ($3.type(_.options.responsive) !== "array") {
19298                _.options.responsive = [value[item]];
19299              } else {
19300                l = _.options.responsive.length - 1;
19301                while (l >= 0) {
19302                  if (_.options.responsive[l].breakpoint === value[item].breakpoint) {
19303                    _.options.responsive.splice(l, 1);
19304                  }
19305                  l--;
19306                }
19307                _.options.responsive.push(value[item]);
19308              }
19309            }
19310          }
19311          if (refresh) {
19312            _.unload();
19313            _.reinit();
19314          }
19315        };
19316        Slick.prototype.setPosition = function() {
19317          var _ = this;
19318          _.setDimensions();
19319          _.setHeight();
19320          if (_.options.fade === false) {
19321            _.setCSS(_.getLeft(_.currentSlide));
19322          } else {
19323            _.setFade();
19324          }
19325          _.$slider.trigger("setPosition", [_]);
19326        };
19327        Slick.prototype.setProps = function() {
19328          var _ = this, bodyStyle = document.body.style;
19329          _.positionProp = _.options.vertical === true ? "top" : "left";
19330          if (_.positionProp === "top") {
19331            _.$slider.addClass("slick-vertical");
19332          } else {
19333            _.$slider.removeClass("slick-vertical");
19334          }
19335          if (bodyStyle.WebkitTransition !== void 0 || bodyStyle.MozTransition !== void 0 || bodyStyle.msTransition !== void 0) {
19336            if (_.options.useCSS === true) {
19337              _.cssTransitions = true;
19338            }
19339          }
19340          if (_.options.fade) {
19341            if (typeof _.options.zIndex === "number") {
19342              if (_.options.zIndex < 3) {
19343                _.options.zIndex = 3;
19344              }
19345            } else {
19346              _.options.zIndex = _.defaults.zIndex;
19347            }
19348          }
19349          if (bodyStyle.OTransform !== void 0) {
19350            _.animType = "OTransform";
19351            _.transformType = "-o-transform";
19352            _.transitionType = "OTransition";
19353            if (bodyStyle.perspectiveProperty === void 0 && bodyStyle.webkitPerspective === void 0) _.animType = false;
19354          }
19355          if (bodyStyle.MozTransform !== void 0) {
19356            _.animType = "MozTransform";
19357            _.transformType = "-moz-transform";
19358            _.transitionType = "MozTransition";
19359            if (bodyStyle.perspectiveProperty === void 0 && bodyStyle.MozPerspective === void 0) _.animType = false;
19360          }
19361          if (bodyStyle.webkitTransform !== void 0) {
19362            _.animType = "webkitTransform";
19363            _.transformType = "-webkit-transform";
19364            _.transitionType = "webkitTransition";
19365            if (bodyStyle.perspectiveProperty === void 0 && bodyStyle.webkitPerspective === void 0) _.animType = false;
19366          }
19367          if (bodyStyle.msTransform !== void 0) {
19368            _.animType = "msTransform";
19369            _.transformType = "-ms-transform";
19370            _.transitionType = "msTransition";
19371            if (bodyStyle.msTransform === void 0) _.animType = false;
19372          }
19373          if (bodyStyle.transform !== void 0 && _.animType !== false) {
19374            _.animType = "transform";
19375            _.transformType = "transform";
19376            _.transitionType = "transition";
19377          }
19378          _.transformsEnabled = _.options.useTransform && (_.animType !== null && _.animType !== false);
19379        };
19380        Slick.prototype.setSlideClasses = function(index) {
19381          var _ = this, centerOffset, allSlides, indexOffset, remainder;
19382          allSlides = _.$slider.find(".slick-slide").removeClass("slick-active slick-center slick-current").attr("aria-hidden", "true");
19383          _.$slides.eq(index).addClass("slick-current");
19384          if (_.options.centerMode === true) {
19385            var evenCoef = _.options.slidesToShow % 2 === 0 ? 1 : 0;
19386            centerOffset = Math.floor(_.options.slidesToShow / 2);
19387            if (_.options.infinite === true) {
19388              if (index >= centerOffset && index <= _.slideCount - 1 - centerOffset) {
19389                _.$slides.slice(index - centerOffset + evenCoef, index + centerOffset + 1).addClass("slick-active").attr("aria-hidden", "false");
19390              } else {
19391                indexOffset = _.options.slidesToShow + index;
19392                allSlides.slice(indexOffset - centerOffset + 1 + evenCoef, indexOffset + centerOffset + 2).addClass("slick-active").attr("aria-hidden", "false");
19393              }
19394              if (index === 0) {
19395                allSlides.eq(allSlides.length - 1 - _.options.slidesToShow).addClass("slick-center");
19396              } else if (index === _.slideCount - 1) {
19397                allSlides.eq(_.options.slidesToShow).addClass("slick-center");
19398              }
19399            }
19400            _.$slides.eq(index).addClass("slick-center");
19401          } else {
19402            if (index >= 0 && index <= _.slideCount - _.options.slidesToShow) {
19403              _.$slides.slice(index, index + _.options.slidesToShow).addClass("slick-active").attr("aria-hidden", "false");
19404            } else if (allSlides.length <= _.options.slidesToShow) {
19405              allSlides.addClass("slick-active").attr("aria-hidden", "false");
19406            } else {
19407              remainder = _.slideCount % _.options.slidesToShow;
19408              indexOffset = _.options.infinite === true ? _.options.slidesToShow + index : index;
19409              if (_.options.slidesToShow == _.options.slidesToScroll && _.slideCount - index < _.options.slidesToShow) {
19410                allSlides.slice(indexOffset - (_.options.slidesToShow - remainder), indexOffset + remainder).addClass("slick-active").attr("aria-hidden", "false");
19411              } else {
19412                allSlides.slice(indexOffset, indexOffset + _.options.slidesToShow).addClass("slick-active").attr("aria-hidden", "false");
19413              }
19414            }
19415          }
19416          if (_.options.lazyLoad === "ondemand" || _.options.lazyLoad === "anticipated") {
19417            _.lazyLoad();
19418          }
19419        };
19420        Slick.prototype.setupInfinite = function() {
19421          var _ = this, i, slideIndex, infiniteCount;
19422          if (_.options.fade === true) {
19423            _.options.centerMode = false;
19424          }
19425          if (_.options.infinite === true && _.options.fade === false) {
19426            slideIndex = null;
19427            if (_.slideCount > _.options.slidesToShow) {
19428              if (_.options.centerMode === true) {
19429                infiniteCount = _.options.slidesToShow + 1;
19430              } else {
19431                infiniteCount = _.options.slidesToShow;
19432              }
19433              for (i = _.slideCount; i > _.slideCount - infiniteCount; i -= 1) {
19434                slideIndex = i - 1;
19435                $3(_.$slides[slideIndex]).clone(true).attr("id", "").attr("data-slick-index", slideIndex - _.slideCount).prependTo(_.$slideTrack).addClass("slick-cloned");
19436              }
19437              for (i = 0; i < infiniteCount + _.slideCount; i += 1) {
19438                slideIndex = i;
19439                $3(_.$slides[slideIndex]).clone(true).attr("id", "").attr("data-slick-index", slideIndex + _.slideCount).appendTo(_.$slideTrack).addClass("slick-cloned");
19440              }
19441              _.$slideTrack.find(".slick-cloned").find("[id]").each(function() {
19442                $3(this).attr("id", "");
19443              });
19444            }
19445          }
19446        };
19447        Slick.prototype.interrupt = function(toggle) {
19448          var _ = this;
19449          if (!toggle) {
19450            _.autoPlay();
19451          }
19452          _.interrupted = toggle;
19453        };
19454        Slick.prototype.selectHandler = function(event2) {
19455          var _ = this;
19456          var targetElement = $3(event2.target).is(".slick-slide") ? $3(event2.target) : $3(event2.target).parents(".slick-slide");
19457          var index = parseInt(targetElement.attr("data-slick-index"));
19458          if (!index) index = 0;
19459          if (_.slideCount <= _.options.slidesToShow) {
19460            _.slideHandler(index, false, true);
19461            return;
19462          }
19463          _.slideHandler(index);
19464        };
19465        Slick.prototype.slideHandler = function(index, sync, dontAnimate) {
19466          var targetSlide, animSlide, oldSlide, slideLeft, targetLeft = null, _ = this, navTarget;
19467          sync = sync || false;
19468          if (_.animating === true && _.options.waitForAnimate === true) {
19469            return;
19470          }
19471          if (_.options.fade === true && _.currentSlide === index) {
19472            return;
19473          }
19474          if (sync === false) {
19475            _.asNavFor(index);
19476          }
19477          targetSlide = index;
19478          targetLeft = _.getLeft(targetSlide);
19479          slideLeft = _.getLeft(_.currentSlide);
19480          _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft;
19481          if (_.options.infinite === false && _.options.centerMode === false && (index < 0 || index > _.getDotCount() * _.options.slidesToScroll)) {
19482            if (_.options.fade === false) {
19483              targetSlide = _.currentSlide;
19484              if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {
19485                _.animateSlide(slideLeft, function() {
19486                  _.postSlide(targetSlide);
19487                });
19488              } else {
19489                _.postSlide(targetSlide);
19490              }
19491            }
19492            return;
19493          } else if (_.options.infinite === false && _.options.centerMode === true && (index < 0 || index > _.slideCount - _.options.slidesToScroll)) {
19494            if (_.options.fade === false) {
19495              targetSlide = _.currentSlide;
19496              if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {
19497                _.animateSlide(slideLeft, function() {
19498                  _.postSlide(targetSlide);
19499                });
19500              } else {
19501                _.postSlide(targetSlide);
19502              }
19503            }
19504            return;
19505          }
19506          if (_.options.autoplay) {
19507            clearInterval(_.autoPlayTimer);
19508          }
19509          if (targetSlide < 0) {
19510            if (_.slideCount % _.options.slidesToScroll !== 0) {
19511              animSlide = _.slideCount - _.slideCount % _.options.slidesToScroll;
19512            } else {
19513              animSlide = _.slideCount + targetSlide;
19514            }
19515          } else if (targetSlide >= _.slideCount) {
19516            if (_.slideCount % _.options.slidesToScroll !== 0) {
19517              animSlide = 0;
19518            } else {
19519              animSlide = targetSlide - _.slideCount;
19520            }
19521          } else {
19522            animSlide = targetSlide;
19523          }
19524          _.animating = true;
19525          _.$slider.trigger("beforeChange", [_, _.currentSlide, animSlide]);
19526          oldSlide = _.currentSlide;
19527          _.currentSlide = animSlide;
19528          _.setSlideClasses(_.currentSlide);
19529          if (_.options.asNavFor) {
19530            navTarget = _.getNavTarget();
19531            navTarget = navTarget.slick("getSlick");
19532            if (navTarget.slideCount <= navTarget.options.slidesToShow) {
19533              navTarget.setSlideClasses(_.currentSlide);
19534            }
19535          }
19536          _.updateDots();
19537          _.updateArrows();
19538          if (_.options.fade === true) {
19539            if (dontAnimate !== true) {
19540              _.fadeSlideOut(oldSlide);
19541              _.fadeSlide(animSlide, function() {
19542                _.postSlide(animSlide);
19543              });
19544            } else {
19545              _.postSlide(animSlide);
19546            }
19547            _.animateHeight();
19548            return;
19549          }
19550          if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {
19551            _.animateSlide(targetLeft, function() {
19552              _.postSlide(animSlide);
19553            });
19554          } else {
19555            _.postSlide(animSlide);
19556          }
19557        };
19558        Slick.prototype.startLoad = function() {
19559          var _ = this;
19560          if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
19561            _.$prevArrow.hide();
19562            _.$nextArrow.hide();
19563          }
19564          if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
19565            _.$dots.hide();
19566          }
19567          _.$slider.addClass("slick-loading");
19568        };
19569        Slick.prototype.swipeDirection = function() {
19570          var xDist, yDist, r, swipeAngle, _ = this;
19571          xDist = _.touchObject.startX - _.touchObject.curX;
19572          yDist = _.touchObject.startY - _.touchObject.curY;
19573          r = Math.atan2(yDist, xDist);
19574          swipeAngle = Math.round(r * 180 / Math.PI);
19575          if (swipeAngle < 0) {
19576            swipeAngle = 360 - Math.abs(swipeAngle);
19577          }
19578          if (swipeAngle <= 45 && swipeAngle >= 0) {
19579            return _.options.rtl === false ? "left" : "right";
19580          }
19581          if (swipeAngle <= 360 && swipeAngle >= 315) {
19582            return _.options.rtl === false ? "left" : "right";
19583          }
19584          if (swipeAngle >= 135 && swipeAngle <= 225) {
19585            return _.options.rtl === false ? "right" : "left";
19586          }
19587          if (_.options.verticalSwiping === true) {
19588            if (swipeAngle >= 35 && swipeAngle <= 135) {
19589              return "down";
19590            } else {
19591              return "up";
19592            }
19593          }
19594          return "vertical";
19595        };
19596        Slick.prototype.swipeEnd = function(event2) {
19597          var _ = this, slideCount, direction;
19598          _.dragging = false;
19599          _.swiping = false;
19600          if (_.scrolling) {
19601            _.scrolling = false;
19602            return false;
19603          }
19604          _.interrupted = false;
19605          _.shouldClick = _.touchObject.swipeLength > 10 ? false : true;
19606          if (_.touchObject.curX === void 0) {
19607            return false;
19608          }
19609          if (_.touchObject.edgeHit === true) {
19610            _.$slider.trigger("edge", [_, _.swipeDirection()]);
19611          }
19612          if (_.touchObject.swipeLength >= _.touchObject.minSwipe) {
19613            direction = _.swipeDirection();
19614            switch (direction) {
19615              case "left":
19616              case "down":
19617                slideCount = _.options.swipeToSlide ? _.checkNavigable(_.currentSlide + _.getSlideCount()) : _.currentSlide + _.getSlideCount();
19618                _.currentDirection = 0;
19619                break;
19620              case "right":
19621              case "up":
19622                slideCount = _.options.swipeToSlide ? _.checkNavigable(_.currentSlide - _.getSlideCount()) : _.currentSlide - _.getSlideCount();
19623                _.currentDirection = 1;
19624                break;
19625              default:
19626            }
19627            if (direction != "vertical") {
19628              _.slideHandler(slideCount);
19629              _.touchObject = {};
19630              _.$slider.trigger("swipe", [_, direction]);
19631            }
19632          } else {
19633            if (_.touchObject.startX !== _.touchObject.curX) {
19634              _.slideHandler(_.currentSlide);
19635              _.touchObject = {};
19636            }
19637          }
19638        };
19639        Slick.prototype.swipeHandler = function(event2) {
19640          var _ = this;
19641          if (_.options.swipe === false || "ontouchend" in document && _.options.swipe === false) {
19642            return;
19643          } else if (_.options.draggable === false && event2.type.indexOf("mouse") !== -1) {
19644            return;
19645          }
19646          _.touchObject.fingerCount = event2.originalEvent && event2.originalEvent.touches !== void 0 ? event2.originalEvent.touches.length : 1;
19647          _.touchObject.minSwipe = _.listWidth / _.options.touchThreshold;
19648          if (_.options.verticalSwiping === true) {
19649            _.touchObject.minSwipe = _.listHeight / _.options.touchThreshold;
19650          }
19651          switch (event2.data.action) {
19652            case "start":
19653              _.swipeStart(event2);
19654              break;
19655            case "move":
19656              _.swipeMove(event2);
19657              break;
19658            case "end":
19659              _.swipeEnd(event2);
19660              break;
19661          }
19662        };
19663        Slick.prototype.swipeMove = function(event2) {
19664          var _ = this, edgeWasHit = false, curLeft, swipeDirection, swipeLength, positionOffset, touches, verticalSwipeLength;
19665          touches = event2.originalEvent !== void 0 ? event2.originalEvent.touches : null;
19666          if (!_.dragging || _.scrolling || touches && touches.length !== 1) {
19667            return false;
19668          }
19669          curLeft = _.getLeft(_.currentSlide);
19670          _.touchObject.curX = touches !== void 0 ? touches[0].pageX : event2.clientX;
19671          _.touchObject.curY = touches !== void 0 ? touches[0].pageY : event2.clientY;
19672          _.touchObject.swipeLength = Math.round(Math.sqrt(
19673            Math.pow(_.touchObject.curX - _.touchObject.startX, 2)
19674          ));
19675          verticalSwipeLength = Math.round(Math.sqrt(
19676            Math.pow(_.touchObject.curY - _.touchObject.startY, 2)
19677          ));
19678          if (!_.options.verticalSwiping && !_.swiping && verticalSwipeLength > 4) {
19679            _.scrolling = true;
19680            return false;
19681          }
19682          if (_.options.verticalSwiping === true) {
19683            _.touchObject.swipeLength = verticalSwipeLength;
19684          }
19685          swipeDirection = _.swipeDirection();
19686          if (event2.originalEvent !== void 0 && _.touchObject.swipeLength > 4) {
19687            _.swiping = true;
19688            event2.preventDefault();
19689          }
19690          positionOffset = (_.options.rtl === false ? 1 : -1) * (_.touchObject.curX > _.touchObject.startX ? 1 : -1);
19691          if (_.options.verticalSwiping === true) {
19692            positionOffset = _.touchObject.curY > _.touchObject.startY ? 1 : -1;
19693          }
19694          swipeLength = _.touchObject.swipeLength;
19695          _.touchObject.edgeHit = false;
19696          if (_.options.infinite === false) {
19697            if (_.currentSlide === 0 && swipeDirection === "right" || _.currentSlide >= _.getDotCount() && swipeDirection === "left") {
19698              swipeLength = _.touchObject.swipeLength * _.options.edgeFriction;
19699              _.touchObject.edgeHit = true;
19700            }
19701          }
19702          if (_.options.vertical === false) {
19703            _.swipeLeft = curLeft + swipeLength * positionOffset;
19704          } else {
19705            _.swipeLeft = curLeft + swipeLength * (_.$list.height() / _.listWidth) * positionOffset;
19706          }
19707          if (_.options.verticalSwiping === true) {
19708            _.swipeLeft = curLeft + swipeLength * positionOffset;
19709          }
19710          if (_.options.fade === true || _.options.touchMove === false) {
19711            return false;
19712          }
19713          if (_.animating === true) {
19714            _.swipeLeft = null;
19715            return false;
19716          }
19717          _.setCSS(_.swipeLeft);
19718        };
19719        Slick.prototype.swipeStart = function(event2) {
19720          var _ = this, touches;
19721          _.interrupted = true;
19722          if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) {
19723            _.touchObject = {};
19724            return false;
19725          }
19726          if (event2.originalEvent !== void 0 && event2.originalEvent.touches !== void 0) {
19727            touches = event2.originalEvent.touches[0];
19728          }
19729          _.touchObject.startX = _.touchObject.curX = touches !== void 0 ? touches.pageX : event2.clientX;
19730          _.touchObject.startY = _.touchObject.curY = touches !== void 0 ? touches.pageY : event2.clientY;
19731          _.dragging = true;
19732        };
19733        Slick.prototype.unfilterSlides = Slick.prototype.slickUnfilter = function() {
19734          var _ = this;
19735          if (_.$slidesCache !== null) {
19736            _.unload();
19737            _.$slideTrack.children(this.options.slide).detach();
19738            _.$slidesCache.appendTo(_.$slideTrack);
19739            _.reinit();
19740          }
19741        };
19742        Slick.prototype.unload = function() {
19743          var _ = this;
19744          $3(".slick-cloned", _.$slider).remove();
19745          if (_.$dots) {
19746            _.$dots.remove();
19747          }
19748          if (_.$prevArrow && _.htmlExpr.test(_.options.prevArrow)) {
19749            _.$prevArrow.remove();
19750          }
19751          if (_.$nextArrow && _.htmlExpr.test(_.options.nextArrow)) {
19752            _.$nextArrow.remove();
19753          }
19754          _.$slides.removeClass("slick-slide slick-active slick-visible slick-current").attr("aria-hidden", "true").css("width", "");
19755        };
19756        Slick.prototype.unslick = function(fromBreakpoint) {
19757          var _ = this;
19758          _.$slider.trigger("unslick", [_, fromBreakpoint]);
19759          _.destroy();
19760        };
19761        Slick.prototype.updateArrows = function() {
19762          var _ = this, centerOffset;
19763          centerOffset = Math.floor(_.options.slidesToShow / 2);
19764          if (_.options.arrows === true && _.slideCount > _.options.slidesToShow && !_.options.infinite) {
19765            _.$prevArrow.removeClass("slick-disabled").attr("aria-disabled", "false");
19766            _.$nextArrow.removeClass("slick-disabled").attr("aria-disabled", "false");
19767            if (_.currentSlide === 0) {
19768              _.$prevArrow.addClass("slick-disabled").attr("aria-disabled", "true");
19769              _.$nextArrow.removeClass("slick-disabled").attr("aria-disabled", "false");
19770            } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) {
19771              _.$nextArrow.addClass("slick-disabled").attr("aria-disabled", "true");
19772              _.$prevArrow.removeClass("slick-disabled").attr("aria-disabled", "false");
19773            } else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) {
19774              _.$nextArrow.addClass("slick-disabled").attr("aria-disabled", "true");
19775              _.$prevArrow.removeClass("slick-disabled").attr("aria-disabled", "false");
19776            }
19777          }
19778        };
19779        Slick.prototype.updateDots = function() {
19780          var _ = this;
19781          if (_.$dots !== null) {
19782            _.$dots.find("li").removeClass("slick-active").end();
19783            _.$dots.find("li").eq(Math.floor(_.currentSlide / _.options.slidesToScroll)).addClass("slick-active");
19784          }
19785        };
19786        Slick.prototype.visibility = function() {
19787          var _ = this;
19788          if (_.options.autoplay) {
19789            if (document[_.hidden]) {
19790              _.interrupted = true;
19791            } else {
19792              _.interrupted = false;
19793            }
19794          }
19795        };
19796        $3.fn.slick = function() {
19797          var _ = this, opt = arguments[0], args = Array.prototype.slice.call(arguments, 1), l = _.length, i, ret;
19798          for (i = 0; i < l; i++) {
19799            if (typeof opt == "object" || typeof opt == "undefined")
19800              _[i].slick = new Slick(_[i], opt);
19801            else
19802              ret = _[i].slick[opt].apply(_[i].slick, args);
19803            if (typeof ret != "undefined") return ret;
19804          }
19805          return _;
19806        };
19807      });
19808    }
19809  });
19810
19811  
vendor: 4,910 bytes, lines 19811-19942
19811// node_modules/get-size/get-size.js
19812  var require_get_size = __commonJS({
19813    "node_modules/get-size/get-size.js"(exports, module) {
19814      init_esbuild_shims();
19815      (function(window2, factory) {
19816        if (typeof define == "function" && define.amd) {
19817          define(factory);
19818        } else if (typeof module == "object" && module.exports) {
19819          module.exports = factory();
19820        } else {
19821          window2.getSize = factory();
19822        }
19823      })(window, function factory() {
19824        "use strict";
19825        function getStyleSize(value) {
19826          var num = parseFloat(value);
19827          var isValid = value.indexOf("%") == -1 && !isNaN(num);
19828          return isValid && num;
19829        }
19830        function noop() {
19831        }
19832        var logError = typeof console == "undefined" ? noop : function(message) {
19833          console.error(message);
19834        };
19835        var measurements = [
19836          "paddingLeft",
19837          "paddingRight",
19838          "paddingTop",
19839          "paddingBottom",
19840          "marginLeft",
19841          "marginRight",
19842          "marginTop",
19843          "marginBottom",
19844          "borderLeftWidth",
19845          "borderRightWidth",
19846          "borderTopWidth",
19847          "borderBottomWidth"
19848        ];
19849        var measurementsLength = measurements.length;
19850        function getZeroSize() {
19851          var size = {
19852            width: 0,
19853            height: 0,
19854            innerWidth: 0,
19855            innerHeight: 0,
19856            outerWidth: 0,
19857            outerHeight: 0
19858          };
19859          for (var i = 0; i < measurementsLength; i++) {
19860            var measurement = measurements[i];
19861            size[measurement] = 0;
19862          }
19863          return size;
19864        }
19865        function getStyle(elem) {
19866          var style = getComputedStyle(elem);
19867          if (!style) {
19868            logError("Style returned " + style + ". Are you running this code in a hidden iframe on Firefox? See https://bit.ly/getsizebug1");
19869          }
19870          return style;
19871        }
19872        var isSetup = false;
19873        var isBoxSizeOuter;
19874        function setup() {
19875          if (isSetup) {
19876            return;
19877          }
19878          isSetup = true;
19879          var div = document.createElement("div");
19880          div.style.width = "200px";
19881          div.style.padding = "1px 2px 3px 4px";
19882          div.style.borderStyle = "solid";
19883          div.style.borderWidth = "1px 2px 3px 4px";
19884          div.style.boxSizing = "border-box";
19885          var body = document.body || document.documentElement;
19886          body.appendChild(div);
19887          var style = getStyle(div);
19888          isBoxSizeOuter = Math.round(getStyleSize(style.width)) == 200;
19889          getSize.isBoxSizeOuter = isBoxSizeOuter;
19890          body.removeChild(div);
19891        }
19892        function getSize(elem) {
19893          setup();
19894          if (typeof elem == "string") {
19895            elem = document.querySelector(elem);
19896          }
19897          if (!elem || typeof elem != "object" || !elem.nodeType) {
19898            return;
19899          }
19900          var style = getStyle(elem);
19901          if (style.display == "none") {
19902            return getZeroSize();
19903          }
19904          var size = {};
19905          size.width = elem.offsetWidth;
19906          size.height = elem.offsetHeight;
19907          var isBorderBox = size.isBorderBox = style.boxSizing == "border-box";
19908          for (var i = 0; i < measurementsLength; i++) {
19909            var measurement = measurements[i];
19910            var value = style[measurement];
19911            var num = parseFloat(value);
19912            size[measurement] = !isNaN(num) ? num : 0;
19913          }
19914          var paddingWidth = size.paddingLeft + size.paddingRight;
19915          var paddingHeight = size.paddingTop + size.paddingBottom;
19916          var marginWidth = size.marginLeft + size.marginRight;
19917          var marginHeight = size.marginTop + size.marginBottom;
19918          var borderWidth = size.borderLeftWidth + size.borderRightWidth;
19919          var borderHeight = size.borderTopWidth + size.borderBottomWidth;
19920          var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;
19921          var styleWidth = getStyleSize(style.width);
19922          if (styleWidth !== false) {
19923            size.width = styleWidth + // add padding and border unless it's already including it
19924            (isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth);
19925          }
19926          var styleHeight = getStyleSize(style.height);
19927          if (styleHeight !== false) {
19928            size.height = styleHeight + // add padding and border unless it's already including it
19929            (isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight);
19930          }
19931          size.innerWidth = size.width - (paddingWidth + borderWidth);
19932          size.innerHeight = size.height - (paddingHeight + borderHeight);
19933          size.outerWidth = size.width + marginWidth;
19934          size.outerHeight = size.height + marginHeight;
19935          return size;
19936        }
19937        return getSize;
19938      });
19939    }
19940  });
19941
19942  
vendor: 2,684 bytes, lines 19942-20019
19942// node_modules/ev-emitter/ev-emitter.js
19943  var require_ev_emitter = __commonJS({
19944    "node_modules/ev-emitter/ev-emitter.js"(exports, module) {
19945      init_esbuild_shims();
19946      (function(global2, factory) {
19947        if (typeof define == "function" && define.amd) {
19948          define(factory);
19949        } else if (typeof module == "object" && module.exports) {
19950          module.exports = factory();
19951        } else {
19952          global2.EvEmitter = factory();
19953        }
19954      })(typeof window != "undefined" ? window : exports, function() {
19955        "use strict";
19956        function EvEmitter() {
19957        }
19958        var proto = EvEmitter.prototype;
19959        proto.on = function(eventName, listener) {
19960          if (!eventName || !listener) {
19961            return;
19962          }
19963          var events = this._events = this._events || {};
19964          var listeners = events[eventName] = events[eventName] || [];
19965          if (listeners.indexOf(listener) == -1) {
19966            listeners.push(listener);
19967          }
19968          return this;
19969        };
19970        proto.once = function(eventName, listener) {
19971          if (!eventName || !listener) {
19972            return;
19973          }
19974          this.on(eventName, listener);
19975          var onceEvents = this._onceEvents = this._onceEvents || {};
19976          var onceListeners = onceEvents[eventName] = onceEvents[eventName] || {};
19977          onceListeners[listener] = true;
19978          return this;
19979        };
19980        proto.off = function(eventName, listener) {
19981          var listeners = this._events && this._events[eventName];
19982          if (!listeners || !listeners.length) {
19983            return;
19984          }
19985          var index = listeners.indexOf(listener);
19986          if (index != -1) {
19987            listeners.splice(index, 1);
19988          }
19989          return this;
19990        };
19991        proto.emitEvent = function(eventName, args) {
19992          var listeners = this._events && this._events[eventName];
19993          if (!listeners || !listeners.length) {
19994            return;
19995          }
19996          listeners = listeners.slice(0);
19997          args = args || [];
19998          var onceListeners = this._onceEvents && this._onceEvents[eventName];
19999          for (var i = 0; i < listeners.length; i++) {
20000            var listener = listeners[i];
20001            var isOnce = onceListeners && onceListeners[listener];
20002            if (isOnce) {
20003              this.off(eventName, listener);
20004              delete onceListeners[listener];
20005            }
20006            listener.apply(this, args);
20007          }
20008          return this;
20009        };
20010        proto.allOff = function() {
20011          delete this._events;
20012          delete this._onceEvents;
20013        };
20014        return EvEmitter;
20015      });
20016    }
20017  });
20018
20019  
vendor: 1,312 bytes, lines 20019-20058
20019// node_modules/desandro-matches-selector/matches-selector.js
20020  var require_matches_selector = __commonJS({
20021    "node_modules/desandro-matches-selector/matches-selector.js"(exports, module) {
20022      init_esbuild_shims();
20023      (function(window2, factory) {
20024        "use strict";
20025        if (typeof define == "function" && define.amd) {
20026          define(factory);
20027        } else if (typeof module == "object" && module.exports) {
20028          module.exports = factory();
20029        } else {
20030          window2.matchesSelector = factory();
20031        }
20032      })(window, function factory() {
20033        "use strict";
20034        var matchesMethod = (function() {
20035          var ElemProto = window.Element.prototype;
20036          if (ElemProto.matches) {
20037            return "matches";
20038          }
20039          if (ElemProto.matchesSelector) {
20040            return "matchesSelector";
20041          }
20042          var prefixes = ["webkit", "moz", "ms", "o"];
20043          for (var i = 0; i < prefixes.length; i++) {
20044            var prefix = prefixes[i];
20045            var method = prefix + "MatchesSelector";
20046            if (ElemProto[method]) {
20047              return method;
20048            }
20049          }
20050        })();
20051        return function matchesSelector(elem, selector) {
20052          return elem[matchesMethod](selector);
20053        };
20054      });
20055    }
20056  });
20057
20058  
vendor: 5,465 bytes, lines 20058-20214
20058// node_modules/fizzy-ui-utils/utils.js
20059  var require_utils = __commonJS({
20060    "node_modules/fizzy-ui-utils/utils.js"(exports, module) {
20061      init_esbuild_shims();
20062      (function(window2, factory) {
20063        if (typeof define == "function" && define.amd) {
20064          define([
20065            "desandro-matches-selector/matches-selector"
20066          ], function(matchesSelector) {
20067            return factory(window2, matchesSelector);
20068          });
20069        } else if (typeof module == "object" && module.exports) {
20070          module.exports = factory(
20071            window2,
20072            require_matches_selector()
20073          );
20074        } else {
20075          window2.fizzyUIUtils = factory(
20076            window2,
20077            window2.matchesSelector
20078          );
20079        }
20080      })(window, function factory(window2, matchesSelector) {
20081        "use strict";
20082        var utils = {};
20083        utils.extend = function(a, b) {
20084          for (var prop in b) {
20085            a[prop] = b[prop];
20086          }
20087          return a;
20088        };
20089        utils.modulo = function(num, div) {
20090          return (num % div + div) % div;
20091        };
20092        var arraySlice = Array.prototype.slice;
20093        utils.makeArray = function(obj) {
20094          if (Array.isArray(obj)) {
20095            return obj;
20096          }
20097          if (obj === null || obj === void 0) {
20098            return [];
20099          }
20100          var isArrayLike = typeof obj == "object" && typeof obj.length == "number";
20101          if (isArrayLike) {
20102            return arraySlice.call(obj);
20103          }
20104          return [obj];
20105        };
20106        utils.removeFrom = function(ary, obj) {
20107          var index = ary.indexOf(obj);
20108          if (index != -1) {
20109            ary.splice(index, 1);
20110          }
20111        };
20112        utils.getParent = function(elem, selector) {
20113          while (elem.parentNode && elem != document.body) {
20114            elem = elem.parentNode;
20115            if (matchesSelector(elem, selector)) {
20116              return elem;
20117            }
20118          }
20119        };
20120        utils.getQueryElement = function(elem) {
20121          if (typeof elem == "string") {
20122            return document.querySelector(elem);
20123          }
20124          return elem;
20125        };
20126        utils.handleEvent = function(event2) {
20127          var method = "on" + event2.type;
20128          if (this[method]) {
20129            this[method](event2);
20130          }
20131        };
20132        utils.filterFindElements = function(elems, selector) {
20133          elems = utils.makeArray(elems);
20134          var ffElems = [];
20135          elems.forEach(function(elem) {
20136            if (!(elem instanceof HTMLElement)) {
20137              return;
20138            }
20139            if (!selector) {
20140              ffElems.push(elem);
20141              return;
20142            }
20143            if (matchesSelector(elem, selector)) {
20144              ffElems.push(elem);
20145            }
20146            var childElems = elem.querySelectorAll(selector);
20147            for (var i = 0; i < childElems.length; i++) {
20148              ffElems.push(childElems[i]);
20149            }
20150          });
20151          return ffElems;
20152        };
20153        utils.debounceMethod = function(_class, methodName, threshold) {
20154          threshold = threshold || 100;
20155          var method = _class.prototype[methodName];
20156          var timeoutName = methodName + "Timeout";
20157          _class.prototype[methodName] = function() {
20158            var timeout = this[timeoutName];
20159            clearTimeout(timeout);
20160            var args = arguments;
20161            var _this = this;
20162            this[timeoutName] = setTimeout(function() {
20163              method.apply(_this, args);
20164              delete _this[timeoutName];
20165            }, threshold);
20166          };
20167        };
20168        utils.docReady = function(callback) {
20169          var readyState = document.readyState;
20170          if (readyState == "complete" || readyState == "interactive") {
20171            setTimeout(callback);
20172          } else {
20173            document.addEventListener("DOMContentLoaded", callback);
20174          }
20175        };
20176        utils.toDashed = function(str) {
20177          return str.replace(/(.)([A-Z])/g, function(match, $1, $22) {
20178            return $1 + "-" + $22;
20179          }).toLowerCase();
20180        };
20181        var console2 = window2.console;
20182        utils.htmlInit = function(WidgetClass, namespace) {
20183          utils.docReady(function() {
20184            var dashedNamespace = utils.toDashed(namespace);
20185            var dataAttr = "data-" + dashedNamespace;
20186            var dataAttrElems = document.querySelectorAll("[" + dataAttr + "]");
20187            var jsDashElems = document.querySelectorAll(".js-" + dashedNamespace);
20188            var elems = utils.makeArray(dataAttrElems).concat(utils.makeArray(jsDashElems));
20189            var dataOptionsAttr = dataAttr + "-options";
20190            var jQuery2 = window2.jQuery;
20191            elems.forEach(function(elem) {
20192              var attr = elem.getAttribute(dataAttr) || elem.getAttribute(dataOptionsAttr);
20193              var options;
20194              try {
20195                options = attr && JSON.parse(attr);
20196              } catch (error) {
20197                if (console2) {
20198                  console2.error("Error parsing " + dataAttr + " on " + elem.className + ": " + error);
20199                }
20200                return;
20201              }
20202              var instance = new WidgetClass(elem, options);
20203              if (jQuery2) {
20204                jQuery2.data(elem, namespace, instance);
20205              }
20206            });
20207          });
20208        };
20209        return utils;
20210      });
20211    }
20212  });
20213
20214  
vendor: 13,162 bytes, lines 20214-20576
20214// node_modules/outlayer/item.js
20215  var require_item = __commonJS({
20216    "node_modules/outlayer/item.js"(exports, module) {
20217      init_esbuild_shims();
20218      (function(window2, factory) {
20219        if (typeof define == "function" && define.amd) {
20220          define(
20221            [
20222              "ev-emitter/ev-emitter",
20223              "get-size/get-size"
20224            ],
20225            factory
20226          );
20227        } else if (typeof module == "object" && module.exports) {
20228          module.exports = factory(
20229            require_ev_emitter(),
20230            require_get_size()
20231          );
20232        } else {
20233          window2.Outlayer = {};
20234          window2.Outlayer.Item = factory(
20235            window2.EvEmitter,
20236            window2.getSize
20237          );
20238        }
20239      })(window, function factory(EvEmitter, getSize) {
20240        "use strict";
20241        function isEmptyObj(obj) {
20242          for (var prop in obj) {
20243            return false;
20244          }
20245          prop = null;
20246          return true;
20247        }
20248        var docElemStyle = document.documentElement.style;
20249        var transitionProperty = typeof docElemStyle.transition == "string" ? "transition" : "WebkitTransition";
20250        var transformProperty = typeof docElemStyle.transform == "string" ? "transform" : "WebkitTransform";
20251        var transitionEndEvent = {
20252          WebkitTransition: "webkitTransitionEnd",
20253          transition: "transitionend"
20254        }[transitionProperty];
20255        var vendorProperties = {
20256          transform: transformProperty,
20257          transition: transitionProperty,
20258          transitionDuration: transitionProperty + "Duration",
20259          transitionProperty: transitionProperty + "Property",
20260          transitionDelay: transitionProperty + "Delay"
20261        };
20262        function Item(element, layout) {
20263          if (!element) {
20264            return;
20265          }
20266          this.element = element;
20267          this.layout = layout;
20268          this.position = {
20269            x: 0,
20270            y: 0
20271          };
20272          this._create();
20273        }
20274        var proto = Item.prototype = Object.create(EvEmitter.prototype);
20275        proto.constructor = Item;
20276        proto._create = function() {
20277          this._transn = {
20278            ingProperties: {},
20279            clean: {},
20280            onEnd: {}
20281          };
20282          this.css({
20283            position: "absolute"
20284          });
20285        };
20286        proto.handleEvent = function(event2) {
20287          var method = "on" + event2.type;
20288          if (this[method]) {
20289            this[method](event2);
20290          }
20291        };
20292        proto.getSize = function() {
20293          this.size = getSize(this.element);
20294        };
20295        proto.css = function(style) {
20296          var elemStyle = this.element.style;
20297          for (var prop in style) {
20298            var supportedProp = vendorProperties[prop] || prop;
20299            elemStyle[supportedProp] = style[prop];
20300          }
20301        };
20302        proto.getPosition = function() {
20303          var style = getComputedStyle(this.element);
20304          var isOriginLeft = this.layout._getOption("originLeft");
20305          var isOriginTop = this.layout._getOption("originTop");
20306          var xValue = style[isOriginLeft ? "left" : "right"];
20307          var yValue = style[isOriginTop ? "top" : "bottom"];
20308          var x = parseFloat(xValue);
20309          var y = parseFloat(yValue);
20310          var layoutSize = this.layout.size;
20311          if (xValue.indexOf("%") != -1) {
20312            x = x / 100 * layoutSize.width;
20313          }
20314          if (yValue.indexOf("%") != -1) {
20315            y = y / 100 * layoutSize.height;
20316          }
20317          x = isNaN(x) ? 0 : x;
20318          y = isNaN(y) ? 0 : y;
20319          x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight;
20320          y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom;
20321          this.position.x = x;
20322          this.position.y = y;
20323        };
20324        proto.layoutPosition = function() {
20325          var layoutSize = this.layout.size;
20326          var style = {};
20327          var isOriginLeft = this.layout._getOption("originLeft");
20328          var isOriginTop = this.layout._getOption("originTop");
20329          var xPadding = isOriginLeft ? "paddingLeft" : "paddingRight";
20330          var xProperty = isOriginLeft ? "left" : "right";
20331          var xResetProperty = isOriginLeft ? "right" : "left";
20332          var x = this.position.x + layoutSize[xPadding];
20333          style[xProperty] = this.getXValue(x);
20334          style[xResetProperty] = "";
20335          var yPadding = isOriginTop ? "paddingTop" : "paddingBottom";
20336          var yProperty = isOriginTop ? "top" : "bottom";
20337          var yResetProperty = isOriginTop ? "bottom" : "top";
20338          var y = this.position.y + layoutSize[yPadding];
20339          style[yProperty] = this.getYValue(y);
20340          style[yResetProperty] = "";
20341          this.css(style);
20342          this.emitEvent("layout", [this]);
20343        };
20344        proto.getXValue = function(x) {
20345          var isHorizontal = this.layout._getOption("horizontal");
20346          return this.layout.options.percentPosition && !isHorizontal ? x / this.layout.size.width * 100 + "%" : x + "px";
20347        };
20348        proto.getYValue = function(y) {
20349          var isHorizontal = this.layout._getOption("horizontal");
20350          return this.layout.options.percentPosition && isHorizontal ? y / this.layout.size.height * 100 + "%" : y + "px";
20351        };
20352        proto._transitionTo = function(x, y) {
20353          this.getPosition();
20354          var curX = this.position.x;
20355          var curY = this.position.y;
20356          var didNotMove = x == this.position.x && y == this.position.y;
20357          this.setPosition(x, y);
20358          if (didNotMove && !this.isTransitioning) {
20359            this.layoutPosition();
20360            return;
20361          }
20362          var transX = x - curX;
20363          var transY = y - curY;
20364          var transitionStyle = {};
20365          transitionStyle.transform = this.getTranslate(transX, transY);
20366          this.transition({
20367            to: transitionStyle,
20368            onTransitionEnd: {
20369              transform: this.layoutPosition
20370            },
20371            isCleaning: true
20372          });
20373        };
20374        proto.getTranslate = function(x, y) {
20375          var isOriginLeft = this.layout._getOption("originLeft");
20376          var isOriginTop = this.layout._getOption("originTop");
20377          x = isOriginLeft ? x : -x;
20378          y = isOriginTop ? y : -y;
20379          return "translate3d(" + x + "px, " + y + "px, 0)";
20380        };
20381        proto.goTo = function(x, y) {
20382          this.setPosition(x, y);
20383          this.layoutPosition();
20384        };
20385        proto.moveTo = proto._transitionTo;
20386        proto.setPosition = function(x, y) {
20387          this.position.x = parseFloat(x);
20388          this.position.y = parseFloat(y);
20389        };
20390        proto._nonTransition = function(args) {
20391          this.css(args.to);
20392          if (args.isCleaning) {
20393            this._removeStyles(args.to);
20394          }
20395          for (var prop in args.onTransitionEnd) {
20396            args.onTransitionEnd[prop].call(this);
20397          }
20398        };
20399        proto.transition = function(args) {
20400          if (!parseFloat(this.layout.options.transitionDuration)) {
20401            this._nonTransition(args);
20402            return;
20403          }
20404          var _transition = this._transn;
20405          for (var prop in args.onTransitionEnd) {
20406            _transition.onEnd[prop] = args.onTransitionEnd[prop];
20407          }
20408          for (prop in args.to) {
20409            _transition.ingProperties[prop] = true;
20410            if (args.isCleaning) {
20411              _transition.clean[prop] = true;
20412            }
20413          }
20414          if (args.from) {
20415            this.css(args.from);
20416            var h = this.element.offsetHeight;
20417            h = null;
20418          }
20419          this.enableTransition(args.to);
20420          this.css(args.to);
20421          this.isTransitioning = true;
20422        };
20423        function toDashedAll(str) {
20424          return str.replace(/([A-Z])/g, function($1) {
20425            return "-" + $1.toLowerCase();
20426          });
20427        }
20428        var transitionProps = "opacity," + toDashedAll(transformProperty);
20429        proto.enableTransition = function() {
20430          if (this.isTransitioning) {
20431            return;
20432          }
20433          var duration = this.layout.options.transitionDuration;
20434          duration = typeof duration == "number" ? duration + "ms" : duration;
20435          this.css({
20436            transitionProperty: transitionProps,
20437            transitionDuration: duration,
20438            transitionDelay: this.staggerDelay || 0
20439          });
20440          this.element.addEventListener(transitionEndEvent, this, false);
20441        };
20442        proto.onwebkitTransitionEnd = function(event2) {
20443          this.ontransitionend(event2);
20444        };
20445        proto.onotransitionend = function(event2) {
20446          this.ontransitionend(event2);
20447        };
20448        var dashedVendorProperties = {
20449          "-webkit-transform": "transform"
20450        };
20451        proto.ontransitionend = function(event2) {
20452          if (event2.target !== this.element) {
20453            return;
20454          }
20455          var _transition = this._transn;
20456          var propertyName = dashedVendorProperties[event2.propertyName] || event2.propertyName;
20457          delete _transition.ingProperties[propertyName];
20458          if (isEmptyObj(_transition.ingProperties)) {
20459            this.disableTransition();
20460          }
20461          if (propertyName in _transition.clean) {
20462            this.element.style[event2.propertyName] = "";
20463            delete _transition.clean[propertyName];
20464          }
20465          if (propertyName in _transition.onEnd) {
20466            var onTransitionEnd = _transition.onEnd[propertyName];
20467            onTransitionEnd.call(this);
20468            delete _transition.onEnd[propertyName];
20469          }
20470          this.emitEvent("transitionEnd", [this]);
20471        };
20472        proto.disableTransition = function() {
20473          this.removeTransitionStyles();
20474          this.element.removeEventListener(transitionEndEvent, this, false);
20475          this.isTransitioning = false;
20476        };
20477        proto._removeStyles = function(style) {
20478          var cleanStyle = {};
20479          for (var prop in style) {
20480            cleanStyle[prop] = "";
20481          }
20482          this.css(cleanStyle);
20483        };
20484        var cleanTransitionStyle = {
20485          transitionProperty: "",
20486          transitionDuration: "",
20487          transitionDelay: ""
20488        };
20489        proto.removeTransitionStyles = function() {
20490          this.css(cleanTransitionStyle);
20491        };
20492        proto.stagger = function(delay) {
20493          delay = isNaN(delay) ? 0 : delay;
20494          this.staggerDelay = delay + "ms";
20495        };
20496        proto.removeElem = function() {
20497          this.element.parentNode.removeChild(this.element);
20498          this.css({ display: "" });
20499          this.emitEvent("remove", [this]);
20500        };
20501        proto.remove = function() {
20502          if (!transitionProperty || !parseFloat(this.layout.options.transitionDuration)) {
20503            this.removeElem();
20504            return;
20505          }
20506          this.once("transitionEnd", function() {
20507            this.removeElem();
20508          });
20509          this.hide();
20510        };
20511        proto.reveal = function() {
20512          delete this.isHidden;
20513          this.css({ display: "" });
20514          var options = this.layout.options;
20515          var onTransitionEnd = {};
20516          var transitionEndProperty = this.getHideRevealTransitionEndProperty("visibleStyle");
20517          onTransitionEnd[transitionEndProperty] = this.onRevealTransitionEnd;
20518          this.transition({
20519            from: options.hiddenStyle,
20520            to: options.visibleStyle,
20521            isCleaning: true,
20522            onTransitionEnd
20523          });
20524        };
20525        proto.onRevealTransitionEnd = function() {
20526          if (!this.isHidden) {
20527            this.emitEvent("reveal");
20528          }
20529        };
20530        proto.getHideRevealTransitionEndProperty = function(styleProperty) {
20531          var optionStyle = this.layout.options[styleProperty];
20532          if (optionStyle.opacity) {
20533            return "opacity";
20534          }
20535          for (var prop in optionStyle) {
20536            return prop;
20537          }
20538        };
20539        proto.hide = function() {
20540          this.isHidden = true;
20541          this.css({ display: "" });
20542          var options = this.layout.options;
20543          var onTransitionEnd = {};
20544          var transitionEndProperty = this.getHideRevealTransitionEndProperty("hiddenStyle");
20545          onTransitionEnd[transitionEndProperty] = this.onHideTransitionEnd;
20546          this.transition({
20547            from: options.visibleStyle,
20548            to: options.hiddenStyle,
20549            // keep hidden stuff hidden
20550            isCleaning: true,
20551            onTransitionEnd
20552          });
20553        };
20554        proto.onHideTransitionEnd = function() {
20555          if (this.isHidden) {
20556            this.css({ display: "none" });
20557            this.emitEvent("hide");
20558          }
20559        };
20560        proto.destroy = function() {
20561          this.css({
20562            position: "",
20563            left: "",
20564            right: "",
20565            top: "",
20566            bottom: "",
20567            transition: "",
20568            transform: ""
20569          });
20570        };
20571        return Item;
20572      });
20573    }
20574  });
20575
20576  
vendor: 18,130 bytes, lines 20576-21107
20576// node_modules/outlayer/outlayer.js
20577  var require_outlayer = __commonJS({
20578    "node_modules/outlayer/outlayer.js"(exports, module) {
20579      init_esbuild_shims();
20580      (function(window2, factory) {
20581        "use strict";
20582        if (typeof define == "function" && define.amd) {
20583          define(
20584            [
20585              "ev-emitter/ev-emitter",
20586              "get-size/get-size",
20587              "fizzy-ui-utils/utils",
20588              "./item"
20589            ],
20590            function(EvEmitter, getSize, utils, Item) {
20591              return factory(window2, EvEmitter, getSize, utils, Item);
20592            }
20593          );
20594        } else if (typeof module == "object" && module.exports) {
20595          module.exports = factory(
20596            window2,
20597            require_ev_emitter(),
20598            require_get_size(),
20599            require_utils(),
20600            require_item()
20601          );
20602        } else {
20603          window2.Outlayer = factory(
20604            window2,
20605            window2.EvEmitter,
20606            window2.getSize,
20607            window2.fizzyUIUtils,
20608            window2.Outlayer.Item
20609          );
20610        }
20611      })(window, function factory(window2, EvEmitter, getSize, utils, Item) {
20612        "use strict";
20613        var console2 = window2.console;
20614        var jQuery2 = window2.jQuery;
20615        var noop = function() {
20616        };
20617        var GUID = 0;
20618        var instances = {};
20619        function Outlayer(element, options) {
20620          var queryElement = utils.getQueryElement(element);
20621          if (!queryElement) {
20622            if (console2) {
20623              console2.error("Bad element for " + this.constructor.namespace + ": " + (queryElement || element));
20624            }
20625            return;
20626          }
20627          this.element = queryElement;
20628          if (jQuery2) {
20629            this.$element = jQuery2(this.element);
20630          }
20631          this.options = utils.extend({}, this.constructor.defaults);
20632          this.option(options);
20633          var id = ++GUID;
20634          this.element.outlayerGUID = id;
20635          instances[id] = this;
20636          this._create();
20637          var isInitLayout = this._getOption("initLayout");
20638          if (isInitLayout) {
20639            this.layout();
20640          }
20641        }
20642        Outlayer.namespace = "outlayer";
20643        Outlayer.Item = Item;
20644        Outlayer.defaults = {
20645          containerStyle: {
20646            position: "relative"
20647          },
20648          initLayout: true,
20649          originLeft: true,
20650          originTop: true,
20651          resize: true,
20652          resizeContainer: true,
20653          // item options
20654          transitionDuration: "0.4s",
20655          hiddenStyle: {
20656            opacity: 0,
20657            transform: "scale(0.001)"
20658          },
20659          visibleStyle: {
20660            opacity: 1,
20661            transform: "scale(1)"
20662          }
20663        };
20664        var proto = Outlayer.prototype;
20665        utils.extend(proto, EvEmitter.prototype);
20666        proto.option = function(opts) {
20667          utils.extend(this.options, opts);
20668        };
20669        proto._getOption = function(option) {
20670          var oldOption = this.constructor.compatOptions[option];
20671          return oldOption && this.options[oldOption] !== void 0 ? this.options[oldOption] : this.options[option];
20672        };
20673        Outlayer.compatOptions = {
20674          // currentName: oldName
20675          initLayout: "isInitLayout",
20676          horizontal: "isHorizontal",
20677          layoutInstant: "isLayoutInstant",
20678          originLeft: "isOriginLeft",
20679          originTop: "isOriginTop",
20680          resize: "isResizeBound",
20681          resizeContainer: "isResizingContainer"
20682        };
20683        proto._create = function() {
20684          this.reloadItems();
20685          this.stamps = [];
20686          this.stamp(this.options.stamp);
20687          utils.extend(this.element.style, this.options.containerStyle);
20688          var canBindResize = this._getOption("resize");
20689          if (canBindResize) {
20690            this.bindResize();
20691          }
20692        };
20693        proto.reloadItems = function() {
20694          this.items = this._itemize(this.element.children);
20695        };
20696        proto._itemize = function(elems) {
20697          var itemElems = this._filterFindItemElements(elems);
20698          var Item2 = this.constructor.Item;
20699          var items = [];
20700          for (var i = 0; i < itemElems.length; i++) {
20701            var elem = itemElems[i];
20702            var item = new Item2(elem, this);
20703            items.push(item);
20704          }
20705          return items;
20706        };
20707        proto._filterFindItemElements = function(elems) {
20708          return utils.filterFindElements(elems, this.options.itemSelector);
20709        };
20710        proto.getItemElements = function() {
20711          return this.items.map(function(item) {
20712            return item.element;
20713          });
20714        };
20715        proto.layout = function() {
20716          this._resetLayout();
20717          this._manageStamps();
20718          var layoutInstant = this._getOption("layoutInstant");
20719          var isInstant = layoutInstant !== void 0 ? layoutInstant : !this._isLayoutInited;
20720          this.layoutItems(this.items, isInstant);
20721          this._isLayoutInited = true;
20722        };
20723        proto._init = proto.layout;
20724        proto._resetLayout = function() {
20725          this.getSize();
20726        };
20727        proto.getSize = function() {
20728          this.size = getSize(this.element);
20729        };
20730        proto._getMeasurement = function(measurement, size) {
20731          var option = this.options[measurement];
20732          var elem;
20733          if (!option) {
20734            this[measurement] = 0;
20735          } else {
20736            if (typeof option == "string") {
20737              elem = this.element.querySelector(option);
20738            } else if (option instanceof HTMLElement) {
20739              elem = option;
20740            }
20741            this[measurement] = elem ? getSize(elem)[size] : option;
20742          }
20743        };
20744        proto.layoutItems = function(items, isInstant) {
20745          items = this._getItemsForLayout(items);
20746          this._layoutItems(items, isInstant);
20747          this._postLayout();
20748        };
20749        proto._getItemsForLayout = function(items) {
20750          return items.filter(function(item) {
20751            return !item.isIgnored;
20752          });
20753        };
20754        proto._layoutItems = function(items, isInstant) {
20755          this._emitCompleteOnItems("layout", items);
20756          if (!items || !items.length) {
20757            return;
20758          }
20759          var queue = [];
20760          items.forEach(function(item) {
20761            var position = this._getItemLayoutPosition(item);
20762            position.item = item;
20763            position.isInstant = isInstant || item.isLayoutInstant;
20764            queue.push(position);
20765          }, this);
20766          this._processLayoutQueue(queue);
20767        };
20768        proto._getItemLayoutPosition = function() {
20769          return {
20770            x: 0,
20771            y: 0
20772          };
20773        };
20774        proto._processLayoutQueue = function(queue) {
20775          this.updateStagger();
20776          queue.forEach(function(obj, i) {
20777            this._positionItem(obj.item, obj.x, obj.y, obj.isInstant, i);
20778          }, this);
20779        };
20780        proto.updateStagger = function() {
20781          var stagger = this.options.stagger;
20782          if (stagger === null || stagger === void 0) {
20783            this.stagger = 0;
20784            return;
20785          }
20786          this.stagger = getMilliseconds(stagger);
20787          return this.stagger;
20788        };
20789        proto._positionItem = function(item, x, y, isInstant, i) {
20790          if (isInstant) {
20791            item.goTo(x, y);
20792          } else {
20793            item.stagger(i * this.stagger);
20794            item.moveTo(x, y);
20795          }
20796        };
20797        proto._postLayout = function() {
20798          this.resizeContainer();
20799        };
20800        proto.resizeContainer = function() {
20801          var isResizingContainer = this._getOption("resizeContainer");
20802          if (!isResizingContainer) {
20803            return;
20804          }
20805          var size = this._getContainerSize();
20806          if (size) {
20807            this._setContainerMeasure(size.width, true);
20808            this._setContainerMeasure(size.height, false);
20809          }
20810        };
20811        proto._getContainerSize = noop;
20812        proto._setContainerMeasure = function(measure, isWidth) {
20813          if (measure === void 0) {
20814            return;
20815          }
20816          var elemSize = this.size;
20817          if (elemSize.isBorderBox) {
20818            measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight + elemSize.borderLeftWidth + elemSize.borderRightWidth : elemSize.paddingBottom + elemSize.paddingTop + elemSize.borderTopWidth + elemSize.borderBottomWidth;
20819          }
20820          measure = Math.max(measure, 0);
20821          this.element.style[isWidth ? "width" : "height"] = measure + "px";
20822        };
20823        proto._emitCompleteOnItems = function(eventName, items) {
20824          var _this = this;
20825          function onComplete() {
20826            _this.dispatchEvent(eventName + "Complete", null, [items]);
20827          }
20828          var count = items.length;
20829          if (!items || !count) {
20830            onComplete();
20831            return;
20832          }
20833          var doneCount = 0;
20834          function tick() {
20835            doneCount++;
20836            if (doneCount == count) {
20837              onComplete();
20838            }
20839          }
20840          items.forEach(function(item) {
20841            item.once(eventName, tick);
20842          });
20843        };
20844        proto.dispatchEvent = function(type, event2, args) {
20845          var emitArgs = event2 ? [event2].concat(args) : args;
20846          this.emitEvent(type, emitArgs);
20847          if (jQuery2) {
20848            this.$element = this.$element || jQuery2(this.element);
20849            if (event2) {
20850              var $event = jQuery2.Event(event2);
20851              $event.type = type;
20852              this.$element.trigger($event, args);
20853            } else {
20854              this.$element.trigger(type, args);
20855            }
20856          }
20857        };
20858        proto.ignore = function(elem) {
20859          var item = this.getItem(elem);
20860          if (item) {
20861            item.isIgnored = true;
20862          }
20863        };
20864        proto.unignore = function(elem) {
20865          var item = this.getItem(elem);
20866          if (item) {
20867            delete item.isIgnored;
20868          }
20869        };
20870        proto.stamp = function(elems) {
20871          elems = this._find(elems);
20872          if (!elems) {
20873            return;
20874          }
20875          this.stamps = this.stamps.concat(elems);
20876          elems.forEach(this.ignore, this);
20877        };
20878        proto.unstamp = function(elems) {
20879          elems = this._find(elems);
20880          if (!elems) {
20881            return;
20882          }
20883          elems.forEach(function(elem) {
20884            utils.removeFrom(this.stamps, elem);
20885            this.unignore(elem);
20886          }, this);
20887        };
20888        proto._find = function(elems) {
20889          if (!elems) {
20890            return;
20891          }
20892          if (typeof elems == "string") {
20893            elems = this.element.querySelectorAll(elems);
20894          }
20895          elems = utils.makeArray(elems);
20896          return elems;
20897        };
20898        proto._manageStamps = function() {
20899          if (!this.stamps || !this.stamps.length) {
20900            return;
20901          }
20902          this._getBoundingRect();
20903          this.stamps.forEach(this._manageStamp, this);
20904        };
20905        proto._getBoundingRect = function() {
20906          var boundingRect = this.element.getBoundingClientRect();
20907          var size = this.size;
20908          this._boundingRect = {
20909            left: boundingRect.left + size.paddingLeft + size.borderLeftWidth,
20910            top: boundingRect.top + size.paddingTop + size.borderTopWidth,
20911            right: boundingRect.right - (size.paddingRight + size.borderRightWidth),
20912            bottom: boundingRect.bottom - (size.paddingBottom + size.borderBottomWidth)
20913          };
20914        };
20915        proto._manageStamp = noop;
20916        proto._getElementOffset = function(elem) {
20917          var boundingRect = elem.getBoundingClientRect();
20918          var thisRect = this._boundingRect;
20919          var size = getSize(elem);
20920          var offset = {
20921            left: boundingRect.left - thisRect.left - size.marginLeft,
20922            top: boundingRect.top - thisRect.top - size.marginTop,
20923            right: thisRect.right - boundingRect.right - size.marginRight,
20924            bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom
20925          };
20926          return offset;
20927        };
20928        proto.handleEvent = utils.handleEvent;
20929        proto.bindResize = function() {
20930          window2.addEventListener("resize", this);
20931          this.isResizeBound = true;
20932        };
20933        proto.unbindResize = function() {
20934          window2.removeEventListener("resize", this);
20935          this.isResizeBound = false;
20936        };
20937        proto.onresize = function() {
20938          this.resize();
20939        };
20940        utils.debounceMethod(Outlayer, "onresize", 100);
20941        proto.resize = function() {
20942          if (!this.isResizeBound || !this.needsResizeLayout()) {
20943            return;
20944          }
20945          this.layout();
20946        };
20947        proto.needsResizeLayout = function() {
20948          var size = getSize(this.element);
20949          var hasSizes = this.size && size;
20950          return hasSizes && size.innerWidth !== this.size.innerWidth;
20951        };
20952        proto.addItems = function(elems) {
20953          var items = this._itemize(elems);
20954          if (items.length) {
20955            this.items = this.items.concat(items);
20956          }
20957          return items;
20958        };
20959        proto.appended = function(elems) {
20960          var items = this.addItems(elems);
20961          if (!items.length) {
20962            return;
20963          }
20964          this.layoutItems(items, true);
20965          this.reveal(items);
20966        };
20967        proto.prepended = function(elems) {
20968          var items = this._itemize(elems);
20969          if (!items.length) {
20970            return;
20971          }
20972          var previousItems = this.items.slice(0);
20973          this.items = items.concat(previousItems);
20974          this._resetLayout();
20975          this._manageStamps();
20976          this.layoutItems(items, true);
20977          this.reveal(items);
20978          this.layoutItems(previousItems);
20979        };
20980        proto.reveal = function(items) {
20981          this._emitCompleteOnItems("reveal", items);
20982          if (!items || !items.length) {
20983            return;
20984          }
20985          var stagger = this.updateStagger();
20986          items.forEach(function(item, i) {
20987            item.stagger(i * stagger);
20988            item.reveal();
20989          });
20990        };
20991        proto.hide = function(items) {
20992          this._emitCompleteOnItems("hide", items);
20993          if (!items || !items.length) {
20994            return;
20995          }
20996          var stagger = this.updateStagger();
20997          items.forEach(function(item, i) {
20998            item.stagger(i * stagger);
20999            item.hide();
21000          });
21001        };
21002        proto.revealItemElements = function(elems) {
21003          var items = this.getItems(elems);
21004          this.reveal(items);
21005        };
21006        proto.hideItemElements = function(elems) {
21007          var items = this.getItems(elems);
21008          this.hide(items);
21009        };
21010        proto.getItem = function(elem) {
21011          for (var i = 0; i < this.items.length; i++) {
21012            var item = this.items[i];
21013            if (item.element == elem) {
21014              return item;
21015            }
21016          }
21017        };
21018        proto.getItems = function(elems) {
21019          elems = utils.makeArray(elems);
21020          var items = [];
21021          elems.forEach(function(elem) {
21022            var item = this.getItem(elem);
21023            if (item) {
21024              items.push(item);
21025            }
21026          }, this);
21027          return items;
21028        };
21029        proto.remove = function(elems) {
21030          var removeItems = this.getItems(elems);
21031          this._emitCompleteOnItems("remove", removeItems);
21032          if (!removeItems || !removeItems.length) {
21033            return;
21034          }
21035          removeItems.forEach(function(item) {
21036            item.remove();
21037            utils.removeFrom(this.items, item);
21038          }, this);
21039        };
21040        proto.destroy = function() {
21041          var style = this.element.style;
21042          style.height = "";
21043          style.position = "";
21044          style.width = "";
21045          this.items.forEach(function(item) {
21046            item.destroy();
21047          });
21048          this.unbindResize();
21049          var id = this.element.outlayerGUID;
21050          delete instances[id];
21051          delete this.element.outlayerGUID;
21052          if (jQuery2) {
21053            jQuery2.removeData(this.element, this.constructor.namespace);
21054          }
21055        };
21056        Outlayer.data = function(elem) {
21057          elem = utils.getQueryElement(elem);
21058          var id = elem && elem.outlayerGUID;
21059          return id && instances[id];
21060        };
21061        Outlayer.create = function(namespace, options) {
21062          var Layout = subclass(Outlayer);
21063          Layout.defaults = utils.extend({}, Outlayer.defaults);
21064          utils.extend(Layout.defaults, options);
21065          Layout.compatOptions = utils.extend({}, Outlayer.compatOptions);
21066          Layout.namespace = namespace;
21067          Layout.data = Outlayer.data;
21068          Layout.Item = subclass(Item);
21069          utils.htmlInit(Layout, namespace);
21070          if (jQuery2 && jQuery2.bridget) {
21071            jQuery2.bridget(namespace, Layout);
21072          }
21073          return Layout;
21074        };
21075        function subclass(Parent) {
21076          function SubClass() {
21077            Parent.apply(this, arguments);
21078          }
21079          SubClass.prototype = Object.create(Parent.prototype);
21080          SubClass.prototype.constructor = SubClass;
21081          return SubClass;
21082        }
21083        var msUnits = {
21084          ms: 1,
21085          s: 1e3
21086        };
21087        function getMilliseconds(time) {
21088          if (typeof time == "number") {
21089            return time;
21090          }
21091          var matches = time.match(/(^\d*\.?\d*)(\w*)/);
21092          var num = matches && matches[1];
21093          var unit = matches && matches[2];
21094          if (!num.length) {
21095            return 0;
21096          }
21097          num = parseFloat(num);
21098          var mult = msUnits[unit] || 1;
21099          return num * mult;
21100        }
21101        Outlayer.Item = Item;
21102        return Outlayer;
21103      });
21104    }
21105  });
21106
21107  
vendor: 3,209 bytes, lines 21107-21205
21107// node_modules/packery/js/rect.js
21108  var require_rect = __commonJS({
21109    "node_modules/packery/js/rect.js"(exports, module) {
21110      init_esbuild_shims();
21111      (function(window2, factory) {
21112        if (typeof define == "function" && define.amd) {
21113          define(factory);
21114        } else if (typeof module == "object" && module.exports) {
21115          module.exports = factory();
21116        } else {
21117          window2.Packery = window2.Packery || {};
21118          window2.Packery.Rect = factory();
21119        }
21120      })(window, function factory() {
21121        "use strict";
21122        function Rect(props) {
21123          for (var prop in Rect.defaults) {
21124            this[prop] = Rect.defaults[prop];
21125          }
21126          for (prop in props) {
21127            this[prop] = props[prop];
21128          }
21129        }
21130        Rect.defaults = {
21131          x: 0,
21132          y: 0,
21133          width: 0,
21134          height: 0
21135        };
21136        var proto = Rect.prototype;
21137        proto.contains = function(rect) {
21138          var otherWidth = rect.width || 0;
21139          var otherHeight = rect.height || 0;
21140          return this.x <= rect.x && this.y <= rect.y && this.x + this.width >= rect.x + otherWidth && this.y + this.height >= rect.y + otherHeight;
21141        };
21142        proto.overlaps = function(rect) {
21143          var thisRight = this.x + this.width;
21144          var thisBottom = this.y + this.height;
21145          var rectRight = rect.x + rect.width;
21146          var rectBottom = rect.y + rect.height;
21147          return this.x < rectRight && thisRight > rect.x && this.y < rectBottom && thisBottom > rect.y;
21148        };
21149        proto.getMaximalFreeRects = function(rect) {
21150          if (!this.overlaps(rect)) {
21151            return false;
21152          }
21153          var freeRects = [];
21154          var freeRect;
21155          var thisRight = this.x + this.width;
21156          var thisBottom = this.y + this.height;
21157          var rectRight = rect.x + rect.width;
21158          var rectBottom = rect.y + rect.height;
21159          if (this.y < rect.y) {
21160            freeRect = new Rect({
21161              x: this.x,
21162              y: this.y,
21163              width: this.width,
21164              height: rect.y - this.y
21165            });
21166            freeRects.push(freeRect);
21167          }
21168          if (thisRight > rectRight) {
21169            freeRect = new Rect({
21170              x: rectRight,
21171              y: this.y,
21172              width: thisRight - rectRight,
21173              height: this.height
21174            });
21175            freeRects.push(freeRect);
21176          }
21177          if (thisBottom > rectBottom) {
21178            freeRect = new Rect({
21179              x: this.x,
21180              y: rectBottom,
21181              width: this.width,
21182              height: thisBottom - rectBottom
21183            });
21184            freeRects.push(freeRect);
21185          }
21186          if (this.x < rect.x) {
21187            freeRect = new Rect({
21188              x: this.x,
21189              y: this.y,
21190              width: rect.x - this.x,
21191              height: this.height
21192            });
21193            freeRects.push(freeRect);
21194          }
21195          return freeRects;
21196        };
21197        proto.canFit = function(rect) {
21198          return this.width >= rect.width && this.height >= rect.height;
21199        };
21200        return Rect;
21201      });
21202    }
21203  });
21204
21205  
vendor: 4,516 bytes, lines 21205-21339
21205// node_modules/packery/js/packer.js
21206  var require_packer = __commonJS({
21207    "node_modules/packery/js/packer.js"(exports, module) {
21208      init_esbuild_shims();
21209      (function(window2, factory) {
21210        if (typeof define == "function" && define.amd) {
21211          define(["./rect"], factory);
21212        } else if (typeof module == "object" && module.exports) {
21213          module.exports = factory(
21214            require_rect()
21215          );
21216        } else {
21217          var Packery = window2.Packery = window2.Packery || {};
21218          Packery.Packer = factory(Packery.Rect);
21219        }
21220      })(window, function factory(Rect) {
21221        "use strict";
21222        function Packer(width, height, sortDirection) {
21223          this.width = width || 0;
21224          this.height = height || 0;
21225          this.sortDirection = sortDirection || "downwardLeftToRight";
21226          this.reset();
21227        }
21228        var proto = Packer.prototype;
21229        proto.reset = function() {
21230          this.spaces = [];
21231          var initialSpace = new Rect({
21232            x: 0,
21233            y: 0,
21234            width: this.width,
21235            height: this.height
21236          });
21237          this.spaces.push(initialSpace);
21238          this.sorter = sorters[this.sortDirection] || sorters.downwardLeftToRight;
21239        };
21240        proto.pack = function(rect) {
21241          for (var i = 0; i < this.spaces.length; i++) {
21242            var space = this.spaces[i];
21243            if (space.canFit(rect)) {
21244              this.placeInSpace(rect, space);
21245              break;
21246            }
21247          }
21248        };
21249        proto.columnPack = function(rect) {
21250          for (var i = 0; i < this.spaces.length; i++) {
21251            var space = this.spaces[i];
21252            var canFitInSpaceColumn = space.x <= rect.x && space.x + space.width >= rect.x + rect.width && space.height >= rect.height - 0.01;
21253            if (canFitInSpaceColumn) {
21254              rect.y = space.y;
21255              this.placed(rect);
21256              break;
21257            }
21258          }
21259        };
21260        proto.rowPack = function(rect) {
21261          for (var i = 0; i < this.spaces.length; i++) {
21262            var space = this.spaces[i];
21263            var canFitInSpaceRow = space.y <= rect.y && space.y + space.height >= rect.y + rect.height && space.width >= rect.width - 0.01;
21264            if (canFitInSpaceRow) {
21265              rect.x = space.x;
21266              this.placed(rect);
21267              break;
21268            }
21269          }
21270        };
21271        proto.placeInSpace = function(rect, space) {
21272          rect.x = space.x;
21273          rect.y = space.y;
21274          this.placed(rect);
21275        };
21276        proto.placed = function(rect) {
21277          var revisedSpaces = [];
21278          for (var i = 0; i < this.spaces.length; i++) {
21279            var space = this.spaces[i];
21280            var newSpaces = space.getMaximalFreeRects(rect);
21281            if (newSpaces) {
21282              revisedSpaces.push.apply(revisedSpaces, newSpaces);
21283            } else {
21284              revisedSpaces.push(space);
21285            }
21286          }
21287          this.spaces = revisedSpaces;
21288          this.mergeSortSpaces();
21289        };
21290        proto.mergeSortSpaces = function() {
21291          Packer.mergeRects(this.spaces);
21292          this.spaces.sort(this.sorter);
21293        };
21294        proto.addSpace = function(rect) {
21295          this.spaces.push(rect);
21296          this.mergeSortSpaces();
21297        };
21298        Packer.mergeRects = function(rects) {
21299          var i = 0;
21300          var rect = rects[i];
21301          rectLoop:
21302            while (rect) {
21303              var j = 0;
21304              var compareRect = rects[i + j];
21305              while (compareRect) {
21306                if (compareRect == rect) {
21307                  j++;
21308                } else if (compareRect.contains(rect)) {
21309                  rects.splice(i, 1);
21310                  rect = rects[i];
21311                  continue rectLoop;
21312                } else if (rect.contains(compareRect)) {
21313                  rects.splice(i + j, 1);
21314                } else {
21315                  j++;
21316                }
21317                compareRect = rects[i + j];
21318              }
21319              i++;
21320              rect = rects[i];
21321            }
21322          return rects;
21323        };
21324        var sorters = {
21325          // top down, then left to right
21326          downwardLeftToRight: function(a, b) {
21327            return a.y - b.y || a.x - b.x;
21328          },
21329          // left to right, then top down
21330          rightwardTopToBottom: function(a, b) {
21331            return a.x - b.x || a.y - b.y;
21332          }
21333        };
21334        return Packer;
21335      });
21336    }
21337  });
21338
21339  
vendor: 3,502 bytes, lines 21339-21434
21339// node_modules/packery/js/item.js
21340  var require_item2 = __commonJS({
21341    "node_modules/packery/js/item.js"(exports, module) {
21342      init_esbuild_shims();
21343      (function(window2, factory) {
21344        if (typeof define == "function" && define.amd) {
21345          define(
21346            [
21347              "outlayer/outlayer",
21348              "./rect"
21349            ],
21350            factory
21351          );
21352        } else if (typeof module == "object" && module.exports) {
21353          module.exports = factory(
21354            require_outlayer(),
21355            require_rect()
21356          );
21357        } else {
21358          window2.Packery.Item = factory(
21359            window2.Outlayer,
21360            window2.Packery.Rect
21361          );
21362        }
21363      })(window, function factory(Outlayer, Rect) {
21364        "use strict";
21365        var docElemStyle = document.documentElement.style;
21366        var transformProperty = typeof docElemStyle.transform == "string" ? "transform" : "WebkitTransform";
21367        var Item = function PackeryItem() {
21368          Outlayer.Item.apply(this, arguments);
21369        };
21370        var proto = Item.prototype = Object.create(Outlayer.Item.prototype);
21371        var __create2 = proto._create;
21372        proto._create = function() {
21373          __create2.call(this);
21374          this.rect = new Rect();
21375        };
21376        var _moveTo = proto.moveTo;
21377        proto.moveTo = function(x, y) {
21378          var dx = Math.abs(this.position.x - x);
21379          var dy = Math.abs(this.position.y - y);
21380          var canHackGoTo = this.layout.dragItemCount && !this.isPlacing && !this.isTransitioning && dx < 1 && dy < 1;
21381          if (canHackGoTo) {
21382            this.goTo(x, y);
21383            return;
21384          }
21385          _moveTo.apply(this, arguments);
21386        };
21387        proto.enablePlacing = function() {
21388          this.removeTransitionStyles();
21389          if (this.isTransitioning && transformProperty) {
21390            this.element.style[transformProperty] = "none";
21391          }
21392          this.isTransitioning = false;
21393          this.getSize();
21394          this.layout._setRectSize(this.element, this.rect);
21395          this.isPlacing = true;
21396        };
21397        proto.disablePlacing = function() {
21398          this.isPlacing = false;
21399        };
21400        proto.removeElem = function() {
21401          var parent = this.element.parentNode;
21402          if (parent) {
21403            parent.removeChild(this.element);
21404          }
21405          this.layout.packer.addSpace(this.rect);
21406          this.emitEvent("remove", [this]);
21407        };
21408        proto.showDropPlaceholder = function() {
21409          var dropPlaceholder = this.dropPlaceholder;
21410          if (!dropPlaceholder) {
21411            dropPlaceholder = this.dropPlaceholder = document.createElement("div");
21412            dropPlaceholder.className = "packery-drop-placeholder";
21413            dropPlaceholder.style.position = "absolute";
21414          }
21415          dropPlaceholder.style.width = this.size.width + "px";
21416          dropPlaceholder.style.height = this.size.height + "px";
21417          this.positionDropPlaceholder();
21418          this.layout.element.appendChild(dropPlaceholder);
21419        };
21420        proto.positionDropPlaceholder = function() {
21421          this.dropPlaceholder.style[transformProperty] = "translate(" + this.rect.x + "px, " + this.rect.y + "px)";
21422        };
21423        proto.hideDropPlaceholder = function() {
21424          var parent = this.dropPlaceholder.parentNode;
21425          if (parent) {
21426            parent.removeChild(this.dropPlaceholder);
21427          }
21428        };
21429        return Item;
21430      });
21431    }
21432  });
21433
21434  
vendor: 17,025 bytes, lines 21434-21881
21434// node_modules/packery/js/packery.js
21435  var require_packery = __commonJS({
21436    "node_modules/packery/js/packery.js"(exports, module) {
21437      init_esbuild_shims();
21438      (function(window2, factory) {
21439        if (typeof define == "function" && define.amd) {
21440          define(
21441            [
21442              "get-size/get-size",
21443              "outlayer/outlayer",
21444              "./rect",
21445              "./packer",
21446              "./item"
21447            ],
21448            factory
21449          );
21450        } else if (typeof module == "object" && module.exports) {
21451          module.exports = factory(
21452            require_get_size(),
21453            require_outlayer(),
21454            require_rect(),
21455            require_packer(),
21456            require_item2()
21457          );
21458        } else {
21459          window2.Packery = factory(
21460            window2.getSize,
21461            window2.Outlayer,
21462            window2.Packery.Rect,
21463            window2.Packery.Packer,
21464            window2.Packery.Item
21465          );
21466        }
21467      })(window, function factory(getSize, Outlayer, Rect, Packer, Item) {
21468        "use strict";
21469        Rect.prototype.canFit = function(rect) {
21470          return this.width >= rect.width - 1 && this.height >= rect.height - 1;
21471        };
21472        var Packery = Outlayer.create("packery");
21473        Packery.Item = Item;
21474        var proto = Packery.prototype;
21475        proto._create = function() {
21476          Outlayer.prototype._create.call(this);
21477          this.packer = new Packer();
21478          this.shiftPacker = new Packer();
21479          this.isEnabled = true;
21480          this.dragItemCount = 0;
21481          var _this = this;
21482          this.handleDraggabilly = {
21483            dragStart: function() {
21484              _this.itemDragStart(this.element);
21485            },
21486            dragMove: function() {
21487              _this.itemDragMove(this.element, this.position.x, this.position.y);
21488            },
21489            dragEnd: function() {
21490              _this.itemDragEnd(this.element);
21491            }
21492          };
21493          this.handleUIDraggable = {
21494            start: function handleUIDraggableStart(event2, ui) {
21495              if (!ui) {
21496                return;
21497              }
21498              _this.itemDragStart(event2.currentTarget);
21499            },
21500            drag: function handleUIDraggableDrag(event2, ui) {
21501              if (!ui) {
21502                return;
21503              }
21504              _this.itemDragMove(event2.currentTarget, ui.position.left, ui.position.top);
21505            },
21506            stop: function handleUIDraggableStop(event2, ui) {
21507              if (!ui) {
21508                return;
21509              }
21510              _this.itemDragEnd(event2.currentTarget);
21511            }
21512          };
21513        };
21514        proto._resetLayout = function() {
21515          this.getSize();
21516          this._getMeasurements();
21517          var width, height, sortDirection;
21518          if (this._getOption("horizontal")) {
21519            width = Infinity;
21520            height = this.size.innerHeight + this.gutter;
21521            sortDirection = "rightwardTopToBottom";
21522          } else {
21523            width = this.size.innerWidth + this.gutter;
21524            height = Infinity;
21525            sortDirection = "downwardLeftToRight";
21526          }
21527          this.packer.width = this.shiftPacker.width = width;
21528          this.packer.height = this.shiftPacker.height = height;
21529          this.packer.sortDirection = this.shiftPacker.sortDirection = sortDirection;
21530          this.packer.reset();
21531          this.maxY = 0;
21532          this.maxX = 0;
21533        };
21534        proto._getMeasurements = function() {
21535          this._getMeasurement("columnWidth", "width");
21536          this._getMeasurement("rowHeight", "height");
21537          this._getMeasurement("gutter", "width");
21538        };
21539        proto._getItemLayoutPosition = function(item) {
21540          this._setRectSize(item.element, item.rect);
21541          if (this.isShifting || this.dragItemCount > 0) {
21542            var packMethod = this._getPackMethod();
21543            this.packer[packMethod](item.rect);
21544          } else {
21545            this.packer.pack(item.rect);
21546          }
21547          this._setMaxXY(item.rect);
21548          return item.rect;
21549        };
21550        proto.shiftLayout = function() {
21551          this.isShifting = true;
21552          this.layout();
21553          delete this.isShifting;
21554        };
21555        proto._getPackMethod = function() {
21556          return this._getOption("horizontal") ? "rowPack" : "columnPack";
21557        };
21558        proto._setMaxXY = function(rect) {
21559          this.maxX = Math.max(rect.x + rect.width, this.maxX);
21560          this.maxY = Math.max(rect.y + rect.height, this.maxY);
21561        };
21562        proto._setRectSize = function(elem, rect) {
21563          var size = getSize(elem);
21564          var w = size.outerWidth;
21565          var h = size.outerHeight;
21566          if (w || h) {
21567            w = this._applyGridGutter(w, this.columnWidth);
21568            h = this._applyGridGutter(h, this.rowHeight);
21569          }
21570          rect.width = Math.min(w, this.packer.width);
21571          rect.height = Math.min(h, this.packer.height);
21572        };
21573        proto._applyGridGutter = function(measurement, gridSize) {
21574          if (!gridSize) {
21575            return measurement + this.gutter;
21576          }
21577          gridSize += this.gutter;
21578          var remainder = measurement % gridSize;
21579          var mathMethod = remainder && remainder < 1 ? "round" : "ceil";
21580          measurement = Math[mathMethod](measurement / gridSize) * gridSize;
21581          return measurement;
21582        };
21583        proto._getContainerSize = function() {
21584          if (this._getOption("horizontal")) {
21585            return {
21586              width: this.maxX - this.gutter
21587            };
21588          } else {
21589            return {
21590              height: this.maxY - this.gutter
21591            };
21592          }
21593        };
21594        proto._manageStamp = function(elem) {
21595          var item = this.getItem(elem);
21596          var rect;
21597          if (item && item.isPlacing) {
21598            rect = item.rect;
21599          } else {
21600            var offset = this._getElementOffset(elem);
21601            rect = new Rect({
21602              x: this._getOption("originLeft") ? offset.left : offset.right,
21603              y: this._getOption("originTop") ? offset.top : offset.bottom
21604            });
21605          }
21606          this._setRectSize(elem, rect);
21607          this.packer.placed(rect);
21608          this._setMaxXY(rect);
21609        };
21610        function verticalSorter(a, b) {
21611          return a.position.y - b.position.y || a.position.x - b.position.x;
21612        }
21613        function horizontalSorter(a, b) {
21614          return a.position.x - b.position.x || a.position.y - b.position.y;
21615        }
21616        proto.sortItemsByPosition = function() {
21617          var sorter = this._getOption("horizontal") ? horizontalSorter : verticalSorter;
21618          this.items.sort(sorter);
21619        };
21620        proto.fit = function(elem, x, y) {
21621          var item = this.getItem(elem);
21622          if (!item) {
21623            return;
21624          }
21625          this.stamp(item.element);
21626          item.enablePlacing();
21627          this.updateShiftTargets(item);
21628          x = x === void 0 ? item.rect.x : x;
21629          y = y === void 0 ? item.rect.y : y;
21630          this.shift(item, x, y);
21631          this._bindFitEvents(item);
21632          item.moveTo(item.rect.x, item.rect.y);
21633          this.shiftLayout();
21634          this.unstamp(item.element);
21635          this.sortItemsByPosition();
21636          item.disablePlacing();
21637        };
21638        proto._bindFitEvents = function(item) {
21639          var _this = this;
21640          var ticks = 0;
21641          function onLayout() {
21642            ticks++;
21643            if (ticks != 2) {
21644              return;
21645            }
21646            _this.dispatchEvent("fitComplete", null, [item]);
21647          }
21648          item.once("layout", onLayout);
21649          this.once("layoutComplete", onLayout);
21650        };
21651        proto.resize = function() {
21652          if (!this.isResizeBound || !this.needsResizeLayout()) {
21653            return;
21654          }
21655          if (this.options.shiftPercentResize) {
21656            this.resizeShiftPercentLayout();
21657          } else {
21658            this.layout();
21659          }
21660        };
21661        proto.needsResizeLayout = function() {
21662          var size = getSize(this.element);
21663          var innerSize = this._getOption("horizontal") ? "innerHeight" : "innerWidth";
21664          return size[innerSize] != this.size[innerSize];
21665        };
21666        proto.resizeShiftPercentLayout = function() {
21667          var items = this._getItemsForLayout(this.items);
21668          var isHorizontal = this._getOption("horizontal");
21669          var coord = isHorizontal ? "y" : "x";
21670          var measure = isHorizontal ? "height" : "width";
21671          var segmentName = isHorizontal ? "rowHeight" : "columnWidth";
21672          var innerSize = isHorizontal ? "innerHeight" : "innerWidth";
21673          var previousSegment = this[segmentName];
21674          previousSegment = previousSegment && previousSegment + this.gutter;
21675          if (previousSegment) {
21676            this._getMeasurements();
21677            var currentSegment = this[segmentName] + this.gutter;
21678            items.forEach(function(item) {
21679              var seg = Math.round(item.rect[coord] / previousSegment);
21680              item.rect[coord] = seg * currentSegment;
21681            });
21682          } else {
21683            var currentSize = getSize(this.element)[innerSize] + this.gutter;
21684            var previousSize = this.packer[measure];
21685            items.forEach(function(item) {
21686              item.rect[coord] = item.rect[coord] / previousSize * currentSize;
21687            });
21688          }
21689          this.shiftLayout();
21690        };
21691        proto.itemDragStart = function(elem) {
21692          if (!this.isEnabled) {
21693            return;
21694          }
21695          this.stamp(elem);
21696          var item = this.getItem(elem);
21697          if (!item) {
21698            return;
21699          }
21700          item.enablePlacing();
21701          item.showDropPlaceholder();
21702          this.dragItemCount++;
21703          this.updateShiftTargets(item);
21704        };
21705        proto.updateShiftTargets = function(dropItem) {
21706          this.shiftPacker.reset();
21707          this._getBoundingRect();
21708          var isOriginLeft = this._getOption("originLeft");
21709          var isOriginTop = this._getOption("originTop");
21710          this.stamps.forEach(function(stamp) {
21711            var item = this.getItem(stamp);
21712            if (item && item.isPlacing) {
21713              return;
21714            }
21715            var offset = this._getElementOffset(stamp);
21716            var rect = new Rect({
21717              x: isOriginLeft ? offset.left : offset.right,
21718              y: isOriginTop ? offset.top : offset.bottom
21719            });
21720            this._setRectSize(stamp, rect);
21721            this.shiftPacker.placed(rect);
21722          }, this);
21723          var isHorizontal = this._getOption("horizontal");
21724          var segmentName = isHorizontal ? "rowHeight" : "columnWidth";
21725          var measure = isHorizontal ? "height" : "width";
21726          this.shiftTargetKeys = [];
21727          this.shiftTargets = [];
21728          var boundsSize;
21729          var segment = this[segmentName];
21730          segment = segment && segment + this.gutter;
21731          if (segment) {
21732            var segmentSpan = Math.ceil(dropItem.rect[measure] / segment);
21733            var segs = Math.floor((this.shiftPacker[measure] + this.gutter) / segment);
21734            boundsSize = (segs - segmentSpan) * segment;
21735            for (var i = 0; i < segs; i++) {
21736              var initialX = isHorizontal ? 0 : i * segment;
21737              var initialY = isHorizontal ? i * segment : 0;
21738              this._addShiftTarget(initialX, initialY, boundsSize);
21739            }
21740          } else {
21741            boundsSize = this.shiftPacker[measure] + this.gutter - dropItem.rect[measure];
21742            this._addShiftTarget(0, 0, boundsSize);
21743          }
21744          var items = this._getItemsForLayout(this.items);
21745          var packMethod = this._getPackMethod();
21746          items.forEach(function(item) {
21747            var rect = item.rect;
21748            this._setRectSize(item.element, rect);
21749            this.shiftPacker[packMethod](rect);
21750            this._addShiftTarget(rect.x, rect.y, boundsSize);
21751            var cornerX = isHorizontal ? rect.x + rect.width : rect.x;
21752            var cornerY = isHorizontal ? rect.y : rect.y + rect.height;
21753            this._addShiftTarget(cornerX, cornerY, boundsSize);
21754            if (segment) {
21755              var segSpan = Math.round(rect[measure] / segment);
21756              for (var i2 = 1; i2 < segSpan; i2++) {
21757                var segX = isHorizontal ? cornerX : rect.x + segment * i2;
21758                var segY = isHorizontal ? rect.y + segment * i2 : cornerY;
21759                this._addShiftTarget(segX, segY, boundsSize);
21760              }
21761            }
21762          }, this);
21763        };
21764        proto._addShiftTarget = function(x, y, boundsSize) {
21765          var checkCoord = this._getOption("horizontal") ? y : x;
21766          if (checkCoord !== 0 && checkCoord > boundsSize) {
21767            return;
21768          }
21769          var key = x + "," + y;
21770          var hasKey = this.shiftTargetKeys.indexOf(key) != -1;
21771          if (hasKey) {
21772            return;
21773          }
21774          this.shiftTargetKeys.push(key);
21775          this.shiftTargets.push({ x, y });
21776        };
21777        proto.shift = function(item, x, y) {
21778          var shiftPosition;
21779          var minDistance = Infinity;
21780          var position = { x, y };
21781          this.shiftTargets.forEach(function(target) {
21782            var distance = getDistance(target, position);
21783            if (distance < minDistance) {
21784              shiftPosition = target;
21785              minDistance = distance;
21786            }
21787          });
21788          item.rect.x = shiftPosition.x;
21789          item.rect.y = shiftPosition.y;
21790        };
21791        function getDistance(a, b) {
21792          var dx = b.x - a.x;
21793          var dy = b.y - a.y;
21794          return Math.sqrt(dx * dx + dy * dy);
21795        }
21796        var DRAG_THROTTLE_TIME = 120;
21797        proto.itemDragMove = function(elem, x, y) {
21798          var item = this.isEnabled && this.getItem(elem);
21799          if (!item) {
21800            return;
21801          }
21802          x -= this.size.paddingLeft;
21803          y -= this.size.paddingTop;
21804          var _this = this;
21805          function onDrag() {
21806            _this.shift(item, x, y);
21807            item.positionDropPlaceholder();
21808            _this.layout();
21809          }
21810          var now = /* @__PURE__ */ new Date();
21811          var isThrottled = this._itemDragTime && now - this._itemDragTime < DRAG_THROTTLE_TIME;
21812          if (isThrottled) {
21813            clearTimeout(this.dragTimeout);
21814            this.dragTimeout = setTimeout(onDrag, DRAG_THROTTLE_TIME);
21815          } else {
21816            onDrag();
21817            this._itemDragTime = now;
21818          }
21819        };
21820        proto.itemDragEnd = function(elem) {
21821          var item = this.isEnabled && this.getItem(elem);
21822          if (!item) {
21823            return;
21824          }
21825          clearTimeout(this.dragTimeout);
21826          item.element.classList.add("is-positioning-post-drag");
21827          var completeCount = 0;
21828          var _this = this;
21829          function onDragEndLayoutComplete() {
21830            completeCount++;
21831            if (completeCount != 2) {
21832              return;
21833            }
21834            item.element.classList.remove("is-positioning-post-drag");
21835            item.hideDropPlaceholder();
21836            _this.dispatchEvent("dragItemPositioned", null, [item]);
21837          }
21838          item.once("layout", onDragEndLayoutComplete);
21839          this.once("layoutComplete", onDragEndLayoutComplete);
21840          item.moveTo(item.rect.x, item.rect.y);
21841          this.layout();
21842          this.dragItemCount = Math.max(0, this.dragItemCount - 1);
21843          this.sortItemsByPosition();
21844          item.disablePlacing();
21845          this.unstamp(item.element);
21846        };
21847        proto.bindDraggabillyEvents = function(draggie) {
21848          this._bindDraggabillyEvents(draggie, "on");
21849        };
21850        proto.unbindDraggabillyEvents = function(draggie) {
21851          this._bindDraggabillyEvents(draggie, "off");
21852        };
21853        proto._bindDraggabillyEvents = function(draggie, method) {
21854          var handlers = this.handleDraggabilly;
21855          draggie[method]("dragStart", handlers.dragStart);
21856          draggie[method]("dragMove", handlers.dragMove);
21857          draggie[method]("dragEnd", handlers.dragEnd);
21858        };
21859        proto.bindUIDraggableEvents = function($elems) {
21860          this._bindUIDraggableEvents($elems, "on");
21861        };
21862        proto.unbindUIDraggableEvents = function($elems) {
21863          this._bindUIDraggableEvents($elems, "off");
21864        };
21865        proto._bindUIDraggableEvents = function($elems, method) {
21866          var handlers = this.handleUIDraggable;
21867          $elems[method]("dragstart", handlers.start)[method]("drag", handlers.drag)[method]("dragstop", handlers.stop);
21868        };
21869        var _destroy = proto.destroy;
21870        proto.destroy = function() {
21871          _destroy.apply(this, arguments);
21872          this.isEnabled = false;
21873        };
21874        Packery.Rect = Rect;
21875        Packery.Packer = Packer;
21876        return Packery;
21877      });
21878    }
21879  });
21880
21881  
vendor: 5,181 bytes, lines 21881-22023
21881// node_modules/jquery-menu-aim/jquery.menu-aim.js
21882  var require_jquery_menu_aim = __commonJS({
21883    "node_modules/jquery-menu-aim/jquery.menu-aim.js"(exports) {
21884      init_esbuild_shims();
21885      (function(factory) {
21886        if (typeof exports === "object") {
21887          factory(require_jquery());
21888        } else if (typeof define === "function" && define.amd) {
21889          define(["jquery"], factory);
21890        } else {
21891          factory(jQuery);
21892        }
21893      })(function($3) {
21894        $3.fn.menuAim = function(opts) {
21895          this.each(function() {
21896            init.call(this, opts);
21897          });
21898          return this;
21899        };
21900        function init(opts) {
21901          var $menu = $3(this), activeRow = null, mouseLocs = [], lastDelayLoc = null, timeoutId = null, options = $3.extend({
21902            rowSelector: "> li",
21903            submenuSelector: "*",
21904            submenuDirection: "right",
21905            tolerance: 75,
21906            // bigger = more forgivey when entering submenu
21907            enter: $3.noop,
21908            exit: $3.noop,
21909            activate: $3.noop,
21910            deactivate: $3.noop,
21911            exitMenu: $3.noop
21912          }, opts);
21913          var MOUSE_LOCS_TRACKED = 3, DELAY = 300;
21914          var mousemoveDocument = function(e) {
21915            mouseLocs.push({ x: e.pageX, y: e.pageY });
21916            if (mouseLocs.length > MOUSE_LOCS_TRACKED) {
21917              mouseLocs.shift();
21918            }
21919          };
21920          var mouseleaveMenu = function() {
21921            if (timeoutId) {
21922              clearTimeout(timeoutId);
21923            }
21924            if (options.exitMenu(this)) {
21925              if (activeRow) {
21926                options.deactivate(activeRow);
21927              }
21928              activeRow = null;
21929            }
21930          };
21931          var mouseenterRow = function() {
21932            if (timeoutId) {
21933              clearTimeout(timeoutId);
21934            }
21935            options.enter(this);
21936            possiblyActivate(this);
21937          }, mouseleaveRow = function() {
21938            options.exit(this);
21939          };
21940          var clickRow = function() {
21941            activate(this);
21942          };
21943          var activate = function(row) {
21944            if (row == activeRow) {
21945              return;
21946            }
21947            if (activeRow) {
21948              options.deactivate(activeRow);
21949            }
21950            options.activate(row);
21951            activeRow = row;
21952          };
21953          var possiblyActivate = function(row) {
21954            var delay = activationDelay();
21955            if (delay) {
21956              timeoutId = setTimeout(function() {
21957                possiblyActivate(row);
21958              }, delay);
21959            } else {
21960              activate(row);
21961            }
21962          };
21963          var activationDelay = function() {
21964            if (!activeRow || !$3(activeRow).is(options.submenuSelector)) {
21965              return 0;
21966            }
21967            var offset = $menu.offset(), upperLeft = {
21968              x: offset.left,
21969              y: offset.top - options.tolerance
21970            }, upperRight = {
21971              x: offset.left + $menu.outerWidth(),
21972              y: upperLeft.y
21973            }, lowerLeft = {
21974              x: offset.left,
21975              y: offset.top + $menu.outerHeight() + options.tolerance
21976            }, lowerRight = {
21977              x: offset.left + $menu.outerWidth(),
21978              y: lowerLeft.y
21979            }, loc = mouseLocs[mouseLocs.length - 1], prevLoc = mouseLocs[0];
21980            if (!loc) {
21981              return 0;
21982            }
21983            if (!prevLoc) {
21984              prevLoc = loc;
21985            }
21986            if (prevLoc.x < offset.left || prevLoc.x > lowerRight.x || prevLoc.y < offset.top || prevLoc.y > lowerRight.y) {
21987              return 0;
21988            }
21989            if (lastDelayLoc && loc.x == lastDelayLoc.x && loc.y == lastDelayLoc.y) {
21990              return 0;
21991            }
21992            function slope(a, b) {
21993              return (b.y - a.y) / (b.x - a.x);
21994            }
21995            ;
21996            var decreasingCorner = upperRight, increasingCorner = lowerRight;
21997            if (options.submenuDirection == "left") {
21998              decreasingCorner = lowerLeft;
21999              increasingCorner = upperLeft;
22000            } else if (options.submenuDirection == "below") {
22001              decreasingCorner = lowerRight;
22002              increasingCorner = lowerLeft;
22003            } else if (options.submenuDirection == "above") {
22004              decreasingCorner = upperLeft;
22005              increasingCorner = upperRight;
22006            }
22007            var decreasingSlope = slope(loc, decreasingCorner), increasingSlope = slope(loc, increasingCorner), prevDecreasingSlope = slope(prevLoc, decreasingCorner), prevIncreasingSlope = slope(prevLoc, increasingCorner);
22008            if (decreasingSlope < prevDecreasingSlope && increasingSlope > prevIncreasingSlope) {
22009              lastDelayLoc = loc;
22010              return DELAY;
22011            }
22012            lastDelayLoc = null;
22013            return 0;
22014          };
22015          $menu.mouseleave(mouseleaveMenu).find(options.rowSelector).mouseenter(mouseenterRow).mouseleave(mouseleaveRow).click(clickRow);
22016          $3(document).mousemove(mousemoveDocument);
22017        }
22018        ;
22019      });
22020    }
22021  });
22022
22023  
vendor: 403,253 bytes, lines 22023-31914
22023// node_modules/datatables.net/js/jquery.dataTables.js
22024  var require_jquery_dataTables = __commonJS({
22025    "node_modules/datatables.net/js/jquery.dataTables.js"(exports, module) {
22026      init_esbuild_shims();
22027      (function(factory) {
22028        "use strict";
22029        if (typeof define === "function" && define.amd) {
22030          define(["jquery"], function($3) {
22031            return factory($3, window, document);
22032          });
22033        } else if (typeof exports === "object") {
22034          var jq = require_jquery();
22035          if (typeof window === "undefined") {
22036            module.exports = function(root, $3) {
22037              if (!root) {
22038                root = window;
22039              }
22040              if (!$3) {
22041                $3 = jq(root);
22042              }
22043              return factory($3, root, root.document);
22044            };
22045          } else {
22046            module.exports = factory(jq, window, window.document);
22047          }
22048        } else {
22049          window.DataTable = factory(jQuery, window, document);
22050        }
22051      })(function($3, window2, document2, undefined2) {
22052        "use strict";
22053        var DataTable2 = function(selector, options) {
22054          if (DataTable2.factory(selector, options)) {
22055            return DataTable2;
22056          }
22057          if (this instanceof DataTable2) {
22058            return $3(selector).DataTable(options);
22059          } else {
22060            options = selector;
22061          }
22062          this.$ = function(sSelector, oOpts) {
22063            return this.api(true).$(sSelector, oOpts);
22064          };
22065          this._ = function(sSelector, oOpts) {
22066            return this.api(true).rows(sSelector, oOpts).data();
22067          };
22068          this.api = function(traditional) {
22069            return traditional ? new _Api(
22070              _fnSettingsFromNode(this[_ext.iApiIndex])
22071            ) : new _Api(this);
22072          };
22073          this.fnAddData = function(data, redraw) {
22074            var api = this.api(true);
22075            var rows = Array.isArray(data) && (Array.isArray(data[0]) || $3.isPlainObject(data[0])) ? api.rows.add(data) : api.row.add(data);
22076            if (redraw === undefined2 || redraw) {
22077              api.draw();
22078            }
22079            return rows.flatten().toArray();
22080          };
22081          this.fnAdjustColumnSizing = function(bRedraw) {
22082            var api = this.api(true).columns.adjust();
22083            var settings = api.settings()[0];
22084            var scroll = settings.oScroll;
22085            if (bRedraw === undefined2 || bRedraw) {
22086              api.draw(false);
22087            } else if (scroll.sX !== "" || scroll.sY !== "") {
22088              _fnScrollDraw(settings);
22089            }
22090          };
22091          this.fnClearTable = function(bRedraw) {
22092            var api = this.api(true).clear();
22093            if (bRedraw === undefined2 || bRedraw) {
22094              api.draw();
22095            }
22096          };
22097          this.fnClose = function(nTr) {
22098            this.api(true).row(nTr).child.hide();
22099          };
22100          this.fnDeleteRow = function(target, callback, redraw) {
22101            var api = this.api(true);
22102            var rows = api.rows(target);
22103            var settings = rows.settings()[0];
22104            var data = settings.aoData[rows[0][0]];
22105            rows.remove();
22106            if (callback) {
22107              callback.call(this, settings, data);
22108            }
22109            if (redraw === undefined2 || redraw) {
22110              api.draw();
22111            }
22112            return data;
22113          };
22114          this.fnDestroy = function(remove) {
22115            this.api(true).destroy(remove);
22116          };
22117          this.fnDraw = function(complete) {
22118            this.api(true).draw(complete);
22119          };
22120          this.fnFilter = function(sInput, iColumn, bRegex, bSmart, bShowGlobal, bCaseInsensitive) {
22121            var api = this.api(true);
22122            if (iColumn === null || iColumn === undefined2) {
22123              api.search(sInput, bRegex, bSmart, bCaseInsensitive);
22124            } else {
22125              api.column(iColumn).search(sInput, bRegex, bSmart, bCaseInsensitive);
22126            }
22127            api.draw();
22128          };
22129          this.fnGetData = function(src, col) {
22130            var api = this.api(true);
22131            if (src !== undefined2) {
22132              var type = src.nodeName ? src.nodeName.toLowerCase() : "";
22133              return col !== undefined2 || type == "td" || type == "th" ? api.cell(src, col).data() : api.row(src).data() || null;
22134            }
22135            return api.data().toArray();
22136          };
22137          this.fnGetNodes = function(iRow) {
22138            var api = this.api(true);
22139            return iRow !== undefined2 ? api.row(iRow).node() : api.rows().nodes().flatten().toArray();
22140          };
22141          this.fnGetPosition = function(node) {
22142            var api = this.api(true);
22143            var nodeName = node.nodeName.toUpperCase();
22144            if (nodeName == "TR") {
22145              return api.row(node).index();
22146            } else if (nodeName == "TD" || nodeName == "TH") {
22147              var cell = api.cell(node).index();
22148              return [
22149                cell.row,
22150                cell.columnVisible,
22151                cell.column
22152              ];
22153            }
22154            return null;
22155          };
22156          this.fnIsOpen = function(nTr) {
22157            return this.api(true).row(nTr).child.isShown();
22158          };
22159          this.fnOpen = function(nTr, mHtml, sClass) {
22160            return this.api(true).row(nTr).child(mHtml, sClass).show().child()[0];
22161          };
22162          this.fnPageChange = function(mAction, bRedraw) {
22163            var api = this.api(true).page(mAction);
22164            if (bRedraw === undefined2 || bRedraw) {
22165              api.draw(false);
22166            }
22167          };
22168          this.fnSetColumnVis = function(iCol, bShow, bRedraw) {
22169            var api = this.api(true).column(iCol).visible(bShow);
22170            if (bRedraw === undefined2 || bRedraw) {
22171              api.columns.adjust().draw();
22172            }
22173          };
22174          this.fnSettings = function() {
22175            return _fnSettingsFromNode(this[_ext.iApiIndex]);
22176          };
22177          this.fnSort = function(aaSort) {
22178            this.api(true).order(aaSort).draw();
22179          };
22180          this.fnSortListener = function(nNode, iColumn, fnCallback) {
22181            this.api(true).order.listener(nNode, iColumn, fnCallback);
22182          };
22183          this.fnUpdate = function(mData, mRow, iColumn, bRedraw, bAction) {
22184            var api = this.api(true);
22185            if (iColumn === undefined2 || iColumn === null) {
22186              api.row(mRow).data(mData);
22187            } else {
22188              api.cell(mRow, iColumn).data(mData);
22189            }
22190            if (bAction === undefined2 || bAction) {
22191              api.columns.adjust();
22192            }
22193            if (bRedraw === undefined2 || bRedraw) {
22194              api.draw();
22195            }
22196            return 0;
22197          };
22198          this.fnVersionCheck = _ext.fnVersionCheck;
22199          var _that = this;
22200          var emptyInit = options === undefined2;
22201          var len = this.length;
22202          if (emptyInit) {
22203            options = {};
22204          }
22205          this.oApi = this.internal = _ext.internal;
22206          for (var fn in DataTable2.ext.internal) {
22207            if (fn) {
22208              this[fn] = _fnExternApiFunc(fn);
22209            }
22210          }
22211          this.each(function() {
22212            var o = {};
22213            var oInit = len > 1 ? (
22214              // optimisation for single table case
22215              _fnExtend(o, options, true)
22216            ) : options;
22217            var i2 = 0, iLen, j, jLen, k, kLen;
22218            var sId = this.getAttribute("id");
22219            var bInitHandedOff = false;
22220            var defaults = DataTable2.defaults;
22221            var $this = $3(this);
22222            if (this.nodeName.toLowerCase() != "table") {
22223              _fnLog(null, 0, "Non-table node initialisation (" + this.nodeName + ")", 2);
22224              return;
22225            }
22226            _fnCompatOpts(defaults);
22227            _fnCompatCols(defaults.column);
22228            _fnCamelToHungarian(defaults, defaults, true);
22229            _fnCamelToHungarian(defaults.column, defaults.column, true);
22230            _fnCamelToHungarian(defaults, $3.extend(oInit, $this.data()), true);
22231            var allSettings = DataTable2.settings;
22232            for (i2 = 0, iLen = allSettings.length; i2 < iLen; i2++) {
22233              var s = allSettings[i2];
22234              if (s.nTable == this || s.nTHead && s.nTHead.parentNode == this || s.nTFoot && s.nTFoot.parentNode == this) {
22235                var bRetrieve = oInit.bRetrieve !== undefined2 ? oInit.bRetrieve : defaults.bRetrieve;
22236                var bDestroy = oInit.bDestroy !== undefined2 ? oInit.bDestroy : defaults.bDestroy;
22237                if (emptyInit || bRetrieve) {
22238                  return s.oInstance;
22239                } else if (bDestroy) {
22240                  s.oInstance.fnDestroy();
22241                  break;
22242                } else {
22243                  _fnLog(s, 0, "Cannot reinitialise DataTable", 3);
22244                  return;
22245                }
22246              }
22247              if (s.sTableId == this.id) {
22248                allSettings.splice(i2, 1);
22249                break;
22250              }
22251            }
22252            if (sId === null || sId === "") {
22253              sId = "DataTables_Table_" + DataTable2.ext._unique++;
22254              this.id = sId;
22255            }
22256            var oSettings = $3.extend(true, {}, DataTable2.models.oSettings, {
22257              "sDestroyWidth": $this[0].style.width,
22258              "sInstance": sId,
22259              "sTableId": sId
22260            });
22261            oSettings.nTable = this;
22262            oSettings.oApi = _that.internal;
22263            oSettings.oInit = oInit;
22264            allSettings.push(oSettings);
22265            oSettings.oInstance = _that.length === 1 ? _that : $this.dataTable();
22266            _fnCompatOpts(oInit);
22267            _fnLanguageCompat(oInit.oLanguage);
22268            if (oInit.aLengthMenu && !oInit.iDisplayLength) {
22269              oInit.iDisplayLength = Array.isArray(oInit.aLengthMenu[0]) ? oInit.aLengthMenu[0][0] : oInit.aLengthMenu[0];
22270            }
22271            oInit = _fnExtend($3.extend(true, {}, defaults), oInit);
22272            _fnMap(oSettings.oFeatures, oInit, [
22273              "bPaginate",
22274              "bLengthChange",
22275              "bFilter",
22276              "bSort",
22277              "bSortMulti",
22278              "bInfo",
22279              "bProcessing",
22280              "bAutoWidth",
22281              "bSortClasses",
22282              "bServerSide",
22283              "bDeferRender"
22284            ]);
22285            _fnMap(oSettings, oInit, [
22286              "asStripeClasses",
22287              "ajax",
22288              "fnServerData",
22289              "fnFormatNumber",
22290              "sServerMethod",
22291              "aaSorting",
22292              "aaSortingFixed",
22293              "aLengthMenu",
22294              "sPaginationType",
22295              "sAjaxSource",
22296              "sAjaxDataProp",
22297              "iStateDuration",
22298              "sDom",
22299              "bSortCellsTop",
22300              "iTabIndex",
22301              "fnStateLoadCallback",
22302              "fnStateSaveCallback",
22303              "renderer",
22304              "searchDelay",
22305              "rowId",
22306              ["iCookieDuration", "iStateDuration"],
22307              // backwards compat
22308              ["oSearch", "oPreviousSearch"],
22309              ["aoSearchCols", "aoPreSearchCols"],
22310              ["iDisplayLength", "_iDisplayLength"]
22311            ]);
22312            _fnMap(oSettings.oScroll, oInit, [
22313              ["sScrollX", "sX"],
22314              ["sScrollXInner", "sXInner"],
22315              ["sScrollY", "sY"],
22316              ["bScrollCollapse", "bCollapse"]
22317            ]);
22318            _fnMap(oSettings.oLanguage, oInit, "fnInfoCallback");
22319            _fnCallbackReg(oSettings, "aoDrawCallback", oInit.fnDrawCallback, "user");
22320            _fnCallbackReg(oSettings, "aoServerParams", oInit.fnServerParams, "user");
22321            _fnCallbackReg(oSettings, "aoStateSaveParams", oInit.fnStateSaveParams, "user");
22322            _fnCallbackReg(oSettings, "aoStateLoadParams", oInit.fnStateLoadParams, "user");
22323            _fnCallbackReg(oSettings, "aoStateLoaded", oInit.fnStateLoaded, "user");
22324            _fnCallbackReg(oSettings, "aoRowCallback", oInit.fnRowCallback, "user");
22325            _fnCallbackReg(oSettings, "aoRowCreatedCallback", oInit.fnCreatedRow, "user");
22326            _fnCallbackReg(oSettings, "aoHeaderCallback", oInit.fnHeaderCallback, "user");
22327            _fnCallbackReg(oSettings, "aoFooterCallback", oInit.fnFooterCallback, "user");
22328            _fnCallbackReg(oSettings, "aoInitComplete", oInit.fnInitComplete, "user");
22329            _fnCallbackReg(oSettings, "aoPreDrawCallback", oInit.fnPreDrawCallback, "user");
22330            oSettings.rowIdFn = _fnGetObjectDataFn(oInit.rowId);
22331            _fnBrowserDetect(oSettings);
22332            var oClasses = oSettings.oClasses;
22333            $3.extend(oClasses, DataTable2.ext.classes, oInit.oClasses);
22334            $this.addClass(oClasses.sTable);
22335            if (oSettings.iInitDisplayStart === undefined2) {
22336              oSettings.iInitDisplayStart = oInit.iDisplayStart;
22337              oSettings._iDisplayStart = oInit.iDisplayStart;
22338            }
22339            if (oInit.iDeferLoading !== null) {
22340              oSettings.bDeferLoading = true;
22341              var tmp = Array.isArray(oInit.iDeferLoading);
22342              oSettings._iRecordsDisplay = tmp ? oInit.iDeferLoading[0] : oInit.iDeferLoading;
22343              oSettings._iRecordsTotal = tmp ? oInit.iDeferLoading[1] : oInit.iDeferLoading;
22344            }
22345            var oLanguage = oSettings.oLanguage;
22346            $3.extend(true, oLanguage, oInit.oLanguage);
22347            if (oLanguage.sUrl) {
22348              $3.ajax({
22349                dataType: "json",
22350                url: oLanguage.sUrl,
22351                success: function(json) {
22352                  _fnCamelToHungarian(defaults.oLanguage, json);
22353                  _fnLanguageCompat(json);
22354                  $3.extend(true, oLanguage, json, oSettings.oInit.oLanguage);
22355                  _fnCallbackFire(oSettings, null, "i18n", [oSettings]);
22356                  _fnInitialise(oSettings);
22357                },
22358                error: function() {
22359                  _fnInitialise(oSettings);
22360                }
22361              });
22362              bInitHandedOff = true;
22363            } else {
22364              _fnCallbackFire(oSettings, null, "i18n", [oSettings]);
22365            }
22366            if (oInit.asStripeClasses === null) {
22367              oSettings.asStripeClasses = [
22368                oClasses.sStripeOdd,
22369                oClasses.sStripeEven
22370              ];
22371            }
22372            var stripeClasses = oSettings.asStripeClasses;
22373            var rowOne = $this.children("tbody").find("tr").eq(0);
22374            if ($3.inArray(true, $3.map(stripeClasses, function(el, i3) {
22375              return rowOne.hasClass(el);
22376            })) !== -1) {
22377              $3("tbody tr", this).removeClass(stripeClasses.join(" "));
22378              oSettings.asDestroyStripes = stripeClasses.slice();
22379            }
22380            var anThs = [];
22381            var aoColumnsInit;
22382            var nThead = this.getElementsByTagName("thead");
22383            if (nThead.length !== 0) {
22384              _fnDetectHeader(oSettings.aoHeader, nThead[0]);
22385              anThs = _fnGetUniqueThs(oSettings);
22386            }
22387            if (oInit.aoColumns === null) {
22388              aoColumnsInit = [];
22389              for (i2 = 0, iLen = anThs.length; i2 < iLen; i2++) {
22390                aoColumnsInit.push(null);
22391              }
22392            } else {
22393              aoColumnsInit = oInit.aoColumns;
22394            }
22395            for (i2 = 0, iLen = aoColumnsInit.length; i2 < iLen; i2++) {
22396              _fnAddColumn(oSettings, anThs ? anThs[i2] : null);
22397            }
22398            _fnApplyColumnDefs(oSettings, oInit.aoColumnDefs, aoColumnsInit, function(iCol, oDef) {
22399              _fnColumnOptions(oSettings, iCol, oDef);
22400            });
22401            if (rowOne.length) {
22402              var a = function(cell, name) {
22403                return cell.getAttribute("data-" + name) !== null ? name : null;
22404              };
22405              $3(rowOne[0]).children("th, td").each(function(i3, cell) {
22406                var col = oSettings.aoColumns[i3];
22407                if (!col) {
22408                  _fnLog(oSettings, 0, "Incorrect column count", 18);
22409                }
22410                if (col.mData === i3) {
22411                  var sort = a(cell, "sort") || a(cell, "order");
22412                  var filter = a(cell, "filter") || a(cell, "search");
22413                  if (sort !== null || filter !== null) {
22414                    col.mData = {
22415                      _: i3 + ".display",
22416                      sort: sort !== null ? i3 + ".@data-" + sort : undefined2,
22417                      type: sort !== null ? i3 + ".@data-" + sort : undefined2,
22418                      filter: filter !== null ? i3 + ".@data-" + filter : undefined2
22419                    };
22420                    col._isArrayHost = true;
22421                    _fnColumnOptions(oSettings, i3);
22422                  }
22423                }
22424              });
22425            }
22426            var features = oSettings.oFeatures;
22427            var loadedInit = function() {
22428              if (oInit.aaSorting === undefined2) {
22429                var sorting = oSettings.aaSorting;
22430                for (i2 = 0, iLen = sorting.length; i2 < iLen; i2++) {
22431                  sorting[i2][1] = oSettings.aoColumns[i2].asSorting[0];
22432                }
22433              }
22434              _fnSortingClasses(oSettings);
22435              if (features.bSort) {
22436                _fnCallbackReg(oSettings, "aoDrawCallback", function() {
22437                  if (oSettings.bSorted) {
22438                    var aSort = _fnSortFlatten(oSettings);
22439                    var sortedColumns = {};
22440                    $3.each(aSort, function(i3, val) {
22441                      sortedColumns[val.src] = val.dir;
22442                    });
22443                    _fnCallbackFire(oSettings, null, "order", [oSettings, aSort, sortedColumns]);
22444                    _fnSortAria(oSettings);
22445                  }
22446                });
22447              }
22448              _fnCallbackReg(oSettings, "aoDrawCallback", function() {
22449                if (oSettings.bSorted || _fnDataSource(oSettings) === "ssp" || features.bDeferRender) {
22450                  _fnSortingClasses(oSettings);
22451                }
22452              }, "sc");
22453              var captions = $this.children("caption").each(function() {
22454                this._captionSide = $3(this).css("caption-side");
22455              });
22456              var thead = $this.children("thead");
22457              if (thead.length === 0) {
22458                thead = $3("<thead/>").appendTo($this);
22459              }
22460              oSettings.nTHead = thead[0];
22461              var tbody = $this.children("tbody");
22462              if (tbody.length === 0) {
22463                tbody = $3("<tbody/>").insertAfter(thead);
22464              }
22465              oSettings.nTBody = tbody[0];
22466              var tfoot = $this.children("tfoot");
22467              if (tfoot.length === 0 && captions.length > 0 && (oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "")) {
22468                tfoot = $3("<tfoot/>").appendTo($this);
22469              }
22470              if (tfoot.length === 0 || tfoot.children().length === 0) {
22471                $this.addClass(oClasses.sNoFooter);
22472              } else if (tfoot.length > 0) {
22473                oSettings.nTFoot = tfoot[0];
22474                _fnDetectHeader(oSettings.aoFooter, oSettings.nTFoot);
22475              }
22476              if (oInit.aaData) {
22477                for (i2 = 0; i2 < oInit.aaData.length; i2++) {
22478                  _fnAddData(oSettings, oInit.aaData[i2]);
22479                }
22480              } else if (oSettings.bDeferLoading || _fnDataSource(oSettings) == "dom") {
22481                _fnAddTr(oSettings, $3(oSettings.nTBody).children("tr"));
22482              }
22483              oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
22484              oSettings.bInitialised = true;
22485              if (bInitHandedOff === false) {
22486                _fnInitialise(oSettings);
22487              }
22488            };
22489            _fnCallbackReg(oSettings, "aoDrawCallback", _fnSaveState, "state_save");
22490            if (oInit.bStateSave) {
22491              features.bStateSave = true;
22492              _fnLoadState(oSettings, oInit, loadedInit);
22493            } else {
22494              loadedInit();
22495            }
22496          });
22497          _that = null;
22498          return this;
22499        };
22500        var _ext;
22501        var _Api;
22502        var _api_register;
22503        var _api_registerPlural;
22504        var _re_dic = {};
22505        var _re_new_lines = /[\r\n\u2028]/g;
22506        var _re_html = /<.*?>/g;
22507        var _re_date = /^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/;
22508        var _re_escape_regex = new RegExp("(\\" + ["/", ".", "*", "+", "?", "|", "(", ")", "[", "]", "{", "}", "\\", "$", "^", "-"].join("|\\") + ")", "g");
22509        var _re_formatted_numeric = /['\u00A0,$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfkɃΞ]/gi;
22510        var _empty = function(d) {
22511          return !d || d === true || d === "-" ? true : false;
22512        };
22513        var _intVal = function(s) {
22514          var integer = parseInt(s, 10);
22515          return !isNaN(integer) && isFinite(s) ? integer : null;
22516        };
22517        var _numToDecimal = function(num2, decimalPoint) {
22518          if (!_re_dic[decimalPoint]) {
22519            _re_dic[decimalPoint] = new RegExp(_fnEscapeRegex(decimalPoint), "g");
22520          }
22521          return typeof num2 === "string" && decimalPoint !== "." ? num2.replace(/\./g, "").replace(_re_dic[decimalPoint], ".") : num2;
22522        };
22523        var _isNumber = function(d, decimalPoint, formatted) {
22524          var type = typeof d;
22525          var strType = type === "string";
22526          if (type === "number" || type === "bigint") {
22527            return true;
22528          }
22529          if (_empty(d)) {
22530            return true;
22531          }
22532          if (decimalPoint && strType) {
22533            d = _numToDecimal(d, decimalPoint);
22534          }
22535          if (formatted && strType) {
22536            d = d.replace(_re_formatted_numeric, "");
22537          }
22538          return !isNaN(parseFloat(d)) && isFinite(d);
22539        };
22540        var _isHtml = function(d) {
22541          return _empty(d) || typeof d === "string";
22542        };
22543        var _htmlNumeric = function(d, decimalPoint, formatted) {
22544          if (_empty(d)) {
22545            return true;
22546          }
22547          var html = _isHtml(d);
22548          return !html ? null : _isNumber(_stripHtml(d), decimalPoint, formatted) ? true : null;
22549        };
22550        var _pluck = function(a, prop, prop2) {
22551          var out = [];
22552          var i2 = 0, ien = a.length;
22553          if (prop2 !== undefined2) {
22554            for (; i2 < ien; i2++) {
22555              if (a[i2] && a[i2][prop]) {
22556                out.push(a[i2][prop][prop2]);
22557              }
22558            }
22559          } else {
22560            for (; i2 < ien; i2++) {
22561              if (a[i2]) {
22562                out.push(a[i2][prop]);
22563              }
22564            }
22565          }
22566          return out;
22567        };
22568        var _pluck_order = function(a, order, prop, prop2) {
22569          var out = [];
22570          var i2 = 0, ien = order.length;
22571          if (prop2 !== undefined2) {
22572            for (; i2 < ien; i2++) {
22573              if (a[order[i2]][prop]) {
22574                out.push(a[order[i2]][prop][prop2]);
22575              }
22576            }
22577          } else {
22578            for (; i2 < ien; i2++) {
22579              out.push(a[order[i2]][prop]);
22580            }
22581          }
22582          return out;
22583        };
22584        var _range = function(len, start) {
22585          var out = [];
22586          var end;
22587          if (start === undefined2) {
22588            start = 0;
22589            end = len;
22590          } else {
22591            end = start;
22592            start = len;
22593          }
22594          for (var i2 = start; i2 < end; i2++) {
22595            out.push(i2);
22596          }
22597          return out;
22598        };
22599        var _removeEmpty = function(a) {
22600          var out = [];
22601          for (var i2 = 0, ien = a.length; i2 < ien; i2++) {
22602            if (a[i2]) {
22603              out.push(a[i2]);
22604            }
22605          }
22606          return out;
22607        };
22608        var _stripHtml = function(d) {
22609          return d.replace(_re_html, "").replace(/<script/i, "");
22610        };
22611        var _areAllUnique = function(src) {
22612          if (src.length < 2) {
22613            return true;
22614          }
22615          var sorted = src.slice().sort();
22616          var last = sorted[0];
22617          for (var i2 = 1, ien = sorted.length; i2 < ien; i2++) {
22618            if (sorted[i2] === last) {
22619              return false;
22620            }
22621            last = sorted[i2];
22622          }
22623          return true;
22624        };
22625        var _unique = function(src) {
22626          if (_areAllUnique(src)) {
22627            return src.slice();
22628          }
22629          var out = [], val, i2, ien = src.length, j, k = 0;
22630          again: for (i2 = 0; i2 < ien; i2++) {
22631            val = src[i2];
22632            for (j = 0; j < k; j++) {
22633              if (out[j] === val) {
22634                continue again;
22635              }
22636            }
22637            out.push(val);
22638            k++;
22639          }
22640          return out;
22641        };
22642        var _flatten = function(out, val) {
22643          if (Array.isArray(val)) {
22644            for (var i2 = 0; i2 < val.length; i2++) {
22645              _flatten(out, val[i2]);
22646            }
22647          } else {
22648            out.push(val);
22649          }
22650          return out;
22651        };
22652        var _includes = function(search, start) {
22653          if (start === undefined2) {
22654            start = 0;
22655          }
22656          return this.indexOf(search, start) !== -1;
22657        };
22658        if (!Array.isArray) {
22659          Array.isArray = function(arg) {
22660            return Object.prototype.toString.call(arg) === "[object Array]";
22661          };
22662        }
22663        if (!Array.prototype.includes) {
22664          Array.prototype.includes = _includes;
22665        }
22666        if (!String.prototype.trim) {
22667          String.prototype.trim = function() {
22668            return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, "");
22669          };
22670        }
22671        if (!String.prototype.includes) {
22672          String.prototype.includes = _includes;
22673        }
22674        DataTable2.util = {
22675          /**
22676           * Throttle the calls to a function. Arguments and context are maintained
22677           * for the throttled function.
22678           *
22679           * @param {function} fn Function to be called
22680           * @param {integer} freq Call frequency in mS
22681           * @return {function} Wrapped function
22682           */
22683          throttle: function(fn, freq) {
22684            var frequency = freq !== undefined2 ? freq : 200, last, timer;
22685            return function() {
22686              var that = this, now = +/* @__PURE__ */ new Date(), args = arguments;
22687              if (last && now < last + frequency) {
22688                clearTimeout(timer);
22689                timer = setTimeout(function() {
22690                  last = undefined2;
22691                  fn.apply(that, args);
22692                }, frequency);
22693              } else {
22694                last = now;
22695                fn.apply(that, args);
22696              }
22697            };
22698          },
22699          /**
22700           * Escape a string such that it can be used in a regular expression
22701           *
22702           *  @param {string} val string to escape
22703           *  @returns {string} escaped string
22704           */
22705          escapeRegex: function(val) {
22706            return val.replace(_re_escape_regex, "\\$1");
22707          },
22708          /**
22709           * Create a function that will write to a nested object or array
22710           * @param {*} source JSON notation string
22711           * @returns Write function
22712           */
22713          set: function(source) {
22714            if ($3.isPlainObject(source)) {
22715              return DataTable2.util.set(source._);
22716            } else if (source === null) {
22717              return function() {
22718              };
22719            } else if (typeof source === "function") {
22720              return function(data, val, meta) {
22721                source(data, "set", val, meta);
22722              };
22723            } else if (typeof source === "string" && (source.indexOf(".") !== -1 || source.indexOf("[") !== -1 || source.indexOf("(") !== -1)) {
22724              var setData = function(data, val, src) {
22725                var a = _fnSplitObjNotation(src), b;
22726                var aLast = a[a.length - 1];
22727                var arrayNotation, funcNotation, o, innerSrc;
22728                for (var i2 = 0, iLen = a.length - 1; i2 < iLen; i2++) {
22729                  if (a[i2] === "__proto__" || a[i2] === "constructor") {
22730                    throw new Error("Cannot set prototype values");
22731                  }
22732                  arrayNotation = a[i2].match(__reArray);
22733                  funcNotation = a[i2].match(__reFn);
22734                  if (arrayNotation) {
22735                    a[i2] = a[i2].replace(__reArray, "");
22736                    data[a[i2]] = [];
22737                    b = a.slice();
22738                    b.splice(0, i2 + 1);
22739                    innerSrc = b.join(".");
22740                    if (Array.isArray(val)) {
22741                      for (var j = 0, jLen = val.length; j < jLen; j++) {
22742                        o = {};
22743                        setData(o, val[j], innerSrc);
22744                        data[a[i2]].push(o);
22745                      }
22746                    } else {
22747                      data[a[i2]] = val;
22748                    }
22749                    return;
22750                  } else if (funcNotation) {
22751                    a[i2] = a[i2].replace(__reFn, "");
22752                    data = data[a[i2]](val);
22753                  }
22754                  if (data[a[i2]] === null || data[a[i2]] === undefined2) {
22755                    data[a[i2]] = {};
22756                  }
22757                  data = data[a[i2]];
22758                }
22759                if (aLast.match(__reFn)) {
22760                  data = data[aLast.replace(__reFn, "")](val);
22761                } else {
22762                  data[aLast.replace(__reArray, "")] = val;
22763                }
22764              };
22765              return function(data, val) {
22766                return setData(data, val, source);
22767              };
22768            } else {
22769              return function(data, val) {
22770                data[source] = val;
22771              };
22772            }
22773          },
22774          /**
22775           * Create a function that will read nested objects from arrays, based on JSON notation
22776           * @param {*} source JSON notation string
22777           * @returns Value read
22778           */
22779          get: function(source) {
22780            if ($3.isPlainObject(source)) {
22781              var o = {};
22782              $3.each(source, function(key, val) {
22783                if (val) {
22784                  o[key] = DataTable2.util.get(val);
22785                }
22786              });
22787              return function(data, type, row, meta) {
22788                var t2 = o[type] || o._;
22789                return t2 !== undefined2 ? t2(data, type, row, meta) : data;
22790              };
22791            } else if (source === null) {
22792              return function(data) {
22793                return data;
22794              };
22795            } else if (typeof source === "function") {
22796              return function(data, type, row, meta) {
22797                return source(data, type, row, meta);
22798              };
22799            } else if (typeof source === "string" && (source.indexOf(".") !== -1 || source.indexOf("[") !== -1 || source.indexOf("(") !== -1)) {
22800              var fetchData = function(data, type, src) {
22801                var arrayNotation, funcNotation, out, innerSrc;
22802                if (src !== "") {
22803                  var a = _fnSplitObjNotation(src);
22804                  for (var i2 = 0, iLen = a.length; i2 < iLen; i2++) {
22805                    arrayNotation = a[i2].match(__reArray);
22806                    funcNotation = a[i2].match(__reFn);
22807                    if (arrayNotation) {
22808                      a[i2] = a[i2].replace(__reArray, "");
22809                      if (a[i2] !== "") {
22810                        data = data[a[i2]];
22811                      }
22812                      out = [];
22813                      a.splice(0, i2 + 1);
22814                      innerSrc = a.join(".");
22815                      if (Array.isArray(data)) {
22816                        for (var j = 0, jLen = data.length; j < jLen; j++) {
22817                          out.push(fetchData(data[j], type, innerSrc));
22818                        }
22819                      }
22820                      var join = arrayNotation[0].substring(1, arrayNotation[0].length - 1);
22821                      data = join === "" ? out : out.join(join);
22822                      break;
22823                    } else if (funcNotation) {
22824                      a[i2] = a[i2].replace(__reFn, "");
22825                      data = data[a[i2]]();
22826                      continue;
22827                    }
22828                    if (data === null || data[a[i2]] === null) {
22829                      return null;
22830                    } else if (data === undefined2 || data[a[i2]] === undefined2) {
22831                      return undefined2;
22832                    }
22833                    data = data[a[i2]];
22834                  }
22835                }
22836                return data;
22837              };
22838              return function(data, type) {
22839                return fetchData(data, type, source);
22840              };
22841            } else {
22842              return function(data, type) {
22843                return data[source];
22844              };
22845            }
22846          }
22847        };
22848        function _fnHungarianMap(o) {
22849          var hungarian = "a aa ai ao as b fn i m o s ", match, newKey, map = {};
22850          $3.each(o, function(key, val) {
22851            match = key.match(/^([^A-Z]+?)([A-Z])/);
22852            if (match && hungarian.indexOf(match[1] + " ") !== -1) {
22853              newKey = key.replace(match[0], match[2].toLowerCase());
22854              map[newKey] = key;
22855              if (match[1] === "o") {
22856                _fnHungarianMap(o[key]);
22857              }
22858            }
22859          });
22860          o._hungarianMap = map;
22861        }
22862        function _fnCamelToHungarian(src, user, force) {
22863          if (!src._hungarianMap) {
22864            _fnHungarianMap(src);
22865          }
22866          var hungarianKey;
22867          $3.each(user, function(key, val) {
22868            hungarianKey = src._hungarianMap[key];
22869            if (hungarianKey !== undefined2 && (force || user[hungarianKey] === undefined2)) {
22870              if (hungarianKey.charAt(0) === "o") {
22871                if (!user[hungarianKey]) {
22872                  user[hungarianKey] = {};
22873                }
22874                $3.extend(true, user[hungarianKey], user[key]);
22875                _fnCamelToHungarian(src[hungarianKey], user[hungarianKey], force);
22876              } else {
22877                user[hungarianKey] = user[key];
22878              }
22879            }
22880          });
22881        }
22882        function _fnLanguageCompat(lang) {
22883          var defaults = DataTable2.defaults.oLanguage;
22884          var defaultDecimal = defaults.sDecimal;
22885          if (defaultDecimal) {
22886            _addNumericSort(defaultDecimal);
22887          }
22888          if (lang) {
22889            var zeroRecords = lang.sZeroRecords;
22890            if (!lang.sEmptyTable && zeroRecords && defaults.sEmptyTable === "No data available in table") {
22891              _fnMap(lang, lang, "sZeroRecords", "sEmptyTable");
22892            }
22893            if (!lang.sLoadingRecords && zeroRecords && defaults.sLoadingRecords === "Loading...") {
22894              _fnMap(lang, lang, "sZeroRecords", "sLoadingRecords");
22895            }
22896            if (lang.sInfoThousands) {
22897              lang.sThousands = lang.sInfoThousands;
22898            }
22899            var decimal = lang.sDecimal;
22900            if (decimal && defaultDecimal !== decimal) {
22901              _addNumericSort(decimal);
22902            }
22903          }
22904        }
22905        var _fnCompatMap = function(o, knew, old) {
22906          if (o[knew] !== undefined2) {
22907            o[old] = o[knew];
22908          }
22909        };
22910        function _fnCompatOpts(init) {
22911          _fnCompatMap(init, "ordering", "bSort");
22912          _fnCompatMap(init, "orderMulti", "bSortMulti");
22913          _fnCompatMap(init, "orderClasses", "bSortClasses");
22914          _fnCompatMap(init, "orderCellsTop", "bSortCellsTop");
22915          _fnCompatMap(init, "order", "aaSorting");
22916          _fnCompatMap(init, "orderFixed", "aaSortingFixed");
22917          _fnCompatMap(init, "paging", "bPaginate");
22918          _fnCompatMap(init, "pagingType", "sPaginationType");
22919          _fnCompatMap(init, "pageLength", "iDisplayLength");
22920          _fnCompatMap(init, "searching", "bFilter");
22921          if (typeof init.sScrollX === "boolean") {
22922            init.sScrollX = init.sScrollX ? "100%" : "";
22923          }
22924          if (typeof init.scrollX === "boolean") {
22925            init.scrollX = init.scrollX ? "100%" : "";
22926          }
22927          var searchCols = init.aoSearchCols;
22928          if (searchCols) {
22929            for (var i2 = 0, ien = searchCols.length; i2 < ien; i2++) {
22930              if (searchCols[i2]) {
22931                _fnCamelToHungarian(DataTable2.models.oSearch, searchCols[i2]);
22932              }
22933            }
22934          }
22935        }
22936        function _fnCompatCols(init) {
22937          _fnCompatMap(init, "orderable", "bSortable");
22938          _fnCompatMap(init, "orderData", "aDataSort");
22939          _fnCompatMap(init, "orderSequence", "asSorting");
22940          _fnCompatMap(init, "orderDataType", "sortDataType");
22941          var dataSort = init.aDataSort;
22942          if (typeof dataSort === "number" && !Array.isArray(dataSort)) {
22943            init.aDataSort = [dataSort];
22944          }
22945        }
22946        function _fnBrowserDetect(settings) {
22947          if (!DataTable2.__browser) {
22948            var browser2 = {};
22949            DataTable2.__browser = browser2;
22950            var n = $3("<div/>").css({
22951              position: "fixed",
22952              top: 0,
22953              left: $3(window2).scrollLeft() * -1,
22954              // allow for scrolling
22955              height: 1,
22956              width: 1,
22957              overflow: "hidden"
22958            }).append(
22959              $3("<div/>").css({
22960                position: "absolute",
22961                top: 1,
22962                left: 1,
22963                width: 100,
22964                overflow: "scroll"
22965              }).append(
22966                $3("<div/>").css({
22967                  width: "100%",
22968                  height: 10
22969                })
22970              )
22971            ).appendTo("body");
22972            var outer = n.children();
22973            var inner = outer.children();
22974            browser2.barWidth = outer[0].offsetWidth - outer[0].clientWidth;
22975            browser2.bScrollOversize = inner[0].offsetWidth === 100 && outer[0].clientWidth !== 100;
22976            browser2.bScrollbarLeft = Math.round(inner.offset().left) !== 1;
22977            browser2.bBounding = n[0].getBoundingClientRect().width ? true : false;
22978            n.remove();
22979          }
22980          $3.extend(settings.oBrowser, DataTable2.__browser);
22981          settings.oScroll.iBarWidth = DataTable2.__browser.barWidth;
22982        }
22983        function _fnReduce(that, fn, init, start, end, inc) {
22984          var i2 = start, value, isSet = false;
22985          if (init !== undefined2) {
22986            value = init;
22987            isSet = true;
22988          }
22989          while (i2 !== end) {
22990            if (!that.hasOwnProperty(i2)) {
22991              continue;
22992            }
22993            value = isSet ? fn(value, that[i2], i2, that) : that[i2];
22994            isSet = true;
22995            i2 += inc;
22996          }
22997          return value;
22998        }
22999        function _fnAddColumn(oSettings, nTh) {
23000          var oDefaults = DataTable2.defaults.column;
23001          var iCol = oSettings.aoColumns.length;
23002          var oCol = $3.extend({}, DataTable2.models.oColumn, oDefaults, {
23003            "nTh": nTh ? nTh : document2.createElement("th"),
23004            "sTitle": oDefaults.sTitle ? oDefaults.sTitle : nTh ? nTh.innerHTML : "",
23005            "aDataSort": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol],
23006            "mData": oDefaults.mData ? oDefaults.mData : iCol,
23007            idx: iCol
23008          });
23009          oSettings.aoColumns.push(oCol);
23010          var searchCols = oSettings.aoPreSearchCols;
23011          searchCols[iCol] = $3.extend({}, DataTable2.models.oSearch, searchCols[iCol]);
23012          _fnColumnOptions(oSettings, iCol, $3(nTh).data());
23013        }
23014        function _fnColumnOptions(oSettings, iCol, oOptions) {
23015          var oCol = oSettings.aoColumns[iCol];
23016          var oClasses = oSettings.oClasses;
23017          var th = $3(oCol.nTh);
23018          if (!oCol.sWidthOrig) {
23019            oCol.sWidthOrig = th.attr("width") || null;
23020            var t2 = (th.attr("style") || "").match(/width:\s*(\d+[pxem%]+)/);
23021            if (t2) {
23022              oCol.sWidthOrig = t2[1];
23023            }
23024          }
23025          if (oOptions !== undefined2 && oOptions !== null) {
23026            _fnCompatCols(oOptions);
23027            _fnCamelToHungarian(DataTable2.defaults.column, oOptions, true);
23028            if (oOptions.mDataProp !== undefined2 && !oOptions.mData) {
23029              oOptions.mData = oOptions.mDataProp;
23030            }
23031            if (oOptions.sType) {
23032              oCol._sManualType = oOptions.sType;
23033            }
23034            if (oOptions.className && !oOptions.sClass) {
23035              oOptions.sClass = oOptions.className;
23036            }
23037            if (oOptions.sClass) {
23038              th.addClass(oOptions.sClass);
23039            }
23040            var origClass = oCol.sClass;
23041            $3.extend(oCol, oOptions);
23042            _fnMap(oCol, oOptions, "sWidth", "sWidthOrig");
23043            if (origClass !== oCol.sClass) {
23044              oCol.sClass = origClass + " " + oCol.sClass;
23045            }
23046            if (oOptions.iDataSort !== undefined2) {
23047              oCol.aDataSort = [oOptions.iDataSort];
23048            }
23049            _fnMap(oCol, oOptions, "aDataSort");
23050            if (!oCol.ariaTitle) {
23051              oCol.ariaTitle = th.attr("aria-label");
23052            }
23053          }
23054          var mDataSrc = oCol.mData;
23055          var mData = _fnGetObjectDataFn(mDataSrc);
23056          var mRender = oCol.mRender ? _fnGetObjectDataFn(oCol.mRender) : null;
23057          var attrTest = function(src) {
23058            return typeof src === "string" && src.indexOf("@") !== -1;
23059          };
23060          oCol._bAttrSrc = $3.isPlainObject(mDataSrc) && (attrTest(mDataSrc.sort) || attrTest(mDataSrc.type) || attrTest(mDataSrc.filter));
23061          oCol._setter = null;
23062          oCol.fnGetData = function(rowData, type, meta) {
23063            var innerData = mData(rowData, type, undefined2, meta);
23064            return mRender && type ? mRender(innerData, type, rowData, meta) : innerData;
23065          };
23066          oCol.fnSetData = function(rowData, val, meta) {
23067            return _fnSetObjectDataFn(mDataSrc)(rowData, val, meta);
23068          };
23069          if (typeof mDataSrc !== "number" && !oCol._isArrayHost) {
23070            oSettings._rowReadObject = true;
23071          }
23072          if (!oSettings.oFeatures.bSort) {
23073            oCol.bSortable = false;
23074            th.addClass(oClasses.sSortableNone);
23075          }
23076          var bAsc = $3.inArray("asc", oCol.asSorting) !== -1;
23077          var bDesc = $3.inArray("desc", oCol.asSorting) !== -1;
23078          if (!oCol.bSortable || !bAsc && !bDesc) {
23079            oCol.sSortingClass = oClasses.sSortableNone;
23080            oCol.sSortingClassJUI = "";
23081          } else if (bAsc && !bDesc) {
23082            oCol.sSortingClass = oClasses.sSortableAsc;
23083            oCol.sSortingClassJUI = oClasses.sSortJUIAscAllowed;
23084          } else if (!bAsc && bDesc) {
23085            oCol.sSortingClass = oClasses.sSortableDesc;
23086            oCol.sSortingClassJUI = oClasses.sSortJUIDescAllowed;
23087          } else {
23088            oCol.sSortingClass = oClasses.sSortable;
23089            oCol.sSortingClassJUI = oClasses.sSortJUI;
23090          }
23091        }
23092        function _fnAdjustColumnSizing(settings) {
23093          if (settings.oFeatures.bAutoWidth !== false) {
23094            var columns = settings.aoColumns;
23095            _fnCalculateColumnWidths(settings);
23096            for (var i2 = 0, iLen = columns.length; i2 < iLen; i2++) {
23097              columns[i2].nTh.style.width = columns[i2].sWidth;
23098            }
23099          }
23100          var scroll = settings.oScroll;
23101          if (scroll.sY !== "" || scroll.sX !== "") {
23102            _fnScrollDraw(settings);
23103          }
23104          _fnCallbackFire(settings, null, "column-sizing", [settings]);
23105        }
23106        function _fnVisibleToColumnIndex(oSettings, iMatch) {
23107          var aiVis = _fnGetColumns(oSettings, "bVisible");
23108          return typeof aiVis[iMatch] === "number" ? aiVis[iMatch] : null;
23109        }
23110        function _fnColumnIndexToVisible(oSettings, iMatch) {
23111          var aiVis = _fnGetColumns(oSettings, "bVisible");
23112          var iPos = $3.inArray(iMatch, aiVis);
23113          return iPos !== -1 ? iPos : null;
23114        }
23115        function _fnVisbleColumns(oSettings) {
23116          var vis = 0;
23117          $3.each(oSettings.aoColumns, function(i2, col) {
23118            if (col.bVisible && $3(col.nTh).css("display") !== "none") {
23119              vis++;
23120            }
23121          });
23122          return vis;
23123        }
23124        function _fnGetColumns(oSettings, sParam) {
23125          var a = [];
23126          $3.map(oSettings.aoColumns, function(val, i2) {
23127            if (val[sParam]) {
23128              a.push(i2);
23129            }
23130          });
23131          return a;
23132        }
23133        function _fnColumnTypes(settings) {
23134          var columns = settings.aoColumns;
23135          var data = settings.aoData;
23136          var types = DataTable2.ext.type.detect;
23137          var i2, ien, j, jen, k, ken;
23138          var col, cell, detectedType, cache;
23139          for (i2 = 0, ien = columns.length; i2 < ien; i2++) {
23140            col = columns[i2];
23141            cache = [];
23142            if (!col.sType && col._sManualType) {
23143              col.sType = col._sManualType;
23144            } else if (!col.sType) {
23145              for (j = 0, jen = types.length; j < jen; j++) {
23146                for (k = 0, ken = data.length; k < ken; k++) {
23147                  if (cache[k] === undefined2) {
23148                    cache[k] = _fnGetCellData(settings, k, i2, "type");
23149                  }
23150                  detectedType = types[j](cache[k], settings);
23151                  if (!detectedType && j !== types.length - 1) {
23152                    break;
23153                  }
23154                  if (detectedType === "html" && !_empty(cache[k])) {
23155                    break;
23156                  }
23157                }
23158                if (detectedType) {
23159                  col.sType = detectedType;
23160                  break;
23161                }
23162              }
23163              if (!col.sType) {
23164                col.sType = "string";
23165              }
23166            }
23167          }
23168        }
23169        function _fnApplyColumnDefs(oSettings, aoColDefs, aoCols, fn) {
23170          var i2, iLen, j, jLen, k, kLen, def;
23171          var columns = oSettings.aoColumns;
23172          if (aoColDefs) {
23173            for (i2 = aoColDefs.length - 1; i2 >= 0; i2--) {
23174              def = aoColDefs[i2];
23175              var aTargets = def.target !== undefined2 ? def.target : def.targets !== undefined2 ? def.targets : def.aTargets;
23176              if (!Array.isArray(aTargets)) {
23177                aTargets = [aTargets];
23178              }
23179              for (j = 0, jLen = aTargets.length; j < jLen; j++) {
23180                if (typeof aTargets[j] === "number" && aTargets[j] >= 0) {
23181                  while (columns.length <= aTargets[j]) {
23182                    _fnAddColumn(oSettings);
23183                  }
23184                  fn(aTargets[j], def);
23185                } else if (typeof aTargets[j] === "number" && aTargets[j] < 0) {
23186                  fn(columns.length + aTargets[j], def);
23187                } else if (typeof aTargets[j] === "string") {
23188                  for (k = 0, kLen = columns.length; k < kLen; k++) {
23189                    if (aTargets[j] == "_all" || $3(columns[k].nTh).hasClass(aTargets[j])) {
23190                      fn(k, def);
23191                    }
23192                  }
23193                }
23194              }
23195            }
23196          }
23197          if (aoCols) {
23198            for (i2 = 0, iLen = aoCols.length; i2 < iLen; i2++) {
23199              fn(i2, aoCols[i2]);
23200            }
23201          }
23202        }
23203        function _fnAddData(oSettings, aDataIn, nTr, anTds) {
23204          var iRow = oSettings.aoData.length;
23205          var oData = $3.extend(true, {}, DataTable2.models.oRow, {
23206            src: nTr ? "dom" : "data",
23207            idx: iRow
23208          });
23209          oData._aData = aDataIn;
23210          oSettings.aoData.push(oData);
23211          var nTd, sThisType;
23212          var columns = oSettings.aoColumns;
23213          for (var i2 = 0, iLen = columns.length; i2 < iLen; i2++) {
23214            columns[i2].sType = null;
23215          }
23216          oSettings.aiDisplayMaster.push(iRow);
23217          var id = oSettings.rowIdFn(aDataIn);
23218          if (id !== undefined2) {
23219            oSettings.aIds[id] = oData;
23220          }
23221          if (nTr || !oSettings.oFeatures.bDeferRender) {
23222            _fnCreateTr(oSettings, iRow, nTr, anTds);
23223          }
23224          return iRow;
23225        }
23226        function _fnAddTr(settings, trs) {
23227          var row;
23228          if (!(trs instanceof $3)) {
23229            trs = $3(trs);
23230          }
23231          return trs.map(function(i2, el) {
23232            row = _fnGetRowElements(settings, el);
23233            return _fnAddData(settings, row.data, el, row.cells);
23234          });
23235        }
23236        function _fnNodeToDataIndex(oSettings, n) {
23237          return n._DT_RowIndex !== undefined2 ? n._DT_RowIndex : null;
23238        }
23239        function _fnNodeToColumnIndex(oSettings, iRow, n) {
23240          return $3.inArray(n, oSettings.aoData[iRow].anCells);
23241        }
23242        function _fnGetCellData(settings, rowIdx, colIdx, type) {
23243          if (type === "search") {
23244            type = "filter";
23245          } else if (type === "order") {
23246            type = "sort";
23247          }
23248          var draw = settings.iDraw;
23249          var col = settings.aoColumns[colIdx];
23250          var rowData = settings.aoData[rowIdx]._aData;
23251          var defaultContent = col.sDefaultContent;
23252          var cellData = col.fnGetData(rowData, type, {
23253            settings,
23254            row: rowIdx,
23255            col: colIdx
23256          });
23257          if (cellData === undefined2) {
23258            if (settings.iDrawError != draw && defaultContent === null) {
23259              _fnLog(settings, 0, "Requested unknown parameter " + (typeof col.mData == "function" ? "{function}" : "'" + col.mData + "'") + " for row " + rowIdx + ", column " + colIdx, 4);
23260              settings.iDrawError = draw;
23261            }
23262            return defaultContent;
23263          }
23264          if ((cellData === rowData || cellData === null) && defaultContent !== null && type !== undefined2) {
23265            cellData = defaultContent;
23266          } else if (typeof cellData === "function") {
23267            return cellData.call(rowData);
23268          }
23269          if (cellData === null && type === "display") {
23270            return "";
23271          }
23272          if (type === "filter") {
23273            var fomatters = DataTable2.ext.type.search;
23274            if (fomatters[col.sType]) {
23275              cellData = fomatters[col.sType](cellData);
23276            }
23277          }
23278          return cellData;
23279        }
23280        function _fnSetCellData(settings, rowIdx, colIdx, val) {
23281          var col = settings.aoColumns[colIdx];
23282          var rowData = settings.aoData[rowIdx]._aData;
23283          col.fnSetData(rowData, val, {
23284            settings,
23285            row: rowIdx,
23286            col: colIdx
23287          });
23288        }
23289        var __reArray = /\[.*?\]$/;
23290        var __reFn = /\(\)$/;
23291        function _fnSplitObjNotation(str) {
23292          return $3.map(str.match(/(\\.|[^\.])+/g) || [""], function(s) {
23293            return s.replace(/\\\./g, ".");
23294          });
23295        }
23296        var _fnGetObjectDataFn = DataTable2.util.get;
23297        var _fnSetObjectDataFn = DataTable2.util.set;
23298        function _fnGetDataMaster(settings) {
23299          return _pluck(settings.aoData, "_aData");
23300        }
23301        function _fnClearTable(settings) {
23302          settings.aoData.length = 0;
23303          settings.aiDisplayMaster.length = 0;
23304          settings.aiDisplay.length = 0;
23305          settings.aIds = {};
23306        }
23307        function _fnDeleteIndex(a, iTarget, splice) {
23308          var iTargetIndex = -1;
23309          for (var i2 = 0, iLen = a.length; i2 < iLen; i2++) {
23310            if (a[i2] == iTarget) {
23311              iTargetIndex = i2;
23312            } else if (a[i2] > iTarget) {
23313              a[i2]--;
23314            }
23315          }
23316          if (iTargetIndex != -1 && splice === undefined2) {
23317            a.splice(iTargetIndex, 1);
23318          }
23319        }
23320        function _fnInvalidate(settings, rowIdx, src, colIdx) {
23321          var row = settings.aoData[rowIdx];
23322          var i2, ien;
23323          var cellWrite = function(cell, col) {
23324            while (cell.childNodes.length) {
23325              cell.removeChild(cell.firstChild);
23326            }
23327            cell.innerHTML = _fnGetCellData(settings, rowIdx, col, "display");
23328          };
23329          if (src === "dom" || (!src || src === "auto") && row.src === "dom") {
23330            row._aData = _fnGetRowElements(
23331              settings,
23332              row,
23333              colIdx,
23334              colIdx === undefined2 ? undefined2 : row._aData
23335            ).data;
23336          } else {
23337            var cells = row.anCells;
23338            if (cells) {
23339              if (colIdx !== undefined2) {
23340                cellWrite(cells[colIdx], colIdx);
23341              } else {
23342                for (i2 = 0, ien = cells.length; i2 < ien; i2++) {
23343                  cellWrite(cells[i2], i2);
23344                }
23345              }
23346            }
23347          }
23348          row._aSortData = null;
23349          row._aFilterData = null;
23350          var cols = settings.aoColumns;
23351          if (colIdx !== undefined2) {
23352            cols[colIdx].sType = null;
23353          } else {
23354            for (i2 = 0, ien = cols.length; i2 < ien; i2++) {
23355              cols[i2].sType = null;
23356            }
23357            _fnRowAttributes(settings, row);
23358          }
23359        }
23360        function _fnGetRowElements(settings, row, colIdx, d) {
23361          var tds = [], td = row.firstChild, name, col, o, i2 = 0, contents, columns = settings.aoColumns, objectRead = settings._rowReadObject;
23362          d = d !== undefined2 ? d : objectRead ? {} : [];
23363          var attr = function(str, td2) {
23364            if (typeof str === "string") {
23365              var idx = str.indexOf("@");
23366              if (idx !== -1) {
23367                var attr2 = str.substring(idx + 1);
23368                var setter = _fnSetObjectDataFn(str);
23369                setter(d, td2.getAttribute(attr2));
23370              }
23371            }
23372          };
23373          var cellProcess = function(cell) {
23374            if (colIdx === undefined2 || colIdx === i2) {
23375              col = columns[i2];
23376              contents = cell.innerHTML.trim();
23377              if (col && col._bAttrSrc) {
23378                var setter = _fnSetObjectDataFn(col.mData._);
23379                setter(d, contents);
23380                attr(col.mData.sort, cell);
23381                attr(col.mData.type, cell);
23382                attr(col.mData.filter, cell);
23383              } else {
23384                if (objectRead) {
23385                  if (!col._setter) {
23386                    col._setter = _fnSetObjectDataFn(col.mData);
23387                  }
23388                  col._setter(d, contents);
23389                } else {
23390                  d[i2] = contents;
23391                }
23392              }
23393            }
23394            i2++;
23395          };
23396          if (td) {
23397            while (td) {
23398              name = td.nodeName.toUpperCase();
23399              if (name == "TD" || name == "TH") {
23400                cellProcess(td);
23401                tds.push(td);
23402              }
23403              td = td.nextSibling;
23404            }
23405          } else {
23406            tds = row.anCells;
23407            for (var j = 0, jen = tds.length; j < jen; j++) {
23408              cellProcess(tds[j]);
23409            }
23410          }
23411          var rowNode = row.firstChild ? row : row.nTr;
23412          if (rowNode) {
23413            var id = rowNode.getAttribute("id");
23414            if (id) {
23415              _fnSetObjectDataFn(settings.rowId)(d, id);
23416            }
23417          }
23418          return {
23419            data: d,
23420            cells: tds
23421          };
23422        }
23423        function _fnCreateTr(oSettings, iRow, nTrIn, anTds) {
23424          var row = oSettings.aoData[iRow], rowData = row._aData, cells = [], nTr, nTd, oCol, i2, iLen, create;
23425          if (row.nTr === null) {
23426            nTr = nTrIn || document2.createElement("tr");
23427            row.nTr = nTr;
23428            row.anCells = cells;
23429            nTr._DT_RowIndex = iRow;
23430            _fnRowAttributes(oSettings, row);
23431            for (i2 = 0, iLen = oSettings.aoColumns.length; i2 < iLen; i2++) {
23432              oCol = oSettings.aoColumns[i2];
23433              create = nTrIn ? false : true;
23434              nTd = create ? document2.createElement(oCol.sCellType) : anTds[i2];
23435              if (!nTd) {
23436                _fnLog(oSettings, 0, "Incorrect column count", 18);
23437              }
23438              nTd._DT_CellIndex = {
23439                row: iRow,
23440                column: i2
23441              };
23442              cells.push(nTd);
23443              if (create || (oCol.mRender || oCol.mData !== i2) && (!$3.isPlainObject(oCol.mData) || oCol.mData._ !== i2 + ".display")) {
23444                nTd.innerHTML = _fnGetCellData(oSettings, iRow, i2, "display");
23445              }
23446              if (oCol.sClass) {
23447                nTd.className += " " + oCol.sClass;
23448              }
23449              if (oCol.bVisible && !nTrIn) {
23450                nTr.appendChild(nTd);
23451              } else if (!oCol.bVisible && nTrIn) {
23452                nTd.parentNode.removeChild(nTd);
23453              }
23454              if (oCol.fnCreatedCell) {
23455                oCol.fnCreatedCell.call(
23456                  oSettings.oInstance,
23457                  nTd,
23458                  _fnGetCellData(oSettings, iRow, i2),
23459                  rowData,
23460                  iRow,
23461                  i2
23462                );
23463              }
23464            }
23465            _fnCallbackFire(oSettings, "aoRowCreatedCallback", null, [nTr, rowData, iRow, cells]);
23466          }
23467        }
23468        function _fnRowAttributes(settings, row) {
23469          var tr = row.nTr;
23470          var data = row._aData;
23471          if (tr) {
23472            var id = settings.rowIdFn(data);
23473            if (id) {
23474              tr.id = id;
23475            }
23476            if (data.DT_RowClass) {
23477              var a = data.DT_RowClass.split(" ");
23478              row.__rowc = row.__rowc ? _unique(row.__rowc.concat(a)) : a;
23479              $3(tr).removeClass(row.__rowc.join(" ")).addClass(data.DT_RowClass);
23480            }
23481            if (data.DT_RowAttr) {
23482              $3(tr).attr(data.DT_RowAttr);
23483            }
23484            if (data.DT_RowData) {
23485              $3(tr).data(data.DT_RowData);
23486            }
23487          }
23488        }
23489        function _fnBuildHead(oSettings) {
23490          var i2, ien, cell, row, column;
23491          var thead = oSettings.nTHead;
23492          var tfoot = oSettings.nTFoot;
23493          var createHeader = $3("th, td", thead).length === 0;
23494          var classes = oSettings.oClasses;
23495          var columns = oSettings.aoColumns;
23496          if (createHeader) {
23497            row = $3("<tr/>").appendTo(thead);
23498          }
23499          for (i2 = 0, ien = columns.length; i2 < ien; i2++) {
23500            column = columns[i2];
23501            cell = $3(column.nTh).addClass(column.sClass);
23502            if (createHeader) {
23503              cell.appendTo(row);
23504            }
23505            if (oSettings.oFeatures.bSort) {
23506              cell.addClass(column.sSortingClass);
23507              if (column.bSortable !== false) {
23508                cell.attr("tabindex", oSettings.iTabIndex).attr("aria-controls", oSettings.sTableId);
23509                _fnSortAttachListener(oSettings, column.nTh, i2);
23510              }
23511            }
23512            if (column.sTitle != cell[0].innerHTML) {
23513              cell.html(column.sTitle);
23514            }
23515            _fnRenderer(oSettings, "header")(
23516              oSettings,
23517              cell,
23518              column,
23519              classes
23520            );
23521          }
23522          if (createHeader) {
23523            _fnDetectHeader(oSettings.aoHeader, thead);
23524          }
23525          $3(thead).children("tr").children("th, td").addClass(classes.sHeaderTH);
23526          $3(tfoot).children("tr").children("th, td").addClass(classes.sFooterTH);
23527          if (tfoot !== null) {
23528            var cells = oSettings.aoFooter[0];
23529            for (i2 = 0, ien = cells.length; i2 < ien; i2++) {
23530              column = columns[i2];
23531              if (column) {
23532                column.nTf = cells[i2].cell;
23533                if (column.sClass) {
23534                  $3(column.nTf).addClass(column.sClass);
23535                }
23536              } else {
23537                _fnLog(oSettings, 0, "Incorrect column count", 18);
23538              }
23539            }
23540          }
23541        }
23542        function _fnDrawHead(oSettings, aoSource, bIncludeHidden) {
23543          var i2, iLen, j, jLen, k, kLen, n, nLocalTr;
23544          var aoLocal = [];
23545          var aApplied = [];
23546          var iColumns = oSettings.aoColumns.length;
23547          var iRowspan, iColspan;
23548          if (!aoSource) {
23549            return;
23550          }
23551          if (bIncludeHidden === undefined2) {
23552            bIncludeHidden = false;
23553          }
23554          for (i2 = 0, iLen = aoSource.length; i2 < iLen; i2++) {
23555            aoLocal[i2] = aoSource[i2].slice();
23556            aoLocal[i2].nTr = aoSource[i2].nTr;
23557            for (j = iColumns - 1; j >= 0; j--) {
23558              if (!oSettings.aoColumns[j].bVisible && !bIncludeHidden) {
23559                aoLocal[i2].splice(j, 1);
23560              }
23561            }
23562            aApplied.push([]);
23563          }
23564          for (i2 = 0, iLen = aoLocal.length; i2 < iLen; i2++) {
23565            nLocalTr = aoLocal[i2].nTr;
23566            if (nLocalTr) {
23567              while (n = nLocalTr.firstChild) {
23568                nLocalTr.removeChild(n);
23569              }
23570            }
23571            for (j = 0, jLen = aoLocal[i2].length; j < jLen; j++) {
23572              iRowspan = 1;
23573              iColspan = 1;
23574              if (aApplied[i2][j] === undefined2) {
23575                nLocalTr.appendChild(aoLocal[i2][j].cell);
23576                aApplied[i2][j] = 1;
23577                while (aoLocal[i2 + iRowspan] !== undefined2 && aoLocal[i2][j].cell == aoLocal[i2 + iRowspan][j].cell) {
23578                  aApplied[i2 + iRowspan][j] = 1;
23579                  iRowspan++;
23580                }
23581                while (aoLocal[i2][j + iColspan] !== undefined2 && aoLocal[i2][j].cell == aoLocal[i2][j + iColspan].cell) {
23582                  for (k = 0; k < iRowspan; k++) {
23583                    aApplied[i2 + k][j + iColspan] = 1;
23584                  }
23585                  iColspan++;
23586                }
23587                $3(aoLocal[i2][j].cell).attr("rowspan", iRowspan).attr("colspan", iColspan);
23588              }
23589            }
23590          }
23591        }
23592        function _fnDraw(oSettings, ajaxComplete) {
23593          _fnStart(oSettings);
23594          var aPreDraw = _fnCallbackFire(oSettings, "aoPreDrawCallback", "preDraw", [oSettings]);
23595          if ($3.inArray(false, aPreDraw) !== -1) {
23596            _fnProcessingDisplay(oSettings, false);
23597            return;
23598          }
23599          var anRows = [];
23600          var iRowCount = 0;
23601          var asStripeClasses = oSettings.asStripeClasses;
23602          var iStripes = asStripeClasses.length;
23603          var oLang = oSettings.oLanguage;
23604          var bServerSide = _fnDataSource(oSettings) == "ssp";
23605          var aiDisplay = oSettings.aiDisplay;
23606          var iDisplayStart = oSettings._iDisplayStart;
23607          var iDisplayEnd = oSettings.fnDisplayEnd();
23608          oSettings.bDrawing = true;
23609          if (oSettings.bDeferLoading) {
23610            oSettings.bDeferLoading = false;
23611            oSettings.iDraw++;
23612            _fnProcessingDisplay(oSettings, false);
23613          } else if (!bServerSide) {
23614            oSettings.iDraw++;
23615          } else if (!oSettings.bDestroying && !ajaxComplete) {
23616            _fnAjaxUpdate(oSettings);
23617            return;
23618          }
23619          if (aiDisplay.length !== 0) {
23620            var iStart = bServerSide ? 0 : iDisplayStart;
23621            var iEnd = bServerSide ? oSettings.aoData.length : iDisplayEnd;
23622            for (var j = iStart; j < iEnd; j++) {
23623              var iDataIndex = aiDisplay[j];
23624              var aoData = oSettings.aoData[iDataIndex];
23625              if (aoData.nTr === null) {
23626                _fnCreateTr(oSettings, iDataIndex);
23627              }
23628              var nRow = aoData.nTr;
23629              if (iStripes !== 0) {
23630                var sStripe = asStripeClasses[iRowCount % iStripes];
23631                if (aoData._sRowStripe != sStripe) {
23632                  $3(nRow).removeClass(aoData._sRowStripe).addClass(sStripe);
23633                  aoData._sRowStripe = sStripe;
23634                }
23635              }
23636              _fnCallbackFire(
23637                oSettings,
23638                "aoRowCallback",
23639                null,
23640                [nRow, aoData._aData, iRowCount, j, iDataIndex]
23641              );
23642              anRows.push(nRow);
23643              iRowCount++;
23644            }
23645          } else {
23646            var sZero = oLang.sZeroRecords;
23647            if (oSettings.iDraw == 1 && _fnDataSource(oSettings) == "ajax") {
23648              sZero = oLang.sLoadingRecords;
23649            } else if (oLang.sEmptyTable && oSettings.fnRecordsTotal() === 0) {
23650              sZero = oLang.sEmptyTable;
23651            }
23652            anRows[0] = $3("<tr/>", { "class": iStripes ? asStripeClasses[0] : "" }).append($3("<td />", {
23653              "valign": "top",
23654              "colSpan": _fnVisbleColumns(oSettings),
23655              "class": oSettings.oClasses.sRowEmpty
23656            }).html(sZero))[0];
23657          }
23658          _fnCallbackFire(oSettings, "aoHeaderCallback", "header", [
23659            $3(oSettings.nTHead).children("tr")[0],
23660            _fnGetDataMaster(oSettings),
23661            iDisplayStart,
23662            iDisplayEnd,
23663            aiDisplay
23664          ]);
23665          _fnCallbackFire(oSettings, "aoFooterCallback", "footer", [
23666            $3(oSettings.nTFoot).children("tr")[0],
23667            _fnGetDataMaster(oSettings),
23668            iDisplayStart,
23669            iDisplayEnd,
23670            aiDisplay
23671          ]);
23672          var body = $3(oSettings.nTBody);
23673          body.children().detach();
23674          body.append($3(anRows));
23675          _fnCallbackFire(oSettings, "aoDrawCallback", "draw", [oSettings]);
23676          oSettings.bSorted = false;
23677          oSettings.bFiltered = false;
23678          oSettings.bDrawing = false;
23679        }
23680        function _fnReDraw(settings, holdPosition) {
23681          var features = settings.oFeatures, sort = features.bSort, filter = features.bFilter;
23682          if (sort) {
23683            _fnSort(settings);
23684          }
23685          if (filter) {
23686            _fnFilterComplete(settings, settings.oPreviousSearch);
23687          } else {
23688            settings.aiDisplay = settings.aiDisplayMaster.slice();
23689          }
23690          if (holdPosition !== true) {
23691            settings._iDisplayStart = 0;
23692          }
23693          settings._drawHold = holdPosition;
23694          _fnDraw(settings);
23695          settings._drawHold = false;
23696        }
23697        function _fnAddOptionsHtml(oSettings) {
23698          var classes = oSettings.oClasses;
23699          var table = $3(oSettings.nTable);
23700          var holding = $3("<div/>").insertBefore(table);
23701          var features = oSettings.oFeatures;
23702          var insert = $3("<div/>", {
23703            id: oSettings.sTableId + "_wrapper",
23704            "class": classes.sWrapper + (oSettings.nTFoot ? "" : " " + classes.sNoFooter)
23705          });
23706          oSettings.nHolding = holding[0];
23707          oSettings.nTableWrapper = insert[0];
23708          oSettings.nTableReinsertBefore = oSettings.nTable.nextSibling;
23709          var aDom = oSettings.sDom.split("");
23710          var featureNode, cOption, nNewNode, cNext, sAttr, j;
23711          for (var i2 = 0; i2 < aDom.length; i2++) {
23712            featureNode = null;
23713            cOption = aDom[i2];
23714            if (cOption == "<") {
23715              nNewNode = $3("<div/>")[0];
23716              cNext = aDom[i2 + 1];
23717              if (cNext == "'" || cNext == '"') {
23718                sAttr = "";
23719                j = 2;
23720                while (aDom[i2 + j] != cNext) {
23721                  sAttr += aDom[i2 + j];
23722                  j++;
23723                }
23724                if (sAttr == "H") {
23725                  sAttr = classes.sJUIHeader;
23726                } else if (sAttr == "F") {
23727                  sAttr = classes.sJUIFooter;
23728                }
23729                if (sAttr.indexOf(".") != -1) {
23730                  var aSplit = sAttr.split(".");
23731                  nNewNode.id = aSplit[0].substr(1, aSplit[0].length - 1);
23732                  nNewNode.className = aSplit[1];
23733                } else if (sAttr.charAt(0) == "#") {
23734                  nNewNode.id = sAttr.substr(1, sAttr.length - 1);
23735                } else {
23736                  nNewNode.className = sAttr;
23737                }
23738                i2 += j;
23739              }
23740              insert.append(nNewNode);
23741              insert = $3(nNewNode);
23742            } else if (cOption == ">") {
23743              insert = insert.parent();
23744            } else if (cOption == "l" && features.bPaginate && features.bLengthChange) {
23745              featureNode = _fnFeatureHtmlLength(oSettings);
23746            } else if (cOption == "f" && features.bFilter) {
23747              featureNode = _fnFeatureHtmlFilter(oSettings);
23748            } else if (cOption == "r" && features.bProcessing) {
23749              featureNode = _fnFeatureHtmlProcessing(oSettings);
23750            } else if (cOption == "t") {
23751              featureNode = _fnFeatureHtmlTable(oSettings);
23752            } else if (cOption == "i" && features.bInfo) {
23753              featureNode = _fnFeatureHtmlInfo(oSettings);
23754            } else if (cOption == "p" && features.bPaginate) {
23755              featureNode = _fnFeatureHtmlPaginate(oSettings);
23756            } else if (DataTable2.ext.feature.length !== 0) {
23757              var aoFeatures = DataTable2.ext.feature;
23758              for (var k = 0, kLen = aoFeatures.length; k < kLen; k++) {
23759                if (cOption == aoFeatures[k].cFeature) {
23760                  featureNode = aoFeatures[k].fnInit(oSettings);
23761                  break;
23762                }
23763              }
23764            }
23765            if (featureNode) {
23766              var aanFeatures = oSettings.aanFeatures;
23767              if (!aanFeatures[cOption]) {
23768                aanFeatures[cOption] = [];
23769              }
23770              aanFeatures[cOption].push(featureNode);
23771              insert.append(featureNode);
23772            }
23773          }
23774          holding.replaceWith(insert);
23775          oSettings.nHolding = null;
23776        }
23777        function _fnDetectHeader(aLayout, nThead) {
23778          var nTrs = $3(nThead).children("tr");
23779          var nTr, nCell;
23780          var i2, k, l, iLen, jLen, iColShifted, iColumn, iColspan, iRowspan;
23781          var bUnique;
23782          var fnShiftCol = function(a, i3, j) {
23783            var k2 = a[i3];
23784            while (k2[j]) {
23785              j++;
23786            }
23787            return j;
23788          };
23789          aLayout.splice(0, aLayout.length);
23790          for (i2 = 0, iLen = nTrs.length; i2 < iLen; i2++) {
23791            aLayout.push([]);
23792          }
23793          for (i2 = 0, iLen = nTrs.length; i2 < iLen; i2++) {
23794            nTr = nTrs[i2];
23795            iColumn = 0;
23796            nCell = nTr.firstChild;
23797            while (nCell) {
23798              if (nCell.nodeName.toUpperCase() == "TD" || nCell.nodeName.toUpperCase() == "TH") {
23799                iColspan = nCell.getAttribute("colspan") * 1;
23800                iRowspan = nCell.getAttribute("rowspan") * 1;
23801                iColspan = !iColspan || iColspan === 0 || iColspan === 1 ? 1 : iColspan;
23802                iRowspan = !iRowspan || iRowspan === 0 || iRowspan === 1 ? 1 : iRowspan;
23803                iColShifted = fnShiftCol(aLayout, i2, iColumn);
23804                bUnique = iColspan === 1 ? true : false;
23805                for (l = 0; l < iColspan; l++) {
23806                  for (k = 0; k < iRowspan; k++) {
23807                    aLayout[i2 + k][iColShifted + l] = {
23808                      "cell": nCell,
23809                      "unique": bUnique
23810                    };
23811                    aLayout[i2 + k].nTr = nTr;
23812                  }
23813                }
23814              }
23815              nCell = nCell.nextSibling;
23816            }
23817          }
23818        }
23819        function _fnGetUniqueThs(oSettings, nHeader, aLayout) {
23820          var aReturn = [];
23821          if (!aLayout) {
23822            aLayout = oSettings.aoHeader;
23823            if (nHeader) {
23824              aLayout = [];
23825              _fnDetectHeader(aLayout, nHeader);
23826            }
23827          }
23828          for (var i2 = 0, iLen = aLayout.length; i2 < iLen; i2++) {
23829            for (var j = 0, jLen = aLayout[i2].length; j < jLen; j++) {
23830              if (aLayout[i2][j].unique && (!aReturn[j] || !oSettings.bSortCellsTop)) {
23831                aReturn[j] = aLayout[i2][j].cell;
23832              }
23833            }
23834          }
23835          return aReturn;
23836        }
23837        function _fnStart(oSettings) {
23838          var bServerSide = _fnDataSource(oSettings) == "ssp";
23839          var iInitDisplayStart = oSettings.iInitDisplayStart;
23840          if (iInitDisplayStart !== undefined2 && iInitDisplayStart !== -1) {
23841            oSettings._iDisplayStart = bServerSide ? iInitDisplayStart : iInitDisplayStart >= oSettings.fnRecordsDisplay() ? 0 : iInitDisplayStart;
23842            oSettings.iInitDisplayStart = -1;
23843          }
23844        }
23845        function _fnBuildAjax(oSettings, data, fn) {
23846          _fnCallbackFire(oSettings, "aoServerParams", "serverParams", [data]);
23847          if (data && Array.isArray(data)) {
23848            var tmp = {};
23849            var rbracket = /(.*?)\[\]$/;
23850            $3.each(data, function(key, val) {
23851              var match = val.name.match(rbracket);
23852              if (match) {
23853                var name = match[0];
23854                if (!tmp[name]) {
23855                  tmp[name] = [];
23856                }
23857                tmp[name].push(val.value);
23858              } else {
23859                tmp[val.name] = val.value;
23860              }
23861            });
23862            data = tmp;
23863          }
23864          var ajaxData;
23865          var ajax = oSettings.ajax;
23866          var instance = oSettings.oInstance;
23867          var callback = function(json) {
23868            var status = oSettings.jqXHR ? oSettings.jqXHR.status : null;
23869            if (json === null || typeof status === "number" && status == 204) {
23870              json = {};
23871              _fnAjaxDataSrc(oSettings, json, []);
23872            }
23873            var error = json.error || json.sError;
23874            if (error) {
23875              _fnLog(oSettings, 0, error);
23876            }
23877            oSettings.json = json;
23878            _fnCallbackFire(oSettings, null, "xhr", [oSettings, json, oSettings.jqXHR]);
23879            fn(json);
23880          };
23881          if ($3.isPlainObject(ajax) && ajax.data) {
23882            ajaxData = ajax.data;
23883            var newData = typeof ajaxData === "function" ? ajaxData(data, oSettings) : (
23884              // fn can manipulate data or return
23885              ajaxData
23886            );
23887            data = typeof ajaxData === "function" && newData ? newData : $3.extend(true, data, newData);
23888            delete ajax.data;
23889          }
23890          var baseAjax = {
23891            "data": data,
23892            "success": callback,
23893            "dataType": "json",
23894            "cache": false,
23895            "type": oSettings.sServerMethod,
23896            "error": function(xhr, error, thrown) {
23897              var ret = _fnCallbackFire(oSettings, null, "xhr", [oSettings, null, oSettings.jqXHR]);
23898              if ($3.inArray(true, ret) === -1) {
23899                if (error == "parsererror") {
23900                  _fnLog(oSettings, 0, "Invalid JSON response", 1);
23901                } else if (xhr.readyState === 4) {
23902                  _fnLog(oSettings, 0, "Ajax error", 7);
23903                }
23904              }
23905              _fnProcessingDisplay(oSettings, false);
23906            }
23907          };
23908          oSettings.oAjaxData = data;
23909          _fnCallbackFire(oSettings, null, "preXhr", [oSettings, data]);
23910          if (oSettings.fnServerData) {
23911            oSettings.fnServerData.call(
23912              instance,
23913              oSettings.sAjaxSource,
23914              $3.map(data, function(val, key) {
23915                return { name: key, value: val };
23916              }),
23917              callback,
23918              oSettings
23919            );
23920          } else if (oSettings.sAjaxSource || typeof ajax === "string") {
23921            oSettings.jqXHR = $3.ajax($3.extend(baseAjax, {
23922              url: ajax || oSettings.sAjaxSource
23923            }));
23924          } else if (typeof ajax === "function") {
23925            oSettings.jqXHR = ajax.call(instance, data, callback, oSettings);
23926          } else {
23927            oSettings.jqXHR = $3.ajax($3.extend(baseAjax, ajax));
23928            ajax.data = ajaxData;
23929          }
23930        }
23931        function _fnAjaxUpdate(settings) {
23932          settings.iDraw++;
23933          _fnProcessingDisplay(settings, true);
23934          var drawHold = settings._drawHold;
23935          _fnBuildAjax(
23936            settings,
23937            _fnAjaxParameters(settings),
23938            function(json) {
23939              settings._drawHold = drawHold;
23940              _fnAjaxUpdateDraw(settings, json);
23941              settings._drawHold = false;
23942            }
23943          );
23944        }
23945        function _fnAjaxParameters(settings) {
23946          var columns = settings.aoColumns, columnCount = columns.length, features = settings.oFeatures, preSearch = settings.oPreviousSearch, preColSearch = settings.aoPreSearchCols, i2, data = [], dataProp, column, columnSearch, sort = _fnSortFlatten(settings), displayStart = settings._iDisplayStart, displayLength = features.bPaginate !== false ? settings._iDisplayLength : -1;
23947          var param = function(name, value) {
23948            data.push({ "name": name, "value": value });
23949          };
23950          param("sEcho", settings.iDraw);
23951          param("iColumns", columnCount);
23952          param("sColumns", _pluck(columns, "sName").join(","));
23953          param("iDisplayStart", displayStart);
23954          param("iDisplayLength", displayLength);
23955          var d = {
23956            draw: settings.iDraw,
23957            columns: [],
23958            order: [],
23959            start: displayStart,
23960            length: displayLength,
23961            search: {
23962              value: preSearch.sSearch,
23963              regex: preSearch.bRegex
23964            }
23965          };
23966          for (i2 = 0; i2 < columnCount; i2++) {
23967            column = columns[i2];
23968            columnSearch = preColSearch[i2];
23969            dataProp = typeof column.mData == "function" ? "function" : column.mData;
23970            d.columns.push({
23971              data: dataProp,
23972              name: column.sName,
23973              searchable: column.bSearchable,
23974              orderable: column.bSortable,
23975              search: {
23976                value: columnSearch.sSearch,
23977                regex: columnSearch.bRegex
23978              }
23979            });
23980            param("mDataProp_" + i2, dataProp);
23981            if (features.bFilter) {
23982              param("sSearch_" + i2, columnSearch.sSearch);
23983              param("bRegex_" + i2, columnSearch.bRegex);
23984              param("bSearchable_" + i2, column.bSearchable);
23985            }
23986            if (features.bSort) {
23987              param("bSortable_" + i2, column.bSortable);
23988            }
23989          }
23990          if (features.bFilter) {
23991            param("sSearch", preSearch.sSearch);
23992            param("bRegex", preSearch.bRegex);
23993          }
23994          if (features.bSort) {
23995            $3.each(sort, function(i3, val) {
23996              d.order.push({ column: val.col, dir: val.dir });
23997              param("iSortCol_" + i3, val.col);
23998              param("sSortDir_" + i3, val.dir);
23999            });
24000            param("iSortingCols", sort.length);
24001          }
24002          var legacy = DataTable2.ext.legacy.ajax;
24003          if (legacy === null) {
24004            return settings.sAjaxSource ? data : d;
24005          }
24006          return legacy ? data : d;
24007        }
24008        function _fnAjaxUpdateDraw(settings, json) {
24009          var compat = function(old, modern) {
24010            return json[old] !== undefined2 ? json[old] : json[modern];
24011          };
24012          var data = _fnAjaxDataSrc(settings, json);
24013          var draw = compat("sEcho", "draw");
24014          var recordsTotal = compat("iTotalRecords", "recordsTotal");
24015          var recordsFiltered = compat("iTotalDisplayRecords", "recordsFiltered");
24016          if (draw !== undefined2) {
24017            if (draw * 1 < settings.iDraw) {
24018              return;
24019            }
24020            settings.iDraw = draw * 1;
24021          }
24022          if (!data) {
24023            data = [];
24024          }
24025          _fnClearTable(settings);
24026          settings._iRecordsTotal = parseInt(recordsTotal, 10);
24027          settings._iRecordsDisplay = parseInt(recordsFiltered, 10);
24028          for (var i2 = 0, ien = data.length; i2 < ien; i2++) {
24029            _fnAddData(settings, data[i2]);
24030          }
24031          settings.aiDisplay = settings.aiDisplayMaster.slice();
24032          _fnDraw(settings, true);
24033          if (!settings._bInitComplete) {
24034            _fnInitComplete(settings, json);
24035          }
24036          _fnProcessingDisplay(settings, false);
24037        }
24038        function _fnAjaxDataSrc(oSettings, json, write) {
24039          var dataSrc = $3.isPlainObject(oSettings.ajax) && oSettings.ajax.dataSrc !== undefined2 ? oSettings.ajax.dataSrc : oSettings.sAjaxDataProp;
24040          if (!write) {
24041            if (dataSrc === "data") {
24042              return json.aaData || json[dataSrc];
24043            }
24044            return dataSrc !== "" ? _fnGetObjectDataFn(dataSrc)(json) : json;
24045          }
24046          _fnSetObjectDataFn(dataSrc)(json, write);
24047        }
24048        function _fnFeatureHtmlFilter(settings) {
24049          var classes = settings.oClasses;
24050          var tableId = settings.sTableId;
24051          var language = settings.oLanguage;
24052          var previousSearch = settings.oPreviousSearch;
24053          var features = settings.aanFeatures;
24054          var input = '<input type="search" class="' + classes.sFilterInput + '"/>';
24055          var str = language.sSearch;
24056          str = str.match(/_INPUT_/) ? str.replace("_INPUT_", input) : str + input;
24057          var filter = $3("<div/>", {
24058            "id": !features.f ? tableId + "_filter" : null,
24059            "class": classes.sFilter
24060          }).append($3("<label/>").append(str));
24061          var searchFn = function(event2) {
24062            var n = features.f;
24063            var val = !this.value ? "" : this.value;
24064            if (previousSearch["return"] && event2.key !== "Enter") {
24065              return;
24066            }
24067            if (val != previousSearch.sSearch) {
24068              _fnFilterComplete(settings, {
24069                "sSearch": val,
24070                "bRegex": previousSearch.bRegex,
24071                "bSmart": previousSearch.bSmart,
24072                "bCaseInsensitive": previousSearch.bCaseInsensitive,
24073                "return": previousSearch["return"]
24074              });
24075              settings._iDisplayStart = 0;
24076              _fnDraw(settings);
24077            }
24078          };
24079          var searchDelay = settings.searchDelay !== null ? settings.searchDelay : _fnDataSource(settings) === "ssp" ? 400 : 0;
24080          var jqFilter = $3("input", filter).val(previousSearch.sSearch).attr("placeholder", language.sSearchPlaceholder).on(
24081            "keyup.DT search.DT input.DT paste.DT cut.DT",
24082            searchDelay ? _fnThrottle(searchFn, searchDelay) : searchFn
24083          ).on("mouseup.DT", function(e) {
24084            setTimeout(function() {
24085              searchFn.call(jqFilter[0], e);
24086            }, 10);
24087          }).on("keypress.DT", function(e) {
24088            if (e.keyCode == 13) {
24089              return false;
24090            }
24091          }).attr("aria-controls", tableId);
24092          $3(settings.nTable).on("search.dt.DT", function(ev, s) {
24093            if (settings === s) {
24094              try {
24095                if (jqFilter[0] !== document2.activeElement) {
24096                  jqFilter.val(previousSearch.sSearch);
24097                }
24098              } catch (e) {
24099              }
24100            }
24101          });
24102          return filter[0];
24103        }
24104        function _fnFilterComplete(oSettings, oInput, iForce) {
24105          var oPrevSearch = oSettings.oPreviousSearch;
24106          var aoPrevSearch = oSettings.aoPreSearchCols;
24107          var fnSaveFilter = function(oFilter) {
24108            oPrevSearch.sSearch = oFilter.sSearch;
24109            oPrevSearch.bRegex = oFilter.bRegex;
24110            oPrevSearch.bSmart = oFilter.bSmart;
24111            oPrevSearch.bCaseInsensitive = oFilter.bCaseInsensitive;
24112            oPrevSearch["return"] = oFilter["return"];
24113          };
24114          var fnRegex = function(o) {
24115            return o.bEscapeRegex !== undefined2 ? !o.bEscapeRegex : o.bRegex;
24116          };
24117          _fnColumnTypes(oSettings);
24118          if (_fnDataSource(oSettings) != "ssp") {
24119            _fnFilter(oSettings, oInput.sSearch, iForce, fnRegex(oInput), oInput.bSmart, oInput.bCaseInsensitive);
24120            fnSaveFilter(oInput);
24121            for (var i2 = 0; i2 < aoPrevSearch.length; i2++) {
24122              _fnFilterColumn(
24123                oSettings,
24124                aoPrevSearch[i2].sSearch,
24125                i2,
24126                fnRegex(aoPrevSearch[i2]),
24127                aoPrevSearch[i2].bSmart,
24128                aoPrevSearch[i2].bCaseInsensitive
24129              );
24130            }
24131            _fnFilterCustom(oSettings);
24132          } else {
24133            fnSaveFilter(oInput);
24134          }
24135          oSettings.bFiltered = true;
24136          _fnCallbackFire(oSettings, null, "search", [oSettings]);
24137        }
24138        function _fnFilterCustom(settings) {
24139          var filters = DataTable2.ext.search;
24140          var displayRows = settings.aiDisplay;
24141          var row, rowIdx;
24142          for (var i2 = 0, ien = filters.length; i2 < ien; i2++) {
24143            var rows = [];
24144            for (var j = 0, jen = displayRows.length; j < jen; j++) {
24145              rowIdx = displayRows[j];
24146              row = settings.aoData[rowIdx];
24147              if (filters[i2](settings, row._aFilterData, rowIdx, row._aData, j)) {
24148                rows.push(rowIdx);
24149              }
24150            }
24151            displayRows.length = 0;
24152            $3.merge(displayRows, rows);
24153          }
24154        }
24155        function _fnFilterColumn(settings, searchStr, colIdx, regex, smart, caseInsensitive) {
24156          if (searchStr === "") {
24157            return;
24158          }
24159          var data;
24160          var out = [];
24161          var display = settings.aiDisplay;
24162          var rpSearch = _fnFilterCreateSearch(searchStr, regex, smart, caseInsensitive);
24163          for (var i2 = 0; i2 < display.length; i2++) {
24164            data = settings.aoData[display[i2]]._aFilterData[colIdx];
24165            if (rpSearch.test(data)) {
24166              out.push(display[i2]);
24167            }
24168          }
24169          settings.aiDisplay = out;
24170        }
24171        function _fnFilter(settings, input, force, regex, smart, caseInsensitive) {
24172          var rpSearch = _fnFilterCreateSearch(input, regex, smart, caseInsensitive);
24173          var prevSearch = settings.oPreviousSearch.sSearch;
24174          var displayMaster = settings.aiDisplayMaster;
24175          var display, invalidated, i2;
24176          var filtered = [];
24177          if (DataTable2.ext.search.length !== 0) {
24178            force = true;
24179          }
24180          invalidated = _fnFilterData(settings);
24181          if (input.length <= 0) {
24182            settings.aiDisplay = displayMaster.slice();
24183          } else {
24184            if (invalidated || force || regex || prevSearch.length > input.length || input.indexOf(prevSearch) !== 0 || settings.bSorted) {
24185              settings.aiDisplay = displayMaster.slice();
24186            }
24187            display = settings.aiDisplay;
24188            for (i2 = 0; i2 < display.length; i2++) {
24189              if (rpSearch.test(settings.aoData[display[i2]]._sFilterRow)) {
24190                filtered.push(display[i2]);
24191              }
24192            }
24193            settings.aiDisplay = filtered;
24194          }
24195        }
24196        function _fnFilterCreateSearch(search, regex, smart, caseInsensitive) {
24197          search = regex ? search : _fnEscapeRegex(search);
24198          if (smart) {
24199            var a = $3.map(search.match(/["\u201C][^"\u201D]+["\u201D]|[^ ]+/g) || [""], function(word) {
24200              if (word.charAt(0) === '"') {
24201                var m = word.match(/^"(.*)"$/);
24202                word = m ? m[1] : word;
24203              } else if (word.charAt(0) === "\u201C") {
24204                var m = word.match(/^\u201C(.*)\u201D$/);
24205                word = m ? m[1] : word;
24206              }
24207              return word.replace('"', "");
24208            });
24209            search = "^(?=.*?" + a.join(")(?=.*?") + ").*$";
24210          }
24211          return new RegExp(search, caseInsensitive ? "i" : "");
24212        }
24213        var _fnEscapeRegex = DataTable2.util.escapeRegex;
24214        var __filter_div = $3("<div>")[0];
24215        var __filter_div_textContent = __filter_div.textContent !== undefined2;
24216        function _fnFilterData(settings) {
24217          var columns = settings.aoColumns;
24218          var column;
24219          var i2, j, ien, jen, filterData, cellData, row;
24220          var wasInvalidated = false;
24221          for (i2 = 0, ien = settings.aoData.length; i2 < ien; i2++) {
24222            row = settings.aoData[i2];
24223            if (!row._aFilterData) {
24224              filterData = [];
24225              for (j = 0, jen = columns.length; j < jen; j++) {
24226                column = columns[j];
24227                if (column.bSearchable) {
24228                  cellData = _fnGetCellData(settings, i2, j, "filter");
24229                  if (cellData === null) {
24230                    cellData = "";
24231                  }
24232                  if (typeof cellData !== "string" && cellData.toString) {
24233                    cellData = cellData.toString();
24234                  }
24235                } else {
24236                  cellData = "";
24237                }
24238                if (cellData.indexOf && cellData.indexOf("&") !== -1) {
24239                  __filter_div.innerHTML = cellData;
24240                  cellData = __filter_div_textContent ? __filter_div.textContent : __filter_div.innerText;
24241                }
24242                if (cellData.replace) {
24243                  cellData = cellData.replace(/[\r\n\u2028]/g, "");
24244                }
24245                filterData.push(cellData);
24246              }
24247              row._aFilterData = filterData;
24248              row._sFilterRow = filterData.join("  ");
24249              wasInvalidated = true;
24250            }
24251          }
24252          return wasInvalidated;
24253        }
24254        function _fnSearchToCamel(obj) {
24255          return {
24256            search: obj.sSearch,
24257            smart: obj.bSmart,
24258            regex: obj.bRegex,
24259            caseInsensitive: obj.bCaseInsensitive
24260          };
24261        }
24262        function _fnSearchToHung(obj) {
24263          return {
24264            sSearch: obj.search,
24265            bSmart: obj.smart,
24266            bRegex: obj.regex,
24267            bCaseInsensitive: obj.caseInsensitive
24268          };
24269        }
24270        function _fnFeatureHtmlInfo(settings) {
24271          var tid = settings.sTableId, nodes = settings.aanFeatures.i, n = $3("<div/>", {
24272            "class": settings.oClasses.sInfo,
24273            "id": !nodes ? tid + "_info" : null
24274          });
24275          if (!nodes) {
24276            settings.aoDrawCallback.push({
24277              "fn": _fnUpdateInfo,
24278              "sName": "information"
24279            });
24280            n.attr("role", "status").attr("aria-live", "polite");
24281            $3(settings.nTable).attr("aria-describedby", tid + "_info");
24282          }
24283          return n[0];
24284        }
24285        function _fnUpdateInfo(settings) {
24286          var nodes = settings.aanFeatures.i;
24287          if (nodes.length === 0) {
24288            return;
24289          }
24290          var lang = settings.oLanguage, start = settings._iDisplayStart + 1, end = settings.fnDisplayEnd(), max = settings.fnRecordsTotal(), total = settings.fnRecordsDisplay(), out = total ? lang.sInfo : lang.sInfoEmpty;
24291          if (total !== max) {
24292            out += " " + lang.sInfoFiltered;
24293          }
24294          out += lang.sInfoPostFix;
24295          out = _fnInfoMacros(settings, out);
24296          var callback = lang.fnInfoCallback;
24297          if (callback !== null) {
24298            out = callback.call(
24299              settings.oInstance,
24300              settings,
24301              start,
24302              end,
24303              max,
24304              total,
24305              out
24306            );
24307          }
24308          $3(nodes).html(out);
24309        }
24310        function _fnInfoMacros(settings, str) {
24311          var formatter = settings.fnFormatNumber, start = settings._iDisplayStart + 1, len = settings._iDisplayLength, vis = settings.fnRecordsDisplay(), all = len === -1;
24312          return str.replace(/_START_/g, formatter.call(settings, start)).replace(/_END_/g, formatter.call(settings, settings.fnDisplayEnd())).replace(/_MAX_/g, formatter.call(settings, settings.fnRecordsTotal())).replace(/_TOTAL_/g, formatter.call(settings, vis)).replace(/_PAGE_/g, formatter.call(settings, all ? 1 : Math.ceil(start / len))).replace(/_PAGES_/g, formatter.call(settings, all ? 1 : Math.ceil(vis / len)));
24313        }
24314        function _fnInitialise(settings) {
24315          var i2, iLen, iAjaxStart = settings.iInitDisplayStart;
24316          var columns = settings.aoColumns, column;
24317          var features = settings.oFeatures;
24318          var deferLoading = settings.bDeferLoading;
24319          if (!settings.bInitialised) {
24320            setTimeout(function() {
24321              _fnInitialise(settings);
24322            }, 200);
24323            return;
24324          }
24325          _fnAddOptionsHtml(settings);
24326          _fnBuildHead(settings);
24327          _fnDrawHead(settings, settings.aoHeader);
24328          _fnDrawHead(settings, settings.aoFooter);
24329          _fnProcessingDisplay(settings, true);
24330          if (features.bAutoWidth) {
24331            _fnCalculateColumnWidths(settings);
24332          }
24333          for (i2 = 0, iLen = columns.length; i2 < iLen; i2++) {
24334            column = columns[i2];
24335            if (column.sWidth) {
24336              column.nTh.style.width = _fnStringToCss(column.sWidth);
24337            }
24338          }
24339          _fnCallbackFire(settings, null, "preInit", [settings]);
24340          _fnReDraw(settings);
24341          var dataSrc = _fnDataSource(settings);
24342          if (dataSrc != "ssp" || deferLoading) {
24343            if (dataSrc == "ajax") {
24344              _fnBuildAjax(settings, [], function(json) {
24345                var aData = _fnAjaxDataSrc(settings, json);
24346                for (i2 = 0; i2 < aData.length; i2++) {
24347                  _fnAddData(settings, aData[i2]);
24348                }
24349                settings.iInitDisplayStart = iAjaxStart;
24350                _fnReDraw(settings);
24351                _fnProcessingDisplay(settings, false);
24352                _fnInitComplete(settings, json);
24353              }, settings);
24354            } else {
24355              _fnProcessingDisplay(settings, false);
24356              _fnInitComplete(settings);
24357            }
24358          }
24359        }
24360        function _fnInitComplete(settings, json) {
24361          settings._bInitComplete = true;
24362          if (json || settings.oInit.aaData) {
24363            _fnAdjustColumnSizing(settings);
24364          }
24365          _fnCallbackFire(settings, null, "plugin-init", [settings, json]);
24366          _fnCallbackFire(settings, "aoInitComplete", "init", [settings, json]);
24367        }
24368        function _fnLengthChange(settings, val) {
24369          var len = parseInt(val, 10);
24370          settings._iDisplayLength = len;
24371          _fnLengthOverflow(settings);
24372          _fnCallbackFire(settings, null, "length", [settings, len]);
24373        }
24374        function _fnFeatureHtmlLength(settings) {
24375          var classes = settings.oClasses, tableId = settings.sTableId, menu = settings.aLengthMenu, d2 = Array.isArray(menu[0]), lengths = d2 ? menu[0] : menu, language = d2 ? menu[1] : menu;
24376          var select = $3("<select/>", {
24377            "name": tableId + "_length",
24378            "aria-controls": tableId,
24379            "class": classes.sLengthSelect
24380          });
24381          for (var i2 = 0, ien = lengths.length; i2 < ien; i2++) {
24382            select[0][i2] = new Option(
24383              typeof language[i2] === "number" ? settings.fnFormatNumber(language[i2]) : language[i2],
24384              lengths[i2]
24385            );
24386          }
24387          var div = $3("<div><label/></div>").addClass(classes.sLength);
24388          if (!settings.aanFeatures.l) {
24389            div[0].id = tableId + "_length";
24390          }
24391          div.children().append(
24392            settings.oLanguage.sLengthMenu.replace("_MENU_", select[0].outerHTML)
24393          );
24394          $3("select", div).val(settings._iDisplayLength).on("change.DT", function(e) {
24395            _fnLengthChange(settings, $3(this).val());
24396            _fnDraw(settings);
24397          });
24398          $3(settings.nTable).on("length.dt.DT", function(e, s, len) {
24399            if (settings === s) {
24400              $3("select", div).val(len);
24401            }
24402          });
24403          return div[0];
24404        }
24405        function _fnFeatureHtmlPaginate(settings) {
24406          var type = settings.sPaginationType, plugin = DataTable2.ext.pager[type], modern = typeof plugin === "function", redraw = function(settings2) {
24407            _fnDraw(settings2);
24408          }, node = $3("<div/>").addClass(settings.oClasses.sPaging + type)[0], features = settings.aanFeatures;
24409          if (!modern) {
24410            plugin.fnInit(settings, node, redraw);
24411          }
24412          if (!features.p) {
24413            node.id = settings.sTableId + "_paginate";
24414            settings.aoDrawCallback.push({
24415              "fn": function(settings2) {
24416                if (modern) {
24417                  var start = settings2._iDisplayStart, len = settings2._iDisplayLength, visRecords = settings2.fnRecordsDisplay(), all = len === -1, page = all ? 0 : Math.ceil(start / len), pages = all ? 1 : Math.ceil(visRecords / len), buttons = plugin(page, pages), i2, ien;
24418                  for (i2 = 0, ien = features.p.length; i2 < ien; i2++) {
24419                    _fnRenderer(settings2, "pageButton")(
24420                      settings2,
24421                      features.p[i2],
24422                      i2,
24423                      buttons,
24424                      page,
24425                      pages
24426                    );
24427                  }
24428                } else {
24429                  plugin.fnUpdate(settings2, redraw);
24430                }
24431              },
24432              "sName": "pagination"
24433            });
24434          }
24435          return node;
24436        }
24437        function _fnPageChange(settings, action, redraw) {
24438          var start = settings._iDisplayStart, len = settings._iDisplayLength, records = settings.fnRecordsDisplay();
24439          if (records === 0 || len === -1) {
24440            start = 0;
24441          } else if (typeof action === "number") {
24442            start = action * len;
24443            if (start > records) {
24444              start = 0;
24445            }
24446          } else if (action == "first") {
24447            start = 0;
24448          } else if (action == "previous") {
24449            start = len >= 0 ? start - len : 0;
24450            if (start < 0) {
24451              start = 0;
24452            }
24453          } else if (action == "next") {
24454            if (start + len < records) {
24455              start += len;
24456            }
24457          } else if (action == "last") {
24458            start = Math.floor((records - 1) / len) * len;
24459          } else {
24460            _fnLog(settings, 0, "Unknown paging action: " + action, 5);
24461          }
24462          var changed = settings._iDisplayStart !== start;
24463          settings._iDisplayStart = start;
24464          if (changed) {
24465            _fnCallbackFire(settings, null, "page", [settings]);
24466            if (redraw) {
24467              _fnDraw(settings);
24468            }
24469          } else {
24470            _fnCallbackFire(settings, null, "page-nc", [settings]);
24471          }
24472          return changed;
24473        }
24474        function _fnFeatureHtmlProcessing(settings) {
24475          return $3("<div/>", {
24476            "id": !settings.aanFeatures.r ? settings.sTableId + "_processing" : null,
24477            "class": settings.oClasses.sProcessing,
24478            "role": "status"
24479          }).html(settings.oLanguage.sProcessing).append("<div><div></div><div></div><div></div><div></div></div>").insertBefore(settings.nTable)[0];
24480        }
24481        function _fnProcessingDisplay(settings, show) {
24482          if (settings.oFeatures.bProcessing) {
24483            $3(settings.aanFeatures.r).css("display", show ? "block" : "none");
24484          }
24485          _fnCallbackFire(settings, null, "processing", [settings, show]);
24486        }
24487        function _fnFeatureHtmlTable(settings) {
24488          var table = $3(settings.nTable);
24489          var scroll = settings.oScroll;
24490          if (scroll.sX === "" && scroll.sY === "") {
24491            return settings.nTable;
24492          }
24493          var scrollX = scroll.sX;
24494          var scrollY = scroll.sY;
24495          var classes = settings.oClasses;
24496          var caption = table.children("caption");
24497          var captionSide = caption.length ? caption[0]._captionSide : null;
24498          var headerClone = $3(table[0].cloneNode(false));
24499          var footerClone = $3(table[0].cloneNode(false));
24500          var footer = table.children("tfoot");
24501          var _div = "<div/>";
24502          var size = function(s) {
24503            return !s ? null : _fnStringToCss(s);
24504          };
24505          if (!footer.length) {
24506            footer = null;
24507          }
24508          var scroller = $3(_div, { "class": classes.sScrollWrapper }).append(
24509            $3(_div, { "class": classes.sScrollHead }).css({
24510              overflow: "hidden",
24511              position: "relative",
24512              border: 0,
24513              width: scrollX ? size(scrollX) : "100%"
24514            }).append(
24515              $3(_div, { "class": classes.sScrollHeadInner }).css({
24516                "box-sizing": "content-box",
24517                width: scroll.sXInner || "100%"
24518              }).append(
24519                headerClone.removeAttr("id").css("margin-left", 0).append(captionSide === "top" ? caption : null).append(
24520                  table.children("thead")
24521                )
24522              )
24523            )
24524          ).append(
24525            $3(_div, { "class": classes.sScrollBody }).css({
24526              position: "relative",
24527              overflow: "auto",
24528              width: size(scrollX)
24529            }).append(table)
24530          );
24531          if (footer) {
24532            scroller.append(
24533              $3(_div, { "class": classes.sScrollFoot }).css({
24534                overflow: "hidden",
24535                border: 0,
24536                width: scrollX ? size(scrollX) : "100%"
24537              }).append(
24538                $3(_div, { "class": classes.sScrollFootInner }).append(
24539                  footerClone.removeAttr("id").css("margin-left", 0).append(captionSide === "bottom" ? caption : null).append(
24540                    table.children("tfoot")
24541                  )
24542                )
24543              )
24544            );
24545          }
24546          var children = scroller.children();
24547          var scrollHead = children[0];
24548          var scrollBody = children[1];
24549          var scrollFoot = footer ? children[2] : null;
24550          if (scrollX) {
24551            $3(scrollBody).on("scroll.DT", function(e) {
24552              var scrollLeft = this.scrollLeft;
24553              scrollHead.scrollLeft = scrollLeft;
24554              if (footer) {
24555                scrollFoot.scrollLeft = scrollLeft;
24556              }
24557            });
24558          }
24559          $3(scrollBody).css("max-height", scrollY);
24560          if (!scroll.bCollapse) {
24561            $3(scrollBody).css("height", scrollY);
24562          }
24563          settings.nScrollHead = scrollHead;
24564          settings.nScrollBody = scrollBody;
24565          settings.nScrollFoot = scrollFoot;
24566          settings.aoDrawCallback.push({
24567            "fn": _fnScrollDraw,
24568            "sName": "scrolling"
24569          });
24570          return scroller[0];
24571        }
24572        function _fnScrollDraw(settings) {
24573          var scroll = settings.oScroll, scrollX = scroll.sX, scrollXInner = scroll.sXInner, scrollY = scroll.sY, barWidth = scroll.iBarWidth, divHeader = $3(settings.nScrollHead), divHeaderStyle = divHeader[0].style, divHeaderInner = divHeader.children("div"), divHeaderInnerStyle = divHeaderInner[0].style, divHeaderTable = divHeaderInner.children("table"), divBodyEl = settings.nScrollBody, divBody = $3(divBodyEl), divBodyStyle = divBodyEl.style, divFooter = $3(settings.nScrollFoot), divFooterInner = divFooter.children("div"), divFooterTable = divFooterInner.children("table"), header = $3(settings.nTHead), table = $3(settings.nTable), tableEl = table[0], tableStyle = tableEl.style, footer = settings.nTFoot ? $3(settings.nTFoot) : null, browser2 = settings.oBrowser, ie67 = browser2.bScrollOversize, dtHeaderCells = _pluck(settings.aoColumns, "nTh"), headerTrgEls, footerTrgEls, headerSrcEls, footerSrcEls, headerCopy, footerCopy, headerWidths = [], footerWidths = [], headerContent = [], footerContent = [], idx, correction, sanityWidth, zeroOut = function(nSizer) {
24574            var style = nSizer.style;
24575            style.paddingTop = "0";
24576            style.paddingBottom = "0";
24577            style.borderTopWidth = "0";
24578            style.borderBottomWidth = "0";
24579            style.height = 0;
24580          };
24581          var scrollBarVis = divBodyEl.scrollHeight > divBodyEl.clientHeight;
24582          if (settings.scrollBarVis !== scrollBarVis && settings.scrollBarVis !== undefined2) {
24583            settings.scrollBarVis = scrollBarVis;
24584            _fnAdjustColumnSizing(settings);
24585            return;
24586          } else {
24587            settings.scrollBarVis = scrollBarVis;
24588          }
24589          table.children("thead, tfoot").remove();
24590          if (footer) {
24591            footerCopy = footer.clone().prependTo(table);
24592            footerTrgEls = footer.find("tr");
24593            footerSrcEls = footerCopy.find("tr");
24594            footerCopy.find("[id]").removeAttr("id");
24595          }
24596          headerCopy = header.clone().prependTo(table);
24597          headerTrgEls = header.find("tr");
24598          headerSrcEls = headerCopy.find("tr");
24599          headerCopy.find("th, td").removeAttr("tabindex");
24600          headerCopy.find("[id]").removeAttr("id");
24601          if (!scrollX) {
24602            divBodyStyle.width = "100%";
24603            divHeader[0].style.width = "100%";
24604          }
24605          $3.each(_fnGetUniqueThs(settings, headerCopy), function(i2, el) {
24606            idx = _fnVisibleToColumnIndex(settings, i2);
24607            el.style.width = settings.aoColumns[idx].sWidth;
24608          });
24609          if (footer) {
24610            _fnApplyToChildren(function(n) {
24611              n.style.width = "";
24612            }, footerSrcEls);
24613          }
24614          sanityWidth = table.outerWidth();
24615          if (scrollX === "") {
24616            tableStyle.width = "100%";
24617            if (ie67 && (table.find("tbody").height() > divBodyEl.offsetHeight || divBody.css("overflow-y") == "scroll")) {
24618              tableStyle.width = _fnStringToCss(table.outerWidth() - barWidth);
24619            }
24620            sanityWidth = table.outerWidth();
24621          } else if (scrollXInner !== "") {
24622            tableStyle.width = _fnStringToCss(scrollXInner);
24623            sanityWidth = table.outerWidth();
24624          }
24625          _fnApplyToChildren(zeroOut, headerSrcEls);
24626          _fnApplyToChildren(function(nSizer) {
24627            var style = window2.getComputedStyle ? window2.getComputedStyle(nSizer).width : _fnStringToCss($3(nSizer).width());
24628            headerContent.push(nSizer.innerHTML);
24629            headerWidths.push(style);
24630          }, headerSrcEls);
24631          _fnApplyToChildren(function(nToSize, i2) {
24632            nToSize.style.width = headerWidths[i2];
24633          }, headerTrgEls);
24634          $3(headerSrcEls).css("height", 0);
24635          if (footer) {
24636            _fnApplyToChildren(zeroOut, footerSrcEls);
24637            _fnApplyToChildren(function(nSizer) {
24638              footerContent.push(nSizer.innerHTML);
24639              footerWidths.push(_fnStringToCss($3(nSizer).css("width")));
24640            }, footerSrcEls);
24641            _fnApplyToChildren(function(nToSize, i2) {
24642              nToSize.style.width = footerWidths[i2];
24643            }, footerTrgEls);
24644            $3(footerSrcEls).height(0);
24645          }
24646          _fnApplyToChildren(function(nSizer, i2) {
24647            nSizer.innerHTML = '<div class="dataTables_sizing">' + headerContent[i2] + "</div>";
24648            nSizer.childNodes[0].style.height = "0";
24649            nSizer.childNodes[0].style.overflow = "hidden";
24650            nSizer.style.width = headerWidths[i2];
24651          }, headerSrcEls);
24652          if (footer) {
24653            _fnApplyToChildren(function(nSizer, i2) {
24654              nSizer.innerHTML = '<div class="dataTables_sizing">' + footerContent[i2] + "</div>";
24655              nSizer.childNodes[0].style.height = "0";
24656              nSizer.childNodes[0].style.overflow = "hidden";
24657              nSizer.style.width = footerWidths[i2];
24658            }, footerSrcEls);
24659          }
24660          if (Math.round(table.outerWidth()) < Math.round(sanityWidth)) {
24661            correction = divBodyEl.scrollHeight > divBodyEl.offsetHeight || divBody.css("overflow-y") == "scroll" ? sanityWidth + barWidth : sanityWidth;
24662            if (ie67 && (divBodyEl.scrollHeight > divBodyEl.offsetHeight || divBody.css("overflow-y") == "scroll")) {
24663              tableStyle.width = _fnStringToCss(correction - barWidth);
24664            }
24665            if (scrollX === "" || scrollXInner !== "") {
24666              _fnLog(settings, 1, "Possible column misalignment", 6);
24667            }
24668          } else {
24669            correction = "100%";
24670          }
24671          divBodyStyle.width = _fnStringToCss(correction);
24672          divHeaderStyle.width = _fnStringToCss(correction);
24673          if (footer) {
24674            settings.nScrollFoot.style.width = _fnStringToCss(correction);
24675          }
24676          if (!scrollY) {
24677            if (ie67) {
24678              divBodyStyle.height = _fnStringToCss(tableEl.offsetHeight + barWidth);
24679            }
24680          }
24681          var iOuterWidth = table.outerWidth();
24682          divHeaderTable[0].style.width = _fnStringToCss(iOuterWidth);
24683          divHeaderInnerStyle.width = _fnStringToCss(iOuterWidth);
24684          var bScrolling = table.height() > divBodyEl.clientHeight || divBody.css("overflow-y") == "scroll";
24685          var padding = "padding" + (browser2.bScrollbarLeft ? "Left" : "Right");
24686          divHeaderInnerStyle[padding] = bScrolling ? barWidth + "px" : "0px";
24687          if (footer) {
24688            divFooterTable[0].style.width = _fnStringToCss(iOuterWidth);
24689            divFooterInner[0].style.width = _fnStringToCss(iOuterWidth);
24690            divFooterInner[0].style[padding] = bScrolling ? barWidth + "px" : "0px";
24691          }
24692          table.children("colgroup").insertBefore(table.children("thead"));
24693          divBody.trigger("scroll");
24694          if ((settings.bSorted || settings.bFiltered) && !settings._drawHold) {
24695            divBodyEl.scrollTop = 0;
24696          }
24697        }
24698        function _fnApplyToChildren(fn, an1, an2) {
24699          var index = 0, i2 = 0, iLen = an1.length;
24700          var nNode1, nNode2;
24701          while (i2 < iLen) {
24702            nNode1 = an1[i2].firstChild;
24703            nNode2 = an2 ? an2[i2].firstChild : null;
24704            while (nNode1) {
24705              if (nNode1.nodeType === 1) {
24706                if (an2) {
24707                  fn(nNode1, nNode2, index);
24708                } else {
24709                  fn(nNode1, index);
24710                }
24711                index++;
24712              }
24713              nNode1 = nNode1.nextSibling;
24714              nNode2 = an2 ? nNode2.nextSibling : null;
24715            }
24716            i2++;
24717          }
24718        }
24719        var __re_html_remove = /<.*?>/g;
24720        function _fnCalculateColumnWidths(oSettings) {
24721          var table = oSettings.nTable, columns = oSettings.aoColumns, scroll = oSettings.oScroll, scrollY = scroll.sY, scrollX = scroll.sX, scrollXInner = scroll.sXInner, columnCount = columns.length, visibleColumns = _fnGetColumns(oSettings, "bVisible"), headerCells = $3("th", oSettings.nTHead), tableWidthAttr = table.getAttribute("width"), tableContainer = table.parentNode, userInputs = false, i2, column, columnIdx, width, outerWidth, browser2 = oSettings.oBrowser, ie67 = browser2.bScrollOversize;
24722          var styleWidth = table.style.width;
24723          if (styleWidth && styleWidth.indexOf("%") !== -1) {
24724            tableWidthAttr = styleWidth;
24725          }
24726          var sizes = _fnConvertToWidth(_pluck(columns, "sWidthOrig"), tableContainer);
24727          for (i2 = 0; i2 < visibleColumns.length; i2++) {
24728            column = columns[visibleColumns[i2]];
24729            if (column.sWidth !== null) {
24730              column.sWidth = sizes[i2];
24731              userInputs = true;
24732            }
24733          }
24734          if (ie67 || !userInputs && !scrollX && !scrollY && columnCount == _fnVisbleColumns(oSettings) && columnCount == headerCells.length) {
24735            for (i2 = 0; i2 < columnCount; i2++) {
24736              var colIdx = _fnVisibleToColumnIndex(oSettings, i2);
24737              if (colIdx !== null) {
24738                columns[colIdx].sWidth = _fnStringToCss(headerCells.eq(i2).width());
24739              }
24740            }
24741          } else {
24742            var tmpTable = $3(table).clone().css("visibility", "hidden").removeAttr("id");
24743            tmpTable.find("tbody tr").remove();
24744            var tr = $3("<tr/>").appendTo(tmpTable.find("tbody"));
24745            tmpTable.find("thead, tfoot").remove();
24746            tmpTable.append($3(oSettings.nTHead).clone()).append($3(oSettings.nTFoot).clone());
24747            tmpTable.find("tfoot th, tfoot td").css("width", "");
24748            headerCells = _fnGetUniqueThs(oSettings, tmpTable.find("thead")[0]);
24749            for (i2 = 0; i2 < visibleColumns.length; i2++) {
24750              column = columns[visibleColumns[i2]];
24751              headerCells[i2].style.width = column.sWidthOrig !== null && column.sWidthOrig !== "" ? _fnStringToCss(column.sWidthOrig) : "";
24752              if (column.sWidthOrig && scrollX) {
24753                $3(headerCells[i2]).append($3("<div/>").css({
24754                  width: column.sWidthOrig,
24755                  margin: 0,
24756                  padding: 0,
24757                  border: 0,
24758                  height: 1
24759                }));
24760              }
24761            }
24762            if (oSettings.aoData.length) {
24763              for (i2 = 0; i2 < visibleColumns.length; i2++) {
24764                columnIdx = visibleColumns[i2];
24765                column = columns[columnIdx];
24766                $3(_fnGetWidestNode(oSettings, columnIdx)).clone(false).append(column.sContentPadding).appendTo(tr);
24767              }
24768            }
24769            $3("[name]", tmpTable).removeAttr("name");
24770            var holder = $3("<div/>").css(
24771              scrollX || scrollY ? {
24772                position: "absolute",
24773                top: 0,
24774                left: 0,
24775                height: 1,
24776                right: 0,
24777                overflow: "hidden"
24778              } : {}
24779            ).append(tmpTable).appendTo(tableContainer);
24780            if (scrollX && scrollXInner) {
24781              tmpTable.width(scrollXInner);
24782            } else if (scrollX) {
24783              tmpTable.css("width", "auto");
24784              tmpTable.removeAttr("width");
24785              if (tmpTable.width() < tableContainer.clientWidth && tableWidthAttr) {
24786                tmpTable.width(tableContainer.clientWidth);
24787              }
24788            } else if (scrollY) {
24789              tmpTable.width(tableContainer.clientWidth);
24790            } else if (tableWidthAttr) {
24791              tmpTable.width(tableWidthAttr);
24792            }
24793            var total = 0;
24794            for (i2 = 0; i2 < visibleColumns.length; i2++) {
24795              var cell = $3(headerCells[i2]);
24796              var border = cell.outerWidth() - cell.width();
24797              var bounding = browser2.bBounding ? Math.ceil(headerCells[i2].getBoundingClientRect().width) : cell.outerWidth();
24798              total += bounding;
24799              columns[visibleColumns[i2]].sWidth = _fnStringToCss(bounding - border);
24800            }
24801            table.style.width = _fnStringToCss(total);
24802            holder.remove();
24803          }
24804          if (tableWidthAttr) {
24805            table.style.width = _fnStringToCss(tableWidthAttr);
24806          }
24807          if ((tableWidthAttr || scrollX) && !oSettings._reszEvt) {
24808            var bindResize = function() {
24809              $3(window2).on("resize.DT-" + oSettings.sInstance, _fnThrottle(function() {
24810                _fnAdjustColumnSizing(oSettings);
24811              }));
24812            };
24813            if (ie67) {
24814              setTimeout(bindResize, 1e3);
24815            } else {
24816              bindResize();
24817            }
24818            oSettings._reszEvt = true;
24819          }
24820        }
24821        var _fnThrottle = DataTable2.util.throttle;
24822        function _fnConvertToWidth(widths, parent) {
24823          var els = [];
24824          var results = [];
24825          for (var i2 = 0; i2 < widths.length; i2++) {
24826            if (widths[i2]) {
24827              els.push(
24828                $3("<div/>").css("width", _fnStringToCss(widths[i2])).appendTo(parent || document2.body)
24829              );
24830            } else {
24831              els.push(null);
24832            }
24833          }
24834          for (var i2 = 0; i2 < widths.length; i2++) {
24835            results.push(els[i2] ? els[i2][0].offsetWidth : null);
24836          }
24837          $3(els).remove();
24838          return results;
24839        }
24840        function _fnGetWidestNode(settings, colIdx) {
24841          var idx = _fnGetMaxLenString(settings, colIdx);
24842          if (idx < 0) {
24843            return null;
24844          }
24845          var data = settings.aoData[idx];
24846          return !data.nTr ? (
24847            // Might not have been created when deferred rendering
24848            $3("<td/>").html(_fnGetCellData(settings, idx, colIdx, "display"))[0]
24849          ) : data.anCells[colIdx];
24850        }
24851        function _fnGetMaxLenString(settings, colIdx) {
24852          var s, max = -1, maxIdx = -1;
24853          for (var i2 = 0, ien = settings.aoData.length; i2 < ien; i2++) {
24854            s = _fnGetCellData(settings, i2, colIdx, "display") + "";
24855            s = s.replace(__re_html_remove, "");
24856            s = s.replace(/&nbsp;/g, " ");
24857            if (s.length > max) {
24858              max = s.length;
24859              maxIdx = i2;
24860            }
24861          }
24862          return maxIdx;
24863        }
24864        function _fnStringToCss(s) {
24865          if (s === null) {
24866            return "0px";
24867          }
24868          if (typeof s == "number") {
24869            return s < 0 ? "0px" : s + "px";
24870          }
24871          return s.match(/\d$/) ? s + "px" : s;
24872        }
24873        function _fnSortFlatten(settings) {
24874          var i2, iLen, k, kLen, aSort = [], aiOrig = [], aoColumns = settings.aoColumns, aDataSort, iCol, sType, srcCol, fixed = settings.aaSortingFixed, fixedObj = $3.isPlainObject(fixed), nestedSort = [], add = function(a) {
24875            if (a.length && !Array.isArray(a[0])) {
24876              nestedSort.push(a);
24877            } else {
24878              $3.merge(nestedSort, a);
24879            }
24880          };
24881          if (Array.isArray(fixed)) {
24882            add(fixed);
24883          }
24884          if (fixedObj && fixed.pre) {
24885            add(fixed.pre);
24886          }
24887          add(settings.aaSorting);
24888          if (fixedObj && fixed.post) {
24889            add(fixed.post);
24890          }
24891          for (i2 = 0; i2 < nestedSort.length; i2++) {
24892            srcCol = nestedSort[i2][0];
24893            aDataSort = aoColumns[srcCol].aDataSort;
24894            for (k = 0, kLen = aDataSort.length; k < kLen; k++) {
24895              iCol = aDataSort[k];
24896              sType = aoColumns[iCol].sType || "string";
24897              if (nestedSort[i2]._idx === undefined2) {
24898                nestedSort[i2]._idx = $3.inArray(nestedSort[i2][1], aoColumns[iCol].asSorting);
24899              }
24900              aSort.push({
24901                src: srcCol,
24902                col: iCol,
24903                dir: nestedSort[i2][1],
24904                index: nestedSort[i2]._idx,
24905                type: sType,
24906                formatter: DataTable2.ext.type.order[sType + "-pre"]
24907              });
24908            }
24909          }
24910          return aSort;
24911        }
24912        function _fnSort(oSettings) {
24913          var i2, ien, iLen, j, jLen, k, kLen, sDataType, nTh, aiOrig = [], oExtSort = DataTable2.ext.type.order, aoData = oSettings.aoData, aoColumns = oSettings.aoColumns, aDataSort, data, iCol, sType, oSort, formatters = 0, sortCol, displayMaster = oSettings.aiDisplayMaster, aSort;
24914          _fnColumnTypes(oSettings);
24915          aSort = _fnSortFlatten(oSettings);
24916          for (i2 = 0, ien = aSort.length; i2 < ien; i2++) {
24917            sortCol = aSort[i2];
24918            if (sortCol.formatter) {
24919              formatters++;
24920            }
24921            _fnSortData(oSettings, sortCol.col);
24922          }
24923          if (_fnDataSource(oSettings) != "ssp" && aSort.length !== 0) {
24924            for (i2 = 0, iLen = displayMaster.length; i2 < iLen; i2++) {
24925              aiOrig[displayMaster[i2]] = i2;
24926            }
24927            if (formatters === aSort.length) {
24928              displayMaster.sort(function(a, b) {
24929                var x, y, k2, test, sort, len = aSort.length, dataA = aoData[a]._aSortData, dataB = aoData[b]._aSortData;
24930                for (k2 = 0; k2 < len; k2++) {
24931                  sort = aSort[k2];
24932                  x = dataA[sort.col];
24933                  y = dataB[sort.col];
24934                  test = x < y ? -1 : x > y ? 1 : 0;
24935                  if (test !== 0) {
24936                    return sort.dir === "asc" ? test : -test;
24937                  }
24938                }
24939                x = aiOrig[a];
24940                y = aiOrig[b];
24941                return x < y ? -1 : x > y ? 1 : 0;
24942              });
24943            } else {
24944              displayMaster.sort(function(a, b) {
24945                var x, y, k2, l, test, sort, fn, len = aSort.length, dataA = aoData[a]._aSortData, dataB = aoData[b]._aSortData;
24946                for (k2 = 0; k2 < len; k2++) {
24947                  sort = aSort[k2];
24948                  x = dataA[sort.col];
24949                  y = dataB[sort.col];
24950                  fn = oExtSort[sort.type + "-" + sort.dir] || oExtSort["string-" + sort.dir];
24951                  test = fn(x, y);
24952                  if (test !== 0) {
24953                    return test;
24954                  }
24955                }
24956                x = aiOrig[a];
24957                y = aiOrig[b];
24958                return x < y ? -1 : x > y ? 1 : 0;
24959              });
24960            }
24961          }
24962          oSettings.bSorted = true;
24963        }
24964        function _fnSortAria(settings) {
24965          var label;
24966          var nextSort;
24967          var columns = settings.aoColumns;
24968          var aSort = _fnSortFlatten(settings);
24969          var oAria = settings.oLanguage.oAria;
24970          for (var i2 = 0, iLen = columns.length; i2 < iLen; i2++) {
24971            var col = columns[i2];
24972            var asSorting = col.asSorting;
24973            var sTitle = col.ariaTitle || col.sTitle.replace(/<.*?>/g, "");
24974            var th = col.nTh;
24975            th.removeAttribute("aria-sort");
24976            if (col.bSortable) {
24977              if (aSort.length > 0 && aSort[0].col == i2) {
24978                th.setAttribute("aria-sort", aSort[0].dir == "asc" ? "ascending" : "descending");
24979                nextSort = asSorting[aSort[0].index + 1] || asSorting[0];
24980              } else {
24981                nextSort = asSorting[0];
24982              }
24983              label = sTitle + (nextSort === "asc" ? oAria.sSortAscending : oAria.sSortDescending);
24984            } else {
24985              label = sTitle;
24986            }
24987            th.setAttribute("aria-label", label);
24988          }
24989        }
24990        function _fnSortListener(settings, colIdx, append, callback) {
24991          var col = settings.aoColumns[colIdx];
24992          var sorting = settings.aaSorting;
24993          var asSorting = col.asSorting;
24994          var nextSortIdx;
24995          var next = function(a, overflow) {
24996            var idx = a._idx;
24997            if (idx === undefined2) {
24998              idx = $3.inArray(a[1], asSorting);
24999            }
25000            return idx + 1 < asSorting.length ? idx + 1 : overflow ? null : 0;
25001          };
25002          if (typeof sorting[0] === "number") {
25003            sorting = settings.aaSorting = [sorting];
25004          }
25005          if (append && settings.oFeatures.bSortMulti) {
25006            var sortIdx = $3.inArray(colIdx, _pluck(sorting, "0"));
25007            if (sortIdx !== -1) {
25008              nextSortIdx = next(sorting[sortIdx], true);
25009              if (nextSortIdx === null && sorting.length === 1) {
25010                nextSortIdx = 0;
25011              }
25012              if (nextSortIdx === null) {
25013                sorting.splice(sortIdx, 1);
25014              } else {
25015                sorting[sortIdx][1] = asSorting[nextSortIdx];
25016                sorting[sortIdx]._idx = nextSortIdx;
25017              }
25018            } else {
25019              sorting.push([colIdx, asSorting[0], 0]);
25020              sorting[sorting.length - 1]._idx = 0;
25021            }
25022          } else if (sorting.length && sorting[0][0] == colIdx) {
25023            nextSortIdx = next(sorting[0]);
25024            sorting.length = 1;
25025            sorting[0][1] = asSorting[nextSortIdx];
25026            sorting[0]._idx = nextSortIdx;
25027          } else {
25028            sorting.length = 0;
25029            sorting.push([colIdx, asSorting[0]]);
25030            sorting[0]._idx = 0;
25031          }
25032          _fnReDraw(settings);
25033          if (typeof callback == "function") {
25034            callback(settings);
25035          }
25036        }
25037        function _fnSortAttachListener(settings, attachTo, colIdx, callback) {
25038          var col = settings.aoColumns[colIdx];
25039          _fnBindAction(attachTo, {}, function(e) {
25040            if (col.bSortable === false) {
25041              return;
25042            }
25043            if (settings.oFeatures.bProcessing) {
25044              _fnProcessingDisplay(settings, true);
25045              setTimeout(function() {
25046                _fnSortListener(settings, colIdx, e.shiftKey, callback);
25047                if (_fnDataSource(settings) !== "ssp") {
25048                  _fnProcessingDisplay(settings, false);
25049                }
25050              }, 0);
25051            } else {
25052              _fnSortListener(settings, colIdx, e.shiftKey, callback);
25053            }
25054          });
25055        }
25056        function _fnSortingClasses(settings) {
25057          var oldSort = settings.aLastSort;
25058          var sortClass = settings.oClasses.sSortColumn;
25059          var sort = _fnSortFlatten(settings);
25060          var features = settings.oFeatures;
25061          var i2, ien, colIdx;
25062          if (features.bSort && features.bSortClasses) {
25063            for (i2 = 0, ien = oldSort.length; i2 < ien; i2++) {
25064              colIdx = oldSort[i2].src;
25065              $3(_pluck(settings.aoData, "anCells", colIdx)).removeClass(sortClass + (i2 < 2 ? i2 + 1 : 3));
25066            }
25067            for (i2 = 0, ien = sort.length; i2 < ien; i2++) {
25068              colIdx = sort[i2].src;
25069              $3(_pluck(settings.aoData, "anCells", colIdx)).addClass(sortClass + (i2 < 2 ? i2 + 1 : 3));
25070            }
25071          }
25072          settings.aLastSort = sort;
25073        }
25074        function _fnSortData(settings, idx) {
25075          var column = settings.aoColumns[idx];
25076          var customSort = DataTable2.ext.order[column.sSortDataType];
25077          var customData;
25078          if (customSort) {
25079            customData = customSort.call(
25080              settings.oInstance,
25081              settings,
25082              idx,
25083              _fnColumnIndexToVisible(settings, idx)
25084            );
25085          }
25086          var row, cellData;
25087          var formatter = DataTable2.ext.type.order[column.sType + "-pre"];
25088          for (var i2 = 0, ien = settings.aoData.length; i2 < ien; i2++) {
25089            row = settings.aoData[i2];
25090            if (!row._aSortData) {
25091              row._aSortData = [];
25092            }
25093            if (!row._aSortData[idx] || customSort) {
25094              cellData = customSort ? customData[i2] : (
25095                // If there was a custom sort function, use data from there
25096                _fnGetCellData(settings, i2, idx, "sort")
25097              );
25098              row._aSortData[idx] = formatter ? formatter(cellData) : cellData;
25099            }
25100          }
25101        }
25102        function _fnSaveState(settings) {
25103          if (settings._bLoadingState) {
25104            return;
25105          }
25106          var state = {
25107            time: +/* @__PURE__ */ new Date(),
25108            start: settings._iDisplayStart,
25109            length: settings._iDisplayLength,
25110            order: $3.extend(true, [], settings.aaSorting),
25111            search: _fnSearchToCamel(settings.oPreviousSearch),
25112            columns: $3.map(settings.aoColumns, function(col, i2) {
25113              return {
25114                visible: col.bVisible,
25115                search: _fnSearchToCamel(settings.aoPreSearchCols[i2])
25116              };
25117            })
25118          };
25119          settings.oSavedState = state;
25120          _fnCallbackFire(settings, "aoStateSaveParams", "stateSaveParams", [settings, state]);
25121          if (settings.oFeatures.bStateSave && !settings.bDestroying) {
25122            settings.fnStateSaveCallback.call(settings.oInstance, settings, state);
25123          }
25124        }
25125        function _fnLoadState(settings, oInit, callback) {
25126          if (!settings.oFeatures.bStateSave) {
25127            callback();
25128            return;
25129          }
25130          var loaded = function(state2) {
25131            _fnImplementState(settings, state2, callback);
25132          };
25133          var state = settings.fnStateLoadCallback.call(settings.oInstance, settings, loaded);
25134          if (state !== undefined2) {
25135            _fnImplementState(settings, state, callback);
25136          }
25137          return true;
25138        }
25139        function _fnImplementState(settings, s, callback) {
25140          var i2, ien;
25141          var columns = settings.aoColumns;
25142          settings._bLoadingState = true;
25143          var api = settings._bInitComplete ? new DataTable2.Api(settings) : null;
25144          if (!s || !s.time) {
25145            settings._bLoadingState = false;
25146            callback();
25147            return;
25148          }
25149          var abStateLoad = _fnCallbackFire(settings, "aoStateLoadParams", "stateLoadParams", [settings, s]);
25150          if ($3.inArray(false, abStateLoad) !== -1) {
25151            settings._bLoadingState = false;
25152            callback();
25153            return;
25154          }
25155          var duration = settings.iStateDuration;
25156          if (duration > 0 && s.time < +/* @__PURE__ */ new Date() - duration * 1e3) {
25157            settings._bLoadingState = false;
25158            callback();
25159            return;
25160          }
25161          if (s.columns && columns.length !== s.columns.length) {
25162            settings._bLoadingState = false;
25163            callback();
25164            return;
25165          }
25166          settings.oLoadedState = $3.extend(true, {}, s);
25167          if (s.length !== undefined2) {
25168            if (api) {
25169              api.page.len(s.length);
25170            } else {
25171              settings._iDisplayLength = s.length;
25172            }
25173          }
25174          if (s.start !== undefined2) {
25175            if (api === null) {
25176              settings._iDisplayStart = s.start;
25177              settings.iInitDisplayStart = s.start;
25178            } else {
25179              _fnPageChange(settings, s.start / settings._iDisplayLength);
25180            }
25181          }
25182          if (s.order !== undefined2) {
25183            settings.aaSorting = [];
25184            $3.each(s.order, function(i3, col2) {
25185              settings.aaSorting.push(
25186                col2[0] >= columns.length ? [0, col2[1]] : col2
25187              );
25188            });
25189          }
25190          if (s.search !== undefined2) {
25191            $3.extend(settings.oPreviousSearch, _fnSearchToHung(s.search));
25192          }
25193          if (s.columns) {
25194            for (i2 = 0, ien = s.columns.length; i2 < ien; i2++) {
25195              var col = s.columns[i2];
25196              if (col.visible !== undefined2) {
25197                if (api) {
25198                  api.column(i2).visible(col.visible, false);
25199                } else {
25200                  columns[i2].bVisible = col.visible;
25201                }
25202              }
25203              if (col.search !== undefined2) {
25204                $3.extend(settings.aoPreSearchCols[i2], _fnSearchToHung(col.search));
25205              }
25206            }
25207            if (api) {
25208              api.columns.adjust();
25209            }
25210          }
25211          settings._bLoadingState = false;
25212          _fnCallbackFire(settings, "aoStateLoaded", "stateLoaded", [settings, s]);
25213          callback();
25214        }
25215        ;
25216        function _fnSettingsFromNode(table) {
25217          var settings = DataTable2.settings;
25218          var idx = $3.inArray(table, _pluck(settings, "nTable"));
25219          return idx !== -1 ? settings[idx] : null;
25220        }
25221        function _fnLog(settings, level, msg, tn) {
25222          msg = "DataTables warning: " + (settings ? "table id=" + settings.sTableId + " - " : "") + msg;
25223          if (tn) {
25224            msg += ". For more information about this error, please see https://datatables.net/tn/" + tn;
25225          }
25226          if (!level) {
25227            var ext = DataTable2.ext;
25228            var type = ext.sErrMode || ext.errMode;
25229            if (settings) {
25230              _fnCallbackFire(settings, null, "error", [settings, tn, msg]);
25231            }
25232            if (type == "alert") {
25233              alert(msg);
25234            } else if (type == "throw") {
25235              throw new Error(msg);
25236            } else if (typeof type == "function") {
25237              type(settings, tn, msg);
25238            }
25239          } else if (window2.console && console.log) {
25240            console.log(msg);
25241          }
25242        }
25243        function _fnMap(ret, src, name, mappedName) {
25244          if (Array.isArray(name)) {
25245            $3.each(name, function(i2, val) {
25246              if (Array.isArray(val)) {
25247                _fnMap(ret, src, val[0], val[1]);
25248              } else {
25249                _fnMap(ret, src, val);
25250              }
25251            });
25252            return;
25253          }
25254          if (mappedName === undefined2) {
25255            mappedName = name;
25256          }
25257          if (src[name] !== undefined2) {
25258            ret[mappedName] = src[name];
25259          }
25260        }
25261        function _fnExtend(out, extender, breakRefs) {
25262          var val;
25263          for (var prop in extender) {
25264            if (extender.hasOwnProperty(prop)) {
25265              val = extender[prop];
25266              if ($3.isPlainObject(val)) {
25267                if (!$3.isPlainObject(out[prop])) {
25268                  out[prop] = {};
25269                }
25270                $3.extend(true, out[prop], val);
25271              } else if (breakRefs && prop !== "data" && prop !== "aaData" && Array.isArray(val)) {
25272                out[prop] = val.slice();
25273              } else {
25274                out[prop] = val;
25275              }
25276            }
25277          }
25278          return out;
25279        }
25280        function _fnBindAction(n, oData, fn) {
25281          $3(n).on("click.DT", oData, function(e) {
25282            $3(n).trigger("blur");
25283            fn(e);
25284          }).on("keypress.DT", oData, function(e) {
25285            if (e.which === 13) {
25286              e.preventDefault();
25287              fn(e);
25288            }
25289          }).on("selectstart.DT", function() {
25290            return false;
25291          });
25292        }
25293        function _fnCallbackReg(oSettings, sStore, fn, sName) {
25294          if (fn) {
25295            oSettings[sStore].push({
25296              "fn": fn,
25297              "sName": sName
25298            });
25299          }
25300        }
25301        function _fnCallbackFire(settings, callbackArr, eventName, args) {
25302          var ret = [];
25303          if (callbackArr) {
25304            ret = $3.map(settings[callbackArr].slice().reverse(), function(val, i2) {
25305              return val.fn.apply(settings.oInstance, args);
25306            });
25307          }
25308          if (eventName !== null) {
25309            var e = $3.Event(eventName + ".dt");
25310            var table = $3(settings.nTable);
25311            table.trigger(e, args);
25312            if (table.parents("body").length === 0) {
25313              $3("body").trigger(e, args);
25314            }
25315            ret.push(e.result);
25316          }
25317          return ret;
25318        }
25319        function _fnLengthOverflow(settings) {
25320          var start = settings._iDisplayStart, end = settings.fnDisplayEnd(), len = settings._iDisplayLength;
25321          if (start >= end) {
25322            start = end - len;
25323          }
25324          start -= start % len;
25325          if (len === -1 || start < 0) {
25326            start = 0;
25327          }
25328          settings._iDisplayStart = start;
25329        }
25330        function _fnRenderer(settings, type) {
25331          var renderer = settings.renderer;
25332          var host = DataTable2.ext.renderer[type];
25333          if ($3.isPlainObject(renderer) && renderer[type]) {
25334            return host[renderer[type]] || host._;
25335          } else if (typeof renderer === "string") {
25336            return host[renderer] || host._;
25337          }
25338          return host._;
25339        }
25340        function _fnDataSource(settings) {
25341          if (settings.oFeatures.bServerSide) {
25342            return "ssp";
25343          } else if (settings.ajax || settings.sAjaxSource) {
25344            return "ajax";
25345          }
25346          return "dom";
25347        }
25348        var __apiStruct = [];
25349        var __arrayProto = Array.prototype;
25350        var _toSettings = function(mixed) {
25351          var idx, jq;
25352          var settings = DataTable2.settings;
25353          var tables = $3.map(settings, function(el, i2) {
25354            return el.nTable;
25355          });
25356          if (!mixed) {
25357            return [];
25358          } else if (mixed.nTable && mixed.oApi) {
25359            return [mixed];
25360          } else if (mixed.nodeName && mixed.nodeName.toLowerCase() === "table") {
25361            idx = $3.inArray(mixed, tables);
25362            return idx !== -1 ? [settings[idx]] : null;
25363          } else if (mixed && typeof mixed.settings === "function") {
25364            return mixed.settings().toArray();
25365          } else if (typeof mixed === "string") {
25366            jq = $3(mixed);
25367          } else if (mixed instanceof $3) {
25368            jq = mixed;
25369          }
25370          if (jq) {
25371            return jq.map(function(i2) {
25372              idx = $3.inArray(this, tables);
25373              return idx !== -1 ? settings[idx] : null;
25374            }).toArray();
25375          }
25376        };
25377        _Api = function(context, data) {
25378          if (!(this instanceof _Api)) {
25379            return new _Api(context, data);
25380          }
25381          var settings = [];
25382          var ctxSettings = function(o) {
25383            var a = _toSettings(o);
25384            if (a) {
25385              settings.push.apply(settings, a);
25386            }
25387          };
25388          if (Array.isArray(context)) {
25389            for (var i2 = 0, ien = context.length; i2 < ien; i2++) {
25390              ctxSettings(context[i2]);
25391            }
25392          } else {
25393            ctxSettings(context);
25394          }
25395          this.context = _unique(settings);
25396          if (data) {
25397            $3.merge(this, data);
25398          }
25399          this.selector = {
25400            rows: null,
25401            cols: null,
25402            opts: null
25403          };
25404          _Api.extend(this, this, __apiStruct);
25405        };
25406        DataTable2.Api = _Api;
25407        $3.extend(_Api.prototype, {
25408          any: function() {
25409            return this.count() !== 0;
25410          },
25411          concat: __arrayProto.concat,
25412          context: [],
25413          // array of table settings objects
25414          count: function() {
25415            return this.flatten().length;
25416          },
25417          each: function(fn) {
25418            for (var i2 = 0, ien = this.length; i2 < ien; i2++) {
25419              fn.call(this, this[i2], i2, this);
25420            }
25421            return this;
25422          },
25423          eq: function(idx) {
25424            var ctx = this.context;
25425            return ctx.length > idx ? new _Api(ctx[idx], this[idx]) : null;
25426          },
25427          filter: function(fn) {
25428            var a = [];
25429            if (__arrayProto.filter) {
25430              a = __arrayProto.filter.call(this, fn, this);
25431            } else {
25432              for (var i2 = 0, ien = this.length; i2 < ien; i2++) {
25433                if (fn.call(this, this[i2], i2, this)) {
25434                  a.push(this[i2]);
25435                }
25436              }
25437            }
25438            return new _Api(this.context, a);
25439          },
25440          flatten: function() {
25441            var a = [];
25442            return new _Api(this.context, a.concat.apply(a, this.toArray()));
25443          },
25444          join: __arrayProto.join,
25445          indexOf: __arrayProto.indexOf || function(obj, start) {
25446            for (var i2 = start || 0, ien = this.length; i2 < ien; i2++) {
25447              if (this[i2] === obj) {
25448                return i2;
25449              }
25450            }
25451            return -1;
25452          },
25453          iterator: function(flatten, type, fn, alwaysNew) {
25454            var a = [], ret, i2, ien, j, jen, context = this.context, rows, items, item, selector = this.selector;
25455            if (typeof flatten === "string") {
25456              alwaysNew = fn;
25457              fn = type;
25458              type = flatten;
25459              flatten = false;
25460            }
25461            for (i2 = 0, ien = context.length; i2 < ien; i2++) {
25462              var apiInst = new _Api(context[i2]);
25463              if (type === "table") {
25464                ret = fn.call(apiInst, context[i2], i2);
25465                if (ret !== undefined2) {
25466                  a.push(ret);
25467                }
25468              } else if (type === "columns" || type === "rows") {
25469                ret = fn.call(apiInst, context[i2], this[i2], i2);
25470                if (ret !== undefined2) {
25471                  a.push(ret);
25472                }
25473              } else if (type === "column" || type === "column-rows" || type === "row" || type === "cell") {
25474                items = this[i2];
25475                if (type === "column-rows") {
25476                  rows = _selector_row_indexes(context[i2], selector.opts);
25477                }
25478                for (j = 0, jen = items.length; j < jen; j++) {
25479                  item = items[j];
25480                  if (type === "cell") {
25481                    ret = fn.call(apiInst, context[i2], item.row, item.column, i2, j);
25482                  } else {
25483                    ret = fn.call(apiInst, context[i2], item, i2, j, rows);
25484                  }
25485                  if (ret !== undefined2) {
25486                    a.push(ret);
25487                  }
25488                }
25489              }
25490            }
25491            if (a.length || alwaysNew) {
25492              var api = new _Api(context, flatten ? a.concat.apply([], a) : a);
25493              var apiSelector = api.selector;
25494              apiSelector.rows = selector.rows;
25495              apiSelector.cols = selector.cols;
25496              apiSelector.opts = selector.opts;
25497              return api;
25498            }
25499            return this;
25500          },
25501          lastIndexOf: __arrayProto.lastIndexOf || function(obj, start) {
25502            return this.indexOf.apply(this.toArray.reverse(), arguments);
25503          },
25504          length: 0,
25505          map: function(fn) {
25506            var a = [];
25507            if (__arrayProto.map) {
25508              a = __arrayProto.map.call(this, fn, this);
25509            } else {
25510              for (var i2 = 0, ien = this.length; i2 < ien; i2++) {
25511                a.push(fn.call(this, this[i2], i2));
25512              }
25513            }
25514            return new _Api(this.context, a);
25515          },
25516          pluck: function(prop) {
25517            var fn = DataTable2.util.get(prop);
25518            return this.map(function(el) {
25519              return fn(el);
25520            });
25521          },
25522          pop: __arrayProto.pop,
25523          push: __arrayProto.push,
25524          // Does not return an API instance
25525          reduce: __arrayProto.reduce || function(fn, init) {
25526            return _fnReduce(this, fn, init, 0, this.length, 1);
25527          },
25528          reduceRight: __arrayProto.reduceRight || function(fn, init) {
25529            return _fnReduce(this, fn, init, this.length - 1, -1, -1);
25530          },
25531          reverse: __arrayProto.reverse,
25532          // Object with rows, columns and opts
25533          selector: null,
25534          shift: __arrayProto.shift,
25535          slice: function() {
25536            return new _Api(this.context, this);
25537          },
25538          sort: __arrayProto.sort,
25539          // ? name - order?
25540          splice: __arrayProto.splice,
25541          toArray: function() {
25542            return __arrayProto.slice.call(this);
25543          },
25544          to$: function() {
25545            return $3(this);
25546          },
25547          toJQuery: function() {
25548            return $3(this);
25549          },
25550          unique: function() {
25551            return new _Api(this.context, _unique(this));
25552          },
25553          unshift: __arrayProto.unshift
25554        });
25555        _Api.extend = function(scope, obj, ext) {
25556          if (!ext.length || !obj || !(obj instanceof _Api) && !obj.__dt_wrapper) {
25557            return;
25558          }
25559          var i2, ien, struct, methodScoping = function(scope2, fn, struc) {
25560            return function() {
25561              var ret = fn.apply(scope2, arguments);
25562              _Api.extend(ret, ret, struc.methodExt);
25563              return ret;
25564            };
25565          };
25566          for (i2 = 0, ien = ext.length; i2 < ien; i2++) {
25567            struct = ext[i2];
25568            obj[struct.name] = struct.type === "function" ? methodScoping(scope, struct.val, struct) : struct.type === "object" ? {} : struct.val;
25569            obj[struct.name].__dt_wrapper = true;
25570            _Api.extend(scope, obj[struct.name], struct.propExt);
25571          }
25572        };
25573        _Api.register = _api_register = function(name, val) {
25574          if (Array.isArray(name)) {
25575            for (var j = 0, jen = name.length; j < jen; j++) {
25576              _Api.register(name[j], val);
25577            }
25578            return;
25579          }
25580          var i2, ien, heir = name.split("."), struct = __apiStruct, key, method;
25581          var find = function(src2, name2) {
25582            for (var i3 = 0, ien2 = src2.length; i3 < ien2; i3++) {
25583              if (src2[i3].name === name2) {
25584                return src2[i3];
25585              }
25586            }
25587            return null;
25588          };
25589          for (i2 = 0, ien = heir.length; i2 < ien; i2++) {
25590            method = heir[i2].indexOf("()") !== -1;
25591            key = method ? heir[i2].replace("()", "") : heir[i2];
25592            var src = find(struct, key);
25593            if (!src) {
25594              src = {
25595                name: key,
25596                val: {},
25597                methodExt: [],
25598                propExt: [],
25599                type: "object"
25600              };
25601              struct.push(src);
25602            }
25603            if (i2 === ien - 1) {
25604              src.val = val;
25605              src.type = typeof val === "function" ? "function" : $3.isPlainObject(val) ? "object" : "other";
25606            } else {
25607              struct = method ? src.methodExt : src.propExt;
25608            }
25609          }
25610        };
25611        _Api.registerPlural = _api_registerPlural = function(pluralName, singularName, val) {
25612          _Api.register(pluralName, val);
25613          _Api.register(singularName, function() {
25614            var ret = val.apply(this, arguments);
25615            if (ret === this) {
25616              return this;
25617            } else if (ret instanceof _Api) {
25618              return ret.length ? Array.isArray(ret[0]) ? new _Api(ret.context, ret[0]) : (
25619                // Array results are 'enhanced'
25620                ret[0]
25621              ) : undefined2;
25622            }
25623            return ret;
25624          });
25625        };
25626        var __table_selector = function(selector, a) {
25627          if (Array.isArray(selector)) {
25628            return $3.map(selector, function(item) {
25629              return __table_selector(item, a);
25630            });
25631          }
25632          if (typeof selector === "number") {
25633            return [a[selector]];
25634          }
25635          var nodes = $3.map(a, function(el, i2) {
25636            return el.nTable;
25637          });
25638          return $3(nodes).filter(selector).map(function(i2) {
25639            var idx = $3.inArray(this, nodes);
25640            return a[idx];
25641          }).toArray();
25642        };
25643        _api_register("tables()", function(selector) {
25644          return selector !== undefined2 && selector !== null ? new _Api(__table_selector(selector, this.context)) : this;
25645        });
25646        _api_register("table()", function(selector) {
25647          var tables = this.tables(selector);
25648          var ctx = tables.context;
25649          return ctx.length ? new _Api(ctx[0]) : tables;
25650        });
25651        _api_registerPlural("tables().nodes()", "table().node()", function() {
25652          return this.iterator("table", function(ctx) {
25653            return ctx.nTable;
25654          }, 1);
25655        });
25656        _api_registerPlural("tables().body()", "table().body()", function() {
25657          return this.iterator("table", function(ctx) {
25658            return ctx.nTBody;
25659          }, 1);
25660        });
25661        _api_registerPlural("tables().header()", "table().header()", function() {
25662          return this.iterator("table", function(ctx) {
25663            return ctx.nTHead;
25664          }, 1);
25665        });
25666        _api_registerPlural("tables().footer()", "table().footer()", function() {
25667          return this.iterator("table", function(ctx) {
25668            return ctx.nTFoot;
25669          }, 1);
25670        });
25671        _api_registerPlural("tables().containers()", "table().container()", function() {
25672          return this.iterator("table", function(ctx) {
25673            return ctx.nTableWrapper;
25674          }, 1);
25675        });
25676        _api_register("draw()", function(paging) {
25677          return this.iterator("table", function(settings) {
25678            if (paging === "page") {
25679              _fnDraw(settings);
25680            } else {
25681              if (typeof paging === "string") {
25682                paging = paging === "full-hold" ? false : true;
25683              }
25684              _fnReDraw(settings, paging === false);
25685            }
25686          });
25687        });
25688        _api_register("page()", function(action) {
25689          if (action === undefined2) {
25690            return this.page.info().page;
25691          }
25692          return this.iterator("table", function(settings) {
25693            _fnPageChange(settings, action);
25694          });
25695        });
25696        _api_register("page.info()", function(action) {
25697          if (this.context.length === 0) {
25698            return undefined2;
25699          }
25700          var settings = this.context[0], start = settings._iDisplayStart, len = settings.oFeatures.bPaginate ? settings._iDisplayLength : -1, visRecords = settings.fnRecordsDisplay(), all = len === -1;
25701          return {
25702            "page": all ? 0 : Math.floor(start / len),
25703            "pages": all ? 1 : Math.ceil(visRecords / len),
25704            "start": start,
25705            "end": settings.fnDisplayEnd(),
25706            "length": len,
25707            "recordsTotal": settings.fnRecordsTotal(),
25708            "recordsDisplay": visRecords,
25709            "serverSide": _fnDataSource(settings) === "ssp"
25710          };
25711        });
25712        _api_register("page.len()", function(len) {
25713          if (len === undefined2) {
25714            return this.context.length !== 0 ? this.context[0]._iDisplayLength : undefined2;
25715          }
25716          return this.iterator("table", function(settings) {
25717            _fnLengthChange(settings, len);
25718          });
25719        });
25720        var __reload = function(settings, holdPosition, callback) {
25721          if (callback) {
25722            var api = new _Api(settings);
25723            api.one("draw", function() {
25724              callback(api.ajax.json());
25725            });
25726          }
25727          if (_fnDataSource(settings) == "ssp") {
25728            _fnReDraw(settings, holdPosition);
25729          } else {
25730            _fnProcessingDisplay(settings, true);
25731            var xhr = settings.jqXHR;
25732            if (xhr && xhr.readyState !== 4) {
25733              xhr.abort();
25734            }
25735            _fnBuildAjax(settings, [], function(json) {
25736              _fnClearTable(settings);
25737              var data = _fnAjaxDataSrc(settings, json);
25738              for (var i2 = 0, ien = data.length; i2 < ien; i2++) {
25739                _fnAddData(settings, data[i2]);
25740              }
25741              _fnReDraw(settings, holdPosition);
25742              _fnProcessingDisplay(settings, false);
25743            });
25744          }
25745        };
25746        _api_register("ajax.json()", function() {
25747          var ctx = this.context;
25748          if (ctx.length > 0) {
25749            return ctx[0].json;
25750          }
25751        });
25752        _api_register("ajax.params()", function() {
25753          var ctx = this.context;
25754          if (ctx.length > 0) {
25755            return ctx[0].oAjaxData;
25756          }
25757        });
25758        _api_register("ajax.reload()", function(callback, resetPaging) {
25759          return this.iterator("table", function(settings) {
25760            __reload(settings, resetPaging === false, callback);
25761          });
25762        });
25763        _api_register("ajax.url()", function(url) {
25764          var ctx = this.context;
25765          if (url === undefined2) {
25766            if (ctx.length === 0) {
25767              return undefined2;
25768            }
25769            ctx = ctx[0];
25770            return ctx.ajax ? $3.isPlainObject(ctx.ajax) ? ctx.ajax.url : ctx.ajax : ctx.sAjaxSource;
25771          }
25772          return this.iterator("table", function(settings) {
25773            if ($3.isPlainObject(settings.ajax)) {
25774              settings.ajax.url = url;
25775            } else {
25776              settings.ajax = url;
25777            }
25778          });
25779        });
25780        _api_register("ajax.url().load()", function(callback, resetPaging) {
25781          return this.iterator("table", function(ctx) {
25782            __reload(ctx, resetPaging === false, callback);
25783          });
25784        });
25785        var _selector_run = function(type, selector, selectFn, settings, opts) {
25786          var out = [], res, a, i2, ien, j, jen, selectorType = typeof selector;
25787          if (!selector || selectorType === "string" || selectorType === "function" || selector.length === undefined2) {
25788            selector = [selector];
25789          }
25790          for (i2 = 0, ien = selector.length; i2 < ien; i2++) {
25791            a = selector[i2] && selector[i2].split && !selector[i2].match(/[\[\(:]/) ? selector[i2].split(",") : [selector[i2]];
25792            for (j = 0, jen = a.length; j < jen; j++) {
25793              res = selectFn(typeof a[j] === "string" ? a[j].trim() : a[j]);
25794              if (res && res.length) {
25795                out = out.concat(res);
25796              }
25797            }
25798          }
25799          var ext = _ext.selector[type];
25800          if (ext.length) {
25801            for (i2 = 0, ien = ext.length; i2 < ien; i2++) {
25802              out = ext[i2](settings, opts, out);
25803            }
25804          }
25805          return _unique(out);
25806        };
25807        var _selector_opts = function(opts) {
25808          if (!opts) {
25809            opts = {};
25810          }
25811          if (opts.filter && opts.search === undefined2) {
25812            opts.search = opts.filter;
25813          }
25814          return $3.extend({
25815            search: "none",
25816            order: "current",
25817            page: "all"
25818          }, opts);
25819        };
25820        var _selector_first = function(inst) {
25821          for (var i2 = 0, ien = inst.length; i2 < ien; i2++) {
25822            if (inst[i2].length > 0) {
25823              inst[0] = inst[i2];
25824              inst[0].length = 1;
25825              inst.length = 1;
25826              inst.context = [inst.context[i2]];
25827              return inst;
25828            }
25829          }
25830          inst.length = 0;
25831          return inst;
25832        };
25833        var _selector_row_indexes = function(settings, opts) {
25834          var i2, ien, tmp, a = [], displayFiltered = settings.aiDisplay, displayMaster = settings.aiDisplayMaster;
25835          var search = opts.search, order = opts.order, page = opts.page;
25836          if (_fnDataSource(settings) == "ssp") {
25837            return search === "removed" ? [] : _range(0, displayMaster.length);
25838          } else if (page == "current") {
25839            for (i2 = settings._iDisplayStart, ien = settings.fnDisplayEnd(); i2 < ien; i2++) {
25840              a.push(displayFiltered[i2]);
25841            }
25842          } else if (order == "current" || order == "applied") {
25843            if (search == "none") {
25844              a = displayMaster.slice();
25845            } else if (search == "applied") {
25846              a = displayFiltered.slice();
25847            } else if (search == "removed") {
25848              var displayFilteredMap = {};
25849              for (var i2 = 0, ien = displayFiltered.length; i2 < ien; i2++) {
25850                displayFilteredMap[displayFiltered[i2]] = null;
25851              }
25852              a = $3.map(displayMaster, function(el) {
25853                return !displayFilteredMap.hasOwnProperty(el) ? el : null;
25854              });
25855            }
25856          } else if (order == "index" || order == "original") {
25857            for (i2 = 0, ien = settings.aoData.length; i2 < ien; i2++) {
25858              if (search == "none") {
25859                a.push(i2);
25860              } else {
25861                tmp = $3.inArray(i2, displayFiltered);
25862                if (tmp === -1 && search == "removed" || tmp >= 0 && search == "applied") {
25863                  a.push(i2);
25864                }
25865              }
25866            }
25867          }
25868          return a;
25869        };
25870        var __row_selector = function(settings, selector, opts) {
25871          var rows;
25872          var run = function(sel) {
25873            var selInt = _intVal(sel);
25874            var i2, ien;
25875            var aoData = settings.aoData;
25876            if (selInt !== null && !opts) {
25877              return [selInt];
25878            }
25879            if (!rows) {
25880              rows = _selector_row_indexes(settings, opts);
25881            }
25882            if (selInt !== null && $3.inArray(selInt, rows) !== -1) {
25883              return [selInt];
25884            } else if (sel === null || sel === undefined2 || sel === "") {
25885              return rows;
25886            }
25887            if (typeof sel === "function") {
25888              return $3.map(rows, function(idx) {
25889                var row = aoData[idx];
25890                return sel(idx, row._aData, row.nTr) ? idx : null;
25891              });
25892            }
25893            if (sel.nodeName) {
25894              var rowIdx = sel._DT_RowIndex;
25895              var cellIdx = sel._DT_CellIndex;
25896              if (rowIdx !== undefined2) {
25897                return aoData[rowIdx] && aoData[rowIdx].nTr === sel ? [rowIdx] : [];
25898              } else if (cellIdx) {
25899                return aoData[cellIdx.row] && aoData[cellIdx.row].nTr === sel.parentNode ? [cellIdx.row] : [];
25900              } else {
25901                var host = $3(sel).closest("*[data-dt-row]");
25902                return host.length ? [host.data("dt-row")] : [];
25903              }
25904            }
25905            if (typeof sel === "string" && sel.charAt(0) === "#") {
25906              var rowObj = settings.aIds[sel.replace(/^#/, "")];
25907              if (rowObj !== undefined2) {
25908                return [rowObj.idx];
25909              }
25910            }
25911            var nodes = _removeEmpty(
25912              _pluck_order(settings.aoData, rows, "nTr")
25913            );
25914            return $3(nodes).filter(sel).map(function() {
25915              return this._DT_RowIndex;
25916            }).toArray();
25917          };
25918          return _selector_run("row", selector, run, settings, opts);
25919        };
25920        _api_register("rows()", function(selector, opts) {
25921          if (selector === undefined2) {
25922            selector = "";
25923          } else if ($3.isPlainObject(selector)) {
25924            opts = selector;
25925            selector = "";
25926          }
25927          opts = _selector_opts(opts);
25928          var inst = this.iterator("table", function(settings) {
25929            return __row_selector(settings, selector, opts);
25930          }, 1);
25931          inst.selector.rows = selector;
25932          inst.selector.opts = opts;
25933          return inst;
25934        });
25935        _api_register("rows().nodes()", function() {
25936          return this.iterator("row", function(settings, row) {
25937            return settings.aoData[row].nTr || undefined2;
25938          }, 1);
25939        });
25940        _api_register("rows().data()", function() {
25941          return this.iterator(true, "rows", function(settings, rows) {
25942            return _pluck_order(settings.aoData, rows, "_aData");
25943          }, 1);
25944        });
25945        _api_registerPlural("rows().cache()", "row().cache()", function(type) {
25946          return this.iterator("row", function(settings, row) {
25947            var r = settings.aoData[row];
25948            return type === "search" ? r._aFilterData : r._aSortData;
25949          }, 1);
25950        });
25951        _api_registerPlural("rows().invalidate()", "row().invalidate()", function(src) {
25952          return this.iterator("row", function(settings, row) {
25953            _fnInvalidate(settings, row, src);
25954          });
25955        });
25956        _api_registerPlural("rows().indexes()", "row().index()", function() {
25957          return this.iterator("row", function(settings, row) {
25958            return row;
25959          }, 1);
25960        });
25961        _api_registerPlural("rows().ids()", "row().id()", function(hash) {
25962          var a = [];
25963          var context = this.context;
25964          for (var i2 = 0, ien = context.length; i2 < ien; i2++) {
25965            for (var j = 0, jen = this[i2].length; j < jen; j++) {
25966              var id = context[i2].rowIdFn(context[i2].aoData[this[i2][j]]._aData);
25967              a.push((hash === true ? "#" : "") + id);
25968            }
25969          }
25970          return new _Api(context, a);
25971        });
25972        _api_registerPlural("rows().remove()", "row().remove()", function() {
25973          var that = this;
25974          this.iterator("row", function(settings, row, thatIdx) {
25975            var data = settings.aoData;
25976            var rowData = data[row];
25977            var i2, ien, j, jen;
25978            var loopRow, loopCells;
25979            data.splice(row, 1);
25980            for (i2 = 0, ien = data.length; i2 < ien; i2++) {
25981              loopRow = data[i2];
25982              loopCells = loopRow.anCells;
25983              if (loopRow.nTr !== null) {
25984                loopRow.nTr._DT_RowIndex = i2;
25985              }
25986              if (loopCells !== null) {
25987                for (j = 0, jen = loopCells.length; j < jen; j++) {
25988                  loopCells[j]._DT_CellIndex.row = i2;
25989                }
25990              }
25991            }
25992            _fnDeleteIndex(settings.aiDisplayMaster, row);
25993            _fnDeleteIndex(settings.aiDisplay, row);
25994            _fnDeleteIndex(that[thatIdx], row, false);
25995            if (settings._iRecordsDisplay > 0) {
25996              settings._iRecordsDisplay--;
25997            }
25998            _fnLengthOverflow(settings);
25999            var id = settings.rowIdFn(rowData._aData);
26000            if (id !== undefined2) {
26001              delete settings.aIds[id];
26002            }
26003          });
26004          this.iterator("table", function(settings) {
26005            for (var i2 = 0, ien = settings.aoData.length; i2 < ien; i2++) {
26006              settings.aoData[i2].idx = i2;
26007            }
26008          });
26009          return this;
26010        });
26011        _api_register("rows.add()", function(rows) {
26012          var newRows = this.iterator("table", function(settings) {
26013            var row, i2, ien;
26014            var out = [];
26015            for (i2 = 0, ien = rows.length; i2 < ien; i2++) {
26016              row = rows[i2];
26017              if (row.nodeName && row.nodeName.toUpperCase() === "TR") {
26018                out.push(_fnAddTr(settings, row)[0]);
26019              } else {
26020                out.push(_fnAddData(settings, row));
26021              }
26022            }
26023            return out;
26024          }, 1);
26025          var modRows = this.rows(-1);
26026          modRows.pop();
26027          $3.merge(modRows, newRows);
26028          return modRows;
26029        });
26030        _api_register("row()", function(selector, opts) {
26031          return _selector_first(this.rows(selector, opts));
26032        });
26033        _api_register("row().data()", function(data) {
26034          var ctx = this.context;
26035          if (data === undefined2) {
26036            return ctx.length && this.length ? ctx[0].aoData[this[0]]._aData : undefined2;
26037          }
26038          var row = ctx[0].aoData[this[0]];
26039          row._aData = data;
26040          if (Array.isArray(data) && row.nTr && row.nTr.id) {
26041            _fnSetObjectDataFn(ctx[0].rowId)(data, row.nTr.id);
26042          }
26043          _fnInvalidate(ctx[0], this[0], "data");
26044          return this;
26045        });
26046        _api_register("row().node()", function() {
26047          var ctx = this.context;
26048          return ctx.length && this.length ? ctx[0].aoData[this[0]].nTr || null : null;
26049        });
26050        _api_register("row.add()", function(row) {
26051          if (row instanceof $3 && row.length) {
26052            row = row[0];
26053          }
26054          var rows = this.iterator("table", function(settings) {
26055            if (row.nodeName && row.nodeName.toUpperCase() === "TR") {
26056              return _fnAddTr(settings, row)[0];
26057            }
26058            return _fnAddData(settings, row);
26059          });
26060          return this.row(rows[0]);
26061        });
26062        $3(document2).on("plugin-init.dt", function(e, context) {
26063          var api = new _Api(context);
26064          var namespace = "on-plugin-init";
26065          var stateSaveParamsEvent = "stateSaveParams." + namespace;
26066          var destroyEvent = "destroy. " + namespace;
26067          api.on(stateSaveParamsEvent, function(e2, settings, d) {
26068            var idFn = settings.rowIdFn;
26069            var data = settings.aoData;
26070            var ids = [];
26071            for (var i2 = 0; i2 < data.length; i2++) {
26072              if (data[i2]._detailsShow) {
26073                ids.push("#" + idFn(data[i2]._aData));
26074              }
26075            }
26076            d.childRows = ids;
26077          });
26078          api.on(destroyEvent, function() {
26079            api.off(stateSaveParamsEvent + " " + destroyEvent);
26080          });
26081          var loaded = api.state.loaded();
26082          if (loaded && loaded.childRows) {
26083            api.rows($3.map(loaded.childRows, function(id) {
26084              return id.replace(/:/g, "\\:");
26085            })).every(function() {
26086              _fnCallbackFire(context, null, "requestChild", [this]);
26087            });
26088          }
26089        });
26090        var __details_add = function(ctx, row, data, klass) {
26091          var rows = [];
26092          var addRow = function(r, k) {
26093            if (Array.isArray(r) || r instanceof $3) {
26094              for (var i2 = 0, ien = r.length; i2 < ien; i2++) {
26095                addRow(r[i2], k);
26096              }
26097              return;
26098            }
26099            if (r.nodeName && r.nodeName.toLowerCase() === "tr") {
26100              rows.push(r);
26101            } else {
26102              var created = $3("<tr><td></td></tr>").addClass(k);
26103              $3("td", created).addClass(k).html(r)[0].colSpan = _fnVisbleColumns(ctx);
26104              rows.push(created[0]);
26105            }
26106          };
26107          addRow(data, klass);
26108          if (row._details) {
26109            row._details.detach();
26110          }
26111          row._details = $3(rows);
26112          if (row._detailsShow) {
26113            row._details.insertAfter(row.nTr);
26114          }
26115        };
26116        var __details_state = DataTable2.util.throttle(
26117          function(ctx) {
26118            _fnSaveState(ctx[0]);
26119          },
26120          500
26121        );
26122        var __details_remove = function(api, idx) {
26123          var ctx = api.context;
26124          if (ctx.length) {
26125            var row = ctx[0].aoData[idx !== undefined2 ? idx : api[0]];
26126            if (row && row._details) {
26127              row._details.remove();
26128              row._detailsShow = undefined2;
26129              row._details = undefined2;
26130              $3(row.nTr).removeClass("dt-hasChild");
26131              __details_state(ctx);
26132            }
26133          }
26134        };
26135        var __details_display = function(api, show) {
26136          var ctx = api.context;
26137          if (ctx.length && api.length) {
26138            var row = ctx[0].aoData[api[0]];
26139            if (row._details) {
26140              row._detailsShow = show;
26141              if (show) {
26142                row._details.insertAfter(row.nTr);
26143                $3(row.nTr).addClass("dt-hasChild");
26144              } else {
26145                row._details.detach();
26146                $3(row.nTr).removeClass("dt-hasChild");
26147              }
26148              _fnCallbackFire(ctx[0], null, "childRow", [show, api.row(api[0])]);
26149              __details_events(ctx[0]);
26150              __details_state(ctx);
26151            }
26152          }
26153        };
26154        var __details_events = function(settings) {
26155          var api = new _Api(settings);
26156          var namespace = ".dt.DT_details";
26157          var drawEvent = "draw" + namespace;
26158          var colvisEvent = "column-sizing" + namespace;
26159          var destroyEvent = "destroy" + namespace;
26160          var data = settings.aoData;
26161          api.off(drawEvent + " " + colvisEvent + " " + destroyEvent);
26162          if (_pluck(data, "_details").length > 0) {
26163            api.on(drawEvent, function(e, ctx) {
26164              if (settings !== ctx) {
26165                return;
26166              }
26167              api.rows({ page: "current" }).eq(0).each(function(idx) {
26168                var row = data[idx];
26169                if (row._detailsShow) {
26170                  row._details.insertAfter(row.nTr);
26171                }
26172              });
26173            });
26174            api.on(colvisEvent, function(e, ctx, idx, vis) {
26175              if (settings !== ctx) {
26176                return;
26177              }
26178              var row, visible = _fnVisbleColumns(ctx);
26179              for (var i2 = 0, ien = data.length; i2 < ien; i2++) {
26180                row = data[i2];
26181                if (row._details) {
26182                  row._details.each(function() {
26183                    var el = $3(this).children("td");
26184                    if (el.length == 1) {
26185                      el.attr("colspan", visible);
26186                    }
26187                  });
26188                }
26189              }
26190            });
26191            api.on(destroyEvent, function(e, ctx) {
26192              if (settings !== ctx) {
26193                return;
26194              }
26195              for (var i2 = 0, ien = data.length; i2 < ien; i2++) {
26196                if (data[i2]._details) {
26197                  __details_remove(api, i2);
26198                }
26199              }
26200            });
26201          }
26202        };
26203        var _emp = "";
26204        var _child_obj = _emp + "row().child";
26205        var _child_mth = _child_obj + "()";
26206        _api_register(_child_mth, function(data, klass) {
26207          var ctx = this.context;
26208          if (data === undefined2) {
26209            return ctx.length && this.length ? ctx[0].aoData[this[0]]._details : undefined2;
26210          } else if (data === true) {
26211            this.child.show();
26212          } else if (data === false) {
26213            __details_remove(this);
26214          } else if (ctx.length && this.length) {
26215            __details_add(ctx[0], ctx[0].aoData[this[0]], data, klass);
26216          }
26217          return this;
26218        });
26219        _api_register([
26220          _child_obj + ".show()",
26221          _child_mth + ".show()"
26222          // only when `child()` was called with parameters (without
26223        ], function(show) {
26224          __details_display(this, true);
26225          return this;
26226        });
26227        _api_register([
26228          _child_obj + ".hide()",
26229          _child_mth + ".hide()"
26230          // only when `child()` was called with parameters (without
26231        ], function() {
26232          __details_display(this, false);
26233          return this;
26234        });
26235        _api_register([
26236          _child_obj + ".remove()",
26237          _child_mth + ".remove()"
26238          // only when `child()` was called with parameters (without
26239        ], function() {
26240          __details_remove(this);
26241          return this;
26242        });
26243        _api_register(_child_obj + ".isShown()", function() {
26244          var ctx = this.context;
26245          if (ctx.length && this.length) {
26246            return ctx[0].aoData[this[0]]._detailsShow || false;
26247          }
26248          return false;
26249        });
26250        var __re_column_selector = /^([^:]+):(name|visIdx|visible)$/;
26251        var __columnData = function(settings, column, r1, r2, rows) {
26252          var a = [];
26253          for (var row = 0, ien = rows.length; row < ien; row++) {
26254            a.push(_fnGetCellData(settings, rows[row], column));
26255          }
26256          return a;
26257        };
26258        var __column_selector = function(settings, selector, opts) {
26259          var columns = settings.aoColumns, names = _pluck(columns, "sName"), nodes = _pluck(columns, "nTh");
26260          var run = function(s) {
26261            var selInt = _intVal(s);
26262            if (s === "") {
26263              return _range(columns.length);
26264            }
26265            if (selInt !== null) {
26266              return [
26267                selInt >= 0 ? selInt : (
26268                  // Count from left
26269                  columns.length + selInt
26270                )
26271                // Count from right (+ because its a negative value)
26272              ];
26273            }
26274            if (typeof s === "function") {
26275              var rows = _selector_row_indexes(settings, opts);
26276              return $3.map(columns, function(col, idx2) {
26277                return s(
26278                  idx2,
26279                  __columnData(settings, idx2, 0, 0, rows),
26280                  nodes[idx2]
26281                ) ? idx2 : null;
26282              });
26283            }
26284            var match = typeof s === "string" ? s.match(__re_column_selector) : "";
26285            if (match) {
26286              switch (match[2]) {
26287                case "visIdx":
26288                case "visible":
26289                  var idx = parseInt(match[1], 10);
26290                  if (idx < 0) {
26291                    var visColumns = $3.map(columns, function(col, i2) {
26292                      return col.bVisible ? i2 : null;
26293                    });
26294                    return [visColumns[visColumns.length + idx]];
26295                  }
26296                  return [_fnVisibleToColumnIndex(settings, idx)];
26297                case "name":
26298                  return $3.map(names, function(name, i2) {
26299                    return name === match[1] ? i2 : null;
26300                  });
26301                default:
26302                  return [];
26303              }
26304            }
26305            if (s.nodeName && s._DT_CellIndex) {
26306              return [s._DT_CellIndex.column];
26307            }
26308            var jqResult = $3(nodes).filter(s).map(function() {
26309              return $3.inArray(this, nodes);
26310            }).toArray();
26311            if (jqResult.length || !s.nodeName) {
26312              return jqResult;
26313            }
26314            var host = $3(s).closest("*[data-dt-column]");
26315            return host.length ? [host.data("dt-column")] : [];
26316          };
26317          return _selector_run("column", selector, run, settings, opts);
26318        };
26319        var __setColumnVis = function(settings, column, vis) {
26320          var cols = settings.aoColumns, col = cols[column], data = settings.aoData, row, cells, i2, ien, tr;
26321          if (vis === undefined2) {
26322            return col.bVisible;
26323          }
26324          if (col.bVisible === vis) {
26325            return;
26326          }
26327          if (vis) {
26328            var insertBefore = $3.inArray(true, _pluck(cols, "bVisible"), column + 1);
26329            for (i2 = 0, ien = data.length; i2 < ien; i2++) {
26330              tr = data[i2].nTr;
26331              cells = data[i2].anCells;
26332              if (tr) {
26333                tr.insertBefore(cells[column], cells[insertBefore] || null);
26334              }
26335            }
26336          } else {
26337            $3(_pluck(settings.aoData, "anCells", column)).detach();
26338          }
26339          col.bVisible = vis;
26340        };
26341        _api_register("columns()", function(selector, opts) {
26342          if (selector === undefined2) {
26343            selector = "";
26344          } else if ($3.isPlainObject(selector)) {
26345            opts = selector;
26346            selector = "";
26347          }
26348          opts = _selector_opts(opts);
26349          var inst = this.iterator("table", function(settings) {
26350            return __column_selector(settings, selector, opts);
26351          }, 1);
26352          inst.selector.cols = selector;
26353          inst.selector.opts = opts;
26354          return inst;
26355        });
26356        _api_registerPlural("columns().header()", "column().header()", function(selector, opts) {
26357          return this.iterator("column", function(settings, column) {
26358            return settings.aoColumns[column].nTh;
26359          }, 1);
26360        });
26361        _api_registerPlural("columns().footer()", "column().footer()", function(selector, opts) {
26362          return this.iterator("column", function(settings, column) {
26363            return settings.aoColumns[column].nTf;
26364          }, 1);
26365        });
26366        _api_registerPlural("columns().data()", "column().data()", function() {
26367          return this.iterator("column-rows", __columnData, 1);
26368        });
26369        _api_registerPlural("columns().dataSrc()", "column().dataSrc()", function() {
26370          return this.iterator("column", function(settings, column) {
26371            return settings.aoColumns[column].mData;
26372          }, 1);
26373        });
26374        _api_registerPlural("columns().cache()", "column().cache()", function(type) {
26375          return this.iterator("column-rows", function(settings, column, i2, j, rows) {
26376            return _pluck_order(
26377              settings.aoData,
26378              rows,
26379              type === "search" ? "_aFilterData" : "_aSortData",
26380              column
26381            );
26382          }, 1);
26383        });
26384        _api_registerPlural("columns().nodes()", "column().nodes()", function() {
26385          return this.iterator("column-rows", function(settings, column, i2, j, rows) {
26386            return _pluck_order(settings.aoData, rows, "anCells", column);
26387          }, 1);
26388        });
26389        _api_registerPlural("columns().visible()", "column().visible()", function(vis, calc) {
26390          var that = this;
26391          var ret = this.iterator("column", function(settings, column) {
26392            if (vis === undefined2) {
26393              return settings.aoColumns[column].bVisible;
26394            }
26395            __setColumnVis(settings, column, vis);
26396          });
26397          if (vis !== undefined2) {
26398            this.iterator("table", function(settings) {
26399              _fnDrawHead(settings, settings.aoHeader);
26400              _fnDrawHead(settings, settings.aoFooter);
26401              if (!settings.aiDisplay.length) {
26402                $3(settings.nTBody).find("td[colspan]").attr("colspan", _fnVisbleColumns(settings));
26403              }
26404              _fnSaveState(settings);
26405              that.iterator("column", function(settings2, column) {
26406                _fnCallbackFire(settings2, null, "column-visibility", [settings2, column, vis, calc]);
26407              });
26408              if (calc === undefined2 || calc) {
26409                that.columns.adjust();
26410              }
26411            });
26412          }
26413          return ret;
26414        });
26415        _api_registerPlural("columns().indexes()", "column().index()", function(type) {
26416          return this.iterator("column", function(settings, column) {
26417            return type === "visible" ? _fnColumnIndexToVisible(settings, column) : column;
26418          }, 1);
26419        });
26420        _api_register("columns.adjust()", function() {
26421          return this.iterator("table", function(settings) {
26422            _fnAdjustColumnSizing(settings);
26423          }, 1);
26424        });
26425        _api_register("column.index()", function(type, idx) {
26426          if (this.context.length !== 0) {
26427            var ctx = this.context[0];
26428            if (type === "fromVisible" || type === "toData") {
26429              return _fnVisibleToColumnIndex(ctx, idx);
26430            } else if (type === "fromData" || type === "toVisible") {
26431              return _fnColumnIndexToVisible(ctx, idx);
26432            }
26433          }
26434        });
26435        _api_register("column()", function(selector, opts) {
26436          return _selector_first(this.columns(selector, opts));
26437        });
26438        var __cell_selector = function(settings, selector, opts) {
26439          var data = settings.aoData;
26440          var rows = _selector_row_indexes(settings, opts);
26441          var cells = _removeEmpty(_pluck_order(data, rows, "anCells"));
26442          var allCells = $3(_flatten([], cells));
26443          var row;
26444          var columns = settings.aoColumns.length;
26445          var a, i2, ien, j, o, host;
26446          var run = function(s) {
26447            var fnSelector = typeof s === "function";
26448            if (s === null || s === undefined2 || fnSelector) {
26449              a = [];
26450              for (i2 = 0, ien = rows.length; i2 < ien; i2++) {
26451                row = rows[i2];
26452                for (j = 0; j < columns; j++) {
26453                  o = {
26454                    row,
26455                    column: j
26456                  };
26457                  if (fnSelector) {
26458                    host = data[row];
26459                    if (s(o, _fnGetCellData(settings, row, j), host.anCells ? host.anCells[j] : null)) {
26460                      a.push(o);
26461                    }
26462                  } else {
26463                    a.push(o);
26464                  }
26465                }
26466              }
26467              return a;
26468            }
26469            if ($3.isPlainObject(s)) {
26470              return s.column !== undefined2 && s.row !== undefined2 && $3.inArray(s.row, rows) !== -1 ? [s] : [];
26471            }
26472            var jqResult = allCells.filter(s).map(function(i3, el) {
26473              return {
26474                // use a new object, in case someone changes the values
26475                row: el._DT_CellIndex.row,
26476                column: el._DT_CellIndex.column
26477              };
26478            }).toArray();
26479            if (jqResult.length || !s.nodeName) {
26480              return jqResult;
26481            }
26482            host = $3(s).closest("*[data-dt-row]");
26483            return host.length ? [{
26484              row: host.data("dt-row"),
26485              column: host.data("dt-column")
26486            }] : [];
26487          };
26488          return _selector_run("cell", selector, run, settings, opts);
26489        };
26490        _api_register("cells()", function(rowSelector, columnSelector, opts) {
26491          if ($3.isPlainObject(rowSelector)) {
26492            if (rowSelector.row === undefined2) {
26493              opts = rowSelector;
26494              rowSelector = null;
26495            } else {
26496              opts = columnSelector;
26497              columnSelector = null;
26498            }
26499          }
26500          if ($3.isPlainObject(columnSelector)) {
26501            opts = columnSelector;
26502            columnSelector = null;
26503          }
26504          if (columnSelector === null || columnSelector === undefined2) {
26505            return this.iterator("table", function(settings) {
26506              return __cell_selector(settings, rowSelector, _selector_opts(opts));
26507            });
26508          }
26509          var internalOpts = opts ? {
26510            page: opts.page,
26511            order: opts.order,
26512            search: opts.search
26513          } : {};
26514          var columns = this.columns(columnSelector, internalOpts);
26515          var rows = this.rows(rowSelector, internalOpts);
26516          var i2, ien, j, jen;
26517          var cellsNoOpts = this.iterator("table", function(settings, idx) {
26518            var a = [];
26519            for (i2 = 0, ien = rows[idx].length; i2 < ien; i2++) {
26520              for (j = 0, jen = columns[idx].length; j < jen; j++) {
26521                a.push({
26522                  row: rows[idx][i2],
26523                  column: columns[idx][j]
26524                });
26525              }
26526            }
26527            return a;
26528          }, 1);
26529          var cells = opts && opts.selected ? this.cells(cellsNoOpts, opts) : cellsNoOpts;
26530          $3.extend(cells.selector, {
26531            cols: columnSelector,
26532            rows: rowSelector,
26533            opts
26534          });
26535          return cells;
26536        });
26537        _api_registerPlural("cells().nodes()", "cell().node()", function() {
26538          return this.iterator("cell", function(settings, row, column) {
26539            var data = settings.aoData[row];
26540            return data && data.anCells ? data.anCells[column] : undefined2;
26541          }, 1);
26542        });
26543        _api_register("cells().data()", function() {
26544          return this.iterator("cell", function(settings, row, column) {
26545            return _fnGetCellData(settings, row, column);
26546          }, 1);
26547        });
26548        _api_registerPlural("cells().cache()", "cell().cache()", function(type) {
26549          type = type === "search" ? "_aFilterData" : "_aSortData";
26550          return this.iterator("cell", function(settings, row, column) {
26551            return settings.aoData[row][type][column];
26552          }, 1);
26553        });
26554        _api_registerPlural("cells().render()", "cell().render()", function(type) {
26555          return this.iterator("cell", function(settings, row, column) {
26556            return _fnGetCellData(settings, row, column, type);
26557          }, 1);
26558        });
26559        _api_registerPlural("cells().indexes()", "cell().index()", function() {
26560          return this.iterator("cell", function(settings, row, column) {
26561            return {
26562              row,
26563              column,
26564              columnVisible: _fnColumnIndexToVisible(settings, column)
26565            };
26566          }, 1);
26567        });
26568        _api_registerPlural("cells().invalidate()", "cell().invalidate()", function(src) {
26569          return this.iterator("cell", function(settings, row, column) {
26570            _fnInvalidate(settings, row, src, column);
26571          });
26572        });
26573        _api_register("cell()", function(rowSelector, columnSelector, opts) {
26574          return _selector_first(this.cells(rowSelector, columnSelector, opts));
26575        });
26576        _api_register("cell().data()", function(data) {
26577          var ctx = this.context;
26578          var cell = this[0];
26579          if (data === undefined2) {
26580            return ctx.length && cell.length ? _fnGetCellData(ctx[0], cell[0].row, cell[0].column) : undefined2;
26581          }
26582          _fnSetCellData(ctx[0], cell[0].row, cell[0].column, data);
26583          _fnInvalidate(ctx[0], cell[0].row, "data", cell[0].column);
26584          return this;
26585        });
26586        _api_register("order()", function(order, dir) {
26587          var ctx = this.context;
26588          if (order === undefined2) {
26589            return ctx.length !== 0 ? ctx[0].aaSorting : undefined2;
26590          }
26591          if (typeof order === "number") {
26592            order = [[order, dir]];
26593          } else if (order.length && !Array.isArray(order[0])) {
26594            order = Array.prototype.slice.call(arguments);
26595          }
26596          return this.iterator("table", function(settings) {
26597            settings.aaSorting = order.slice();
26598          });
26599        });
26600        _api_register("order.listener()", function(node, column, callback) {
26601          return this.iterator("table", function(settings) {
26602            _fnSortAttachListener(settings, node, column, callback);
26603          });
26604        });
26605        _api_register("order.fixed()", function(set) {
26606          if (!set) {
26607            var ctx = this.context;
26608            var fixed = ctx.length ? ctx[0].aaSortingFixed : undefined2;
26609            return Array.isArray(fixed) ? { pre: fixed } : fixed;
26610          }
26611          return this.iterator("table", function(settings) {
26612            settings.aaSortingFixed = $3.extend(true, {}, set);
26613          });
26614        });
26615        _api_register([
26616          "columns().order()",
26617          "column().order()"
26618        ], function(dir) {
26619          var that = this;
26620          return this.iterator("table", function(settings, i2) {
26621            var sort = [];
26622            $3.each(that[i2], function(j, col) {
26623              sort.push([col, dir]);
26624            });
26625            settings.aaSorting = sort;
26626          });
26627        });
26628        _api_register("search()", function(input, regex, smart, caseInsen) {
26629          var ctx = this.context;
26630          if (input === undefined2) {
26631            return ctx.length !== 0 ? ctx[0].oPreviousSearch.sSearch : undefined2;
26632          }
26633          return this.iterator("table", function(settings) {
26634            if (!settings.oFeatures.bFilter) {
26635              return;
26636            }
26637            _fnFilterComplete(settings, $3.extend({}, settings.oPreviousSearch, {
26638              "sSearch": input + "",
26639              "bRegex": regex === null ? false : regex,
26640              "bSmart": smart === null ? true : smart,
26641              "bCaseInsensitive": caseInsen === null ? true : caseInsen
26642            }), 1);
26643          });
26644        });
26645        _api_registerPlural(
26646          "columns().search()",
26647          "column().search()",
26648          function(input, regex, smart, caseInsen) {
26649            return this.iterator("column", function(settings, column) {
26650              var preSearch = settings.aoPreSearchCols;
26651              if (input === undefined2) {
26652                return preSearch[column].sSearch;
26653              }
26654              if (!settings.oFeatures.bFilter) {
26655                return;
26656              }
26657              $3.extend(preSearch[column], {
26658                "sSearch": input + "",
26659                "bRegex": regex === null ? false : regex,
26660                "bSmart": smart === null ? true : smart,
26661                "bCaseInsensitive": caseInsen === null ? true : caseInsen
26662              });
26663              _fnFilterComplete(settings, settings.oPreviousSearch, 1);
26664            });
26665          }
26666        );
26667        _api_register("state()", function() {
26668          return this.context.length ? this.context[0].oSavedState : null;
26669        });
26670        _api_register("state.clear()", function() {
26671          return this.iterator("table", function(settings) {
26672            settings.fnStateSaveCallback.call(settings.oInstance, settings, {});
26673          });
26674        });
26675        _api_register("state.loaded()", function() {
26676          return this.context.length ? this.context[0].oLoadedState : null;
26677        });
26678        _api_register("state.save()", function() {
26679          return this.iterator("table", function(settings) {
26680            _fnSaveState(settings);
26681          });
26682        });
26683        DataTable2.use = function(module2, type) {
26684          if (type === "lib" || module2.fn) {
26685            $3 = module2;
26686          } else if (type == "win" || module2.document) {
26687            window2 = module2;
26688            document2 = module2.document;
26689          } else if (type === "datetime" || module2.type === "DateTime") {
26690            DataTable2.DateTime = module2;
26691          }
26692        };
26693        DataTable2.factory = function(root, jq) {
26694          var is = false;
26695          if (root && root.document) {
26696            window2 = root;
26697            document2 = root.document;
26698          }
26699          if (jq && jq.fn && jq.fn.jquery) {
26700            $3 = jq;
26701            is = true;
26702          }
26703          return is;
26704        };
26705        DataTable2.versionCheck = DataTable2.fnVersionCheck = function(version) {
26706          var aThis = DataTable2.version.split(".");
26707          var aThat = version.split(".");
26708          var iThis, iThat;
26709          for (var i2 = 0, iLen = aThat.length; i2 < iLen; i2++) {
26710            iThis = parseInt(aThis[i2], 10) || 0;
26711            iThat = parseInt(aThat[i2], 10) || 0;
26712            if (iThis === iThat) {
26713              continue;
26714            }
26715            return iThis > iThat;
26716          }
26717          return true;
26718        };
26719        DataTable2.isDataTable = DataTable2.fnIsDataTable = function(table) {
26720          var t2 = $3(table).get(0);
26721          var is = false;
26722          if (table instanceof DataTable2.Api) {
26723            return true;
26724          }
26725          $3.each(DataTable2.settings, function(i2, o) {
26726            var head = o.nScrollHead ? $3("table", o.nScrollHead)[0] : null;
26727            var foot = o.nScrollFoot ? $3("table", o.nScrollFoot)[0] : null;
26728            if (o.nTable === t2 || head === t2 || foot === t2) {
26729              is = true;
26730            }
26731          });
26732          return is;
26733        };
26734        DataTable2.tables = DataTable2.fnTables = function(visible) {
26735          var api = false;
26736          if ($3.isPlainObject(visible)) {
26737            api = visible.api;
26738            visible = visible.visible;
26739          }
26740          var a = $3.map(DataTable2.settings, function(o) {
26741            if (!visible || visible && $3(o.nTable).is(":visible")) {
26742              return o.nTable;
26743            }
26744          });
26745          return api ? new _Api(a) : a;
26746        };
26747        DataTable2.camelToHungarian = _fnCamelToHungarian;
26748        _api_register("$()", function(selector, opts) {
26749          var rows = this.rows(opts).nodes(), jqRows = $3(rows);
26750          return $3([].concat(
26751            jqRows.filter(selector).toArray(),
26752            jqRows.find(selector).toArray()
26753          ));
26754        });
26755        $3.each(["on", "one", "off"], function(i2, key) {
26756          _api_register(key + "()", function() {
26757            var args = Array.prototype.slice.call(arguments);
26758            args[0] = $3.map(args[0].split(/\s/), function(e) {
26759              return !e.match(/\.dt\b/) ? e + ".dt" : e;
26760            }).join(" ");
26761            var inst = $3(this.tables().nodes());
26762            inst[key].apply(inst, args);
26763            return this;
26764          });
26765        });
26766        _api_register("clear()", function() {
26767          return this.iterator("table", function(settings) {
26768            _fnClearTable(settings);
26769          });
26770        });
26771        _api_register("settings()", function() {
26772          return new _Api(this.context, this.context);
26773        });
26774        _api_register("init()", function() {
26775          var ctx = this.context;
26776          return ctx.length ? ctx[0].oInit : null;
26777        });
26778        _api_register("data()", function() {
26779          return this.iterator("table", function(settings) {
26780            return _pluck(settings.aoData, "_aData");
26781          }).flatten();
26782        });
26783        _api_register("destroy()", function(remove) {
26784          remove = remove || false;
26785          return this.iterator("table", function(settings) {
26786            var classes = settings.oClasses;
26787            var table = settings.nTable;
26788            var tbody = settings.nTBody;
26789            var thead = settings.nTHead;
26790            var tfoot = settings.nTFoot;
26791            var jqTable = $3(table);
26792            var jqTbody = $3(tbody);
26793            var jqWrapper = $3(settings.nTableWrapper);
26794            var rows = $3.map(settings.aoData, function(r) {
26795              return r.nTr;
26796            });
26797            var i2, ien;
26798            settings.bDestroying = true;
26799            _fnCallbackFire(settings, "aoDestroyCallback", "destroy", [settings]);
26800            if (!remove) {
26801              new _Api(settings).columns().visible(true);
26802            }
26803            jqWrapper.off(".DT").find(":not(tbody *)").off(".DT");
26804            $3(window2).off(".DT-" + settings.sInstance);
26805            if (table != thead.parentNode) {
26806              jqTable.children("thead").detach();
26807              jqTable.append(thead);
26808            }
26809            if (tfoot && table != tfoot.parentNode) {
26810              jqTable.children("tfoot").detach();
26811              jqTable.append(tfoot);
26812            }
26813            settings.aaSorting = [];
26814            settings.aaSortingFixed = [];
26815            _fnSortingClasses(settings);
26816            $3(rows).removeClass(settings.asStripeClasses.join(" "));
26817            $3("th, td", thead).removeClass(
26818              classes.sSortable + " " + classes.sSortableAsc + " " + classes.sSortableDesc + " " + classes.sSortableNone
26819            );
26820            jqTbody.children().detach();
26821            jqTbody.append(rows);
26822            var orig = settings.nTableWrapper.parentNode;
26823            var removedMethod = remove ? "remove" : "detach";
26824            jqTable[removedMethod]();
26825            jqWrapper[removedMethod]();
26826            if (!remove && orig) {
26827              orig.insertBefore(table, settings.nTableReinsertBefore);
26828              jqTable.css("width", settings.sDestroyWidth).removeClass(classes.sTable);
26829              ien = settings.asDestroyStripes.length;
26830              if (ien) {
26831                jqTbody.children().each(function(i3) {
26832                  $3(this).addClass(settings.asDestroyStripes[i3 % ien]);
26833                });
26834              }
26835            }
26836            var idx = $3.inArray(settings, DataTable2.settings);
26837            if (idx !== -1) {
26838              DataTable2.settings.splice(idx, 1);
26839            }
26840          });
26841        });
26842        $3.each(["column", "row", "cell"], function(i2, type) {
26843          _api_register(type + "s().every()", function(fn) {
26844            var opts = this.selector.opts;
26845            var api = this;
26846            return this.iterator(type, function(settings, arg1, arg2, arg3, arg4) {
26847              fn.call(
26848                api[type](
26849                  arg1,
26850                  type === "cell" ? arg2 : opts,
26851                  type === "cell" ? opts : undefined2
26852                ),
26853                arg1,
26854                arg2,
26855                arg3,
26856                arg4
26857              );
26858            });
26859          });
26860        });
26861        _api_register("i18n()", function(token, def, plural) {
26862          var ctx = this.context[0];
26863          var resolved = _fnGetObjectDataFn(token)(ctx.oLanguage);
26864          if (resolved === undefined2) {
26865            resolved = def;
26866          }
26867          if (plural !== undefined2 && $3.isPlainObject(resolved)) {
26868            resolved = resolved[plural] !== undefined2 ? resolved[plural] : resolved._;
26869          }
26870          return typeof resolved === "string" ? resolved.replace("%d", plural) : resolved;
26871        });
26872        DataTable2.version = "1.13.11";
26873        DataTable2.settings = [];
26874        DataTable2.models = {};
26875        DataTable2.models.oSearch = {
26876          /**
26877           * Flag to indicate if the filtering should be case insensitive or not
26878           *  @type boolean
26879           *  @default true
26880           */
26881          "bCaseInsensitive": true,
26882          /**
26883           * Applied search term
26884           *  @type string
26885           *  @default <i>Empty string</i>
26886           */
26887          "sSearch": "",
26888          /**
26889           * Flag to indicate if the search term should be interpreted as a
26890           * regular expression (true) or not (false) and therefore and special
26891           * regex characters escaped.
26892           *  @type boolean
26893           *  @default false
26894           */
26895          "bRegex": false,
26896          /**
26897           * Flag to indicate if DataTables is to use its smart filtering or not.
26898           *  @type boolean
26899           *  @default true
26900           */
26901          "bSmart": true,
26902          /**
26903           * Flag to indicate if DataTables should only trigger a search when
26904           * the return key is pressed.
26905           *  @type boolean
26906           *  @default false
26907           */
26908          "return": false
26909        };
26910        DataTable2.models.oRow = {
26911          /**
26912           * TR element for the row
26913           *  @type node
26914           *  @default null
26915           */
26916          "nTr": null,
26917          /**
26918           * Array of TD elements for each row. This is null until the row has been
26919           * created.
26920           *  @type array nodes
26921           *  @default []
26922           */
26923          "anCells": null,
26924          /**
26925           * Data object from the original data source for the row. This is either
26926           * an array if using the traditional form of DataTables, or an object if
26927           * using mData options. The exact type will depend on the passed in
26928           * data from the data source, or will be an array if using DOM a data
26929           * source.
26930           *  @type array|object
26931           *  @default []
26932           */
26933          "_aData": [],
26934          /**
26935           * Sorting data cache - this array is ostensibly the same length as the
26936           * number of columns (although each index is generated only as it is
26937           * needed), and holds the data that is used for sorting each column in the
26938           * row. We do this cache generation at the start of the sort in order that
26939           * the formatting of the sort data need be done only once for each cell
26940           * per sort. This array should not be read from or written to by anything
26941           * other than the master sorting methods.
26942           *  @type array
26943           *  @default null
26944           *  @private
26945           */
26946          "_aSortData": null,
26947          /**
26948           * Per cell filtering data cache. As per the sort data cache, used to
26949           * increase the performance of the filtering in DataTables
26950           *  @type array
26951           *  @default null
26952           *  @private
26953           */
26954          "_aFilterData": null,
26955          /**
26956           * Filtering data cache. This is the same as the cell filtering cache, but
26957           * in this case a string rather than an array. This is easily computed with
26958           * a join on `_aFilterData`, but is provided as a cache so the join isn't
26959           * needed on every search (memory traded for performance)
26960           *  @type array
26961           *  @default null
26962           *  @private
26963           */
26964          "_sFilterRow": null,
26965          /**
26966           * Cache of the class name that DataTables has applied to the row, so we
26967           * can quickly look at this variable rather than needing to do a DOM check
26968           * on className for the nTr property.
26969           *  @type string
26970           *  @default <i>Empty string</i>
26971           *  @private
26972           */
26973          "_sRowStripe": "",
26974          /**
26975           * Denote if the original data source was from the DOM, or the data source
26976           * object. This is used for invalidating data, so DataTables can
26977           * automatically read data from the original source, unless uninstructed
26978           * otherwise.
26979           *  @type string
26980           *  @default null
26981           *  @private
26982           */
26983          "src": null,
26984          /**
26985           * Index in the aoData array. This saves an indexOf lookup when we have the
26986           * object, but want to know the index
26987           *  @type integer
26988           *  @default -1
26989           *  @private
26990           */
26991          "idx": -1
26992        };
26993        DataTable2.models.oColumn = {
26994          /**
26995           * Column index. This could be worked out on-the-fly with $.inArray, but it
26996           * is faster to just hold it as a variable
26997           *  @type integer
26998           *  @default null
26999           */
27000          "idx": null,
27001          /**
27002           * A list of the columns that sorting should occur on when this column
27003           * is sorted. That this property is an array allows multi-column sorting
27004           * to be defined for a column (for example first name / last name columns
27005           * would benefit from this). The values are integers pointing to the
27006           * columns to be sorted on (typically it will be a single integer pointing
27007           * at itself, but that doesn't need to be the case).
27008           *  @type array
27009           */
27010          "aDataSort": null,
27011          /**
27012           * Define the sorting directions that are applied to the column, in sequence
27013           * as the column is repeatedly sorted upon - i.e. the first value is used
27014           * as the sorting direction when the column if first sorted (clicked on).
27015           * Sort it again (click again) and it will move on to the next index.
27016           * Repeat until loop.
27017           *  @type array
27018           */
27019          "asSorting": null,
27020          /**
27021           * Flag to indicate if the column is searchable, and thus should be included
27022           * in the filtering or not.
27023           *  @type boolean
27024           */
27025          "bSearchable": null,
27026          /**
27027           * Flag to indicate if the column is sortable or not.
27028           *  @type boolean
27029           */
27030          "bSortable": null,
27031          /**
27032           * Flag to indicate if the column is currently visible in the table or not
27033           *  @type boolean
27034           */
27035          "bVisible": null,
27036          /**
27037           * Store for manual type assignment using the `column.type` option. This
27038           * is held in store so we can manipulate the column's `sType` property.
27039           *  @type string
27040           *  @default null
27041           *  @private
27042           */
27043          "_sManualType": null,
27044          /**
27045           * Flag to indicate if HTML5 data attributes should be used as the data
27046           * source for filtering or sorting. True is either are.
27047           *  @type boolean
27048           *  @default false
27049           *  @private
27050           */
27051          "_bAttrSrc": false,
27052          /**
27053           * Developer definable function that is called whenever a cell is created (Ajax source,
27054           * etc) or processed for input (DOM source). This can be used as a compliment to mRender
27055           * allowing you to modify the DOM element (add background colour for example) when the
27056           * element is available.
27057           *  @type function
27058           *  @param {element} nTd The TD node that has been created
27059           *  @param {*} sData The Data for the cell
27060           *  @param {array|object} oData The data for the whole row
27061           *  @param {int} iRow The row index for the aoData data store
27062           *  @default null
27063           */
27064          "fnCreatedCell": null,
27065          /**
27066           * Function to get data from a cell in a column. You should <b>never</b>
27067           * access data directly through _aData internally in DataTables - always use
27068           * the method attached to this property. It allows mData to function as
27069           * required. This function is automatically assigned by the column
27070           * initialisation method
27071           *  @type function
27072           *  @param {array|object} oData The data array/object for the array
27073           *    (i.e. aoData[]._aData)
27074           *  @param {string} sSpecific The specific data type you want to get -
27075           *    'display', 'type' 'filter' 'sort'
27076           *  @returns {*} The data for the cell from the given row's data
27077           *  @default null
27078           */
27079          "fnGetData": null,
27080          /**
27081           * Function to set data for a cell in the column. You should <b>never</b>
27082           * set the data directly to _aData internally in DataTables - always use
27083           * this method. It allows mData to function as required. This function
27084           * is automatically assigned by the column initialisation method
27085           *  @type function
27086           *  @param {array|object} oData The data array/object for the array
27087           *    (i.e. aoData[]._aData)
27088           *  @param {*} sValue Value to set
27089           *  @default null
27090           */
27091          "fnSetData": null,
27092          /**
27093           * Property to read the value for the cells in the column from the data
27094           * source array / object. If null, then the default content is used, if a
27095           * function is given then the return from the function is used.
27096           *  @type function|int|string|null
27097           *  @default null
27098           */
27099          "mData": null,
27100          /**
27101           * Partner property to mData which is used (only when defined) to get
27102           * the data - i.e. it is basically the same as mData, but without the
27103           * 'set' option, and also the data fed to it is the result from mData.
27104           * This is the rendering method to match the data method of mData.
27105           *  @type function|int|string|null
27106           *  @default null
27107           */
27108          "mRender": null,
27109          /**
27110           * Unique header TH/TD element for this column - this is what the sorting
27111           * listener is attached to (if sorting is enabled.)
27112           *  @type node
27113           *  @default null
27114           */
27115          "nTh": null,
27116          /**
27117           * Unique footer TH/TD element for this column (if there is one). Not used
27118           * in DataTables as such, but can be used for plug-ins to reference the
27119           * footer for each column.
27120           *  @type node
27121           *  @default null
27122           */
27123          "nTf": null,
27124          /**
27125           * The class to apply to all TD elements in the table's TBODY for the column
27126           *  @type string
27127           *  @default null
27128           */
27129          "sClass": null,
27130          /**
27131           * When DataTables calculates the column widths to assign to each column,
27132           * it finds the longest string in each column and then constructs a
27133           * temporary table and reads the widths from that. The problem with this
27134           * is that "mmm" is much wider then "iiii", but the latter is a longer
27135           * string - thus the calculation can go wrong (doing it properly and putting
27136           * it into an DOM object and measuring that is horribly(!) slow). Thus as
27137           * a "work around" we provide this option. It will append its value to the
27138           * text that is found to be the longest string for the column - i.e. padding.
27139           *  @type string
27140           */
27141          "sContentPadding": null,
27142          /**
27143           * Allows a default value to be given for a column's data, and will be used
27144           * whenever a null data source is encountered (this can be because mData
27145           * is set to null, or because the data source itself is null).
27146           *  @type string
27147           *  @default null
27148           */
27149          "sDefaultContent": null,
27150          /**
27151           * Name for the column, allowing reference to the column by name as well as
27152           * by index (needs a lookup to work by name).
27153           *  @type string
27154           */
27155          "sName": null,
27156          /**
27157           * Custom sorting data type - defines which of the available plug-ins in
27158           * afnSortData the custom sorting will use - if any is defined.
27159           *  @type string
27160           *  @default std
27161           */
27162          "sSortDataType": "std",
27163          /**
27164           * Class to be applied to the header element when sorting on this column
27165           *  @type string
27166           *  @default null
27167           */
27168          "sSortingClass": null,
27169          /**
27170           * Class to be applied to the header element when sorting on this column -
27171           * when jQuery UI theming is used.
27172           *  @type string
27173           *  @default null
27174           */
27175          "sSortingClassJUI": null,
27176          /**
27177           * Title of the column - what is seen in the TH element (nTh).
27178           *  @type string
27179           */
27180          "sTitle": null,
27181          /**
27182           * Column sorting and filtering type
27183           *  @type string
27184           *  @default null
27185           */
27186          "sType": null,
27187          /**
27188           * Width of the column
27189           *  @type string
27190           *  @default null
27191           */
27192          "sWidth": null,
27193          /**
27194           * Width of the column when it was first "encountered"
27195           *  @type string
27196           *  @default null
27197           */
27198          "sWidthOrig": null
27199        };
27200        DataTable2.defaults = {
27201          /**
27202           * An array of data to use for the table, passed in at initialisation which
27203           * will be used in preference to any data which is already in the DOM. This is
27204           * particularly useful for constructing tables purely in Javascript, for
27205           * example with a custom Ajax call.
27206           *  @type array
27207           *  @default null
27208           *
27209           *  @dtopt Option
27210           *  @name DataTable.defaults.data
27211           *
27212           *  @example
27213           *    // Using a 2D array data source
27214           *    $(document).ready( function () {
27215           *      $('#example').dataTable( {
27216           *        "data": [
27217           *          ['Trident', 'Internet Explorer 4.0', 'Win 95+', 4, 'X'],
27218           *          ['Trident', 'Internet Explorer 5.0', 'Win 95+', 5, 'C'],
27219           *        ],
27220           *        "columns": [
27221           *          { "title": "Engine" },
27222           *          { "title": "Browser" },
27223           *          { "title": "Platform" },
27224           *          { "title": "Version" },
27225           *          { "title": "Grade" }
27226           *        ]
27227           *      } );
27228           *    } );
27229           *
27230           *  @example
27231           *    // Using an array of objects as a data source (`data`)
27232           *    $(document).ready( function () {
27233           *      $('#example').dataTable( {
27234           *        "data": [
27235           *          {
27236           *            "engine":   "Trident",
27237           *            "browser":  "Internet Explorer 4.0",
27238           *            "platform": "Win 95+",
27239           *            "version":  4,
27240           *            "grade":    "X"
27241           *          },
27242           *          {
27243           *            "engine":   "Trident",
27244           *            "browser":  "Internet Explorer 5.0",
27245           *            "platform": "Win 95+",
27246           *            "version":  5,
27247           *            "grade":    "C"
27248           *          }
27249           *        ],
27250           *        "columns": [
27251           *          { "title": "Engine",   "data": "engine" },
27252           *          { "title": "Browser",  "data": "browser" },
27253           *          { "title": "Platform", "data": "platform" },
27254           *          { "title": "Version",  "data": "version" },
27255           *          { "title": "Grade",    "data": "grade" }
27256           *        ]
27257           *      } );
27258           *    } );
27259           */
27260          "aaData": null,
27261          /**
27262           * If ordering is enabled, then DataTables will perform a first pass sort on
27263           * initialisation. You can define which column(s) the sort is performed
27264           * upon, and the sorting direction, with this variable. The `sorting` array
27265           * should contain an array for each column to be sorted initially containing
27266           * the column's index and a direction string ('asc' or 'desc').
27267           *  @type array
27268           *  @default [[0,'asc']]
27269           *
27270           *  @dtopt Option
27271           *  @name DataTable.defaults.order
27272           *
27273           *  @example
27274           *    // Sort by 3rd column first, and then 4th column
27275           *    $(document).ready( function() {
27276           *      $('#example').dataTable( {
27277           *        "order": [[2,'asc'], [3,'desc']]
27278           *      } );
27279           *    } );
27280           *
27281           *    // No initial sorting
27282           *    $(document).ready( function() {
27283           *      $('#example').dataTable( {
27284           *        "order": []
27285           *      } );
27286           *    } );
27287           */
27288          "aaSorting": [[0, "asc"]],
27289          /**
27290           * This parameter is basically identical to the `sorting` parameter, but
27291           * cannot be overridden by user interaction with the table. What this means
27292           * is that you could have a column (visible or hidden) which the sorting
27293           * will always be forced on first - any sorting after that (from the user)
27294           * will then be performed as required. This can be useful for grouping rows
27295           * together.
27296           *  @type array
27297           *  @default null
27298           *
27299           *  @dtopt Option
27300           *  @name DataTable.defaults.orderFixed
27301           *
27302           *  @example
27303           *    $(document).ready( function() {
27304           *      $('#example').dataTable( {
27305           *        "orderFixed": [[0,'asc']]
27306           *      } );
27307           *    } )
27308           */
27309          "aaSortingFixed": [],
27310          /**
27311           * DataTables can be instructed to load data to display in the table from a
27312           * Ajax source. This option defines how that Ajax call is made and where to.
27313           *
27314           * The `ajax` property has three different modes of operation, depending on
27315           * how it is defined. These are:
27316           *
27317           * * `string` - Set the URL from where the data should be loaded from.
27318           * * `object` - Define properties for `jQuery.ajax`.
27319           * * `function` - Custom data get function
27320           *
27321           * `string`
27322           * --------
27323           *
27324           * As a string, the `ajax` property simply defines the URL from which
27325           * DataTables will load data.
27326           *
27327           * `object`
27328           * --------
27329           *
27330           * As an object, the parameters in the object are passed to
27331           * [jQuery.ajax](https://api.jquery.com/jQuery.ajax/) allowing fine control
27332           * of the Ajax request. DataTables has a number of default parameters which
27333           * you can override using this option. Please refer to the jQuery
27334           * documentation for a full description of the options available, although
27335           * the following parameters provide additional options in DataTables or
27336           * require special consideration:
27337           *
27338           * * `data` - As with jQuery, `data` can be provided as an object, but it
27339           *   can also be used as a function to manipulate the data DataTables sends
27340           *   to the server. The function takes a single parameter, an object of
27341           *   parameters with the values that DataTables has readied for sending. An
27342           *   object may be returned which will be merged into the DataTables
27343           *   defaults, or you can add the items to the object that was passed in and
27344           *   not return anything from the function. This supersedes `fnServerParams`
27345           *   from DataTables 1.9-.
27346           *
27347           * * `dataSrc` - By default DataTables will look for the property `data` (or
27348           *   `aaData` for compatibility with DataTables 1.9-) when obtaining data
27349           *   from an Ajax source or for server-side processing - this parameter
27350           *   allows that property to be changed. You can use Javascript dotted
27351           *   object notation to get a data source for multiple levels of nesting, or
27352           *   it my be used as a function. As a function it takes a single parameter,
27353           *   the JSON returned from the server, which can be manipulated as
27354           *   required, with the returned value being that used by DataTables as the
27355           *   data source for the table. This supersedes `sAjaxDataProp` from
27356           *   DataTables 1.9-.
27357           *
27358           * * `success` - Should not be overridden it is used internally in
27359           *   DataTables. To manipulate / transform the data returned by the server
27360           *   use `ajax.dataSrc`, or use `ajax` as a function (see below).
27361           *
27362           * `function`
27363           * ----------
27364           *
27365           * As a function, making the Ajax call is left up to yourself allowing
27366           * complete control of the Ajax request. Indeed, if desired, a method other
27367           * than Ajax could be used to obtain the required data, such as Web storage
27368           * or an AIR database.
27369           *
27370           * The function is given four parameters and no return is required. The
27371           * parameters are:
27372           *
27373           * 1. _object_ - Data to send to the server
27374           * 2. _function_ - Callback function that must be executed when the required
27375           *    data has been obtained. That data should be passed into the callback
27376           *    as the only parameter
27377           * 3. _object_ - DataTables settings object for the table
27378           *
27379           * Note that this supersedes `fnServerData` from DataTables 1.9-.
27380           *
27381           *  @type string|object|function
27382           *  @default null
27383           *
27384           *  @dtopt Option
27385           *  @name DataTable.defaults.ajax
27386           *  @since 1.10.0
27387           *
27388           * @example
27389           *   // Get JSON data from a file via Ajax.
27390           *   // Note DataTables expects data in the form `{ data: [ ...data... ] }` by default).
27391           *   $('#example').dataTable( {
27392           *     "ajax": "data.json"
27393           *   } );
27394           *
27395           * @example
27396           *   // Get JSON data from a file via Ajax, using `dataSrc` to change
27397           *   // `data` to `tableData` (i.e. `{ tableData: [ ...data... ] }`)
27398           *   $('#example').dataTable( {
27399           *     "ajax": {
27400           *       "url": "data.json",
27401           *       "dataSrc": "tableData"
27402           *     }
27403           *   } );
27404           *
27405           * @example
27406           *   // Get JSON data from a file via Ajax, using `dataSrc` to read data
27407           *   // from a plain array rather than an array in an object
27408           *   $('#example').dataTable( {
27409           *     "ajax": {
27410           *       "url": "data.json",
27411           *       "dataSrc": ""
27412           *     }
27413           *   } );
27414           *
27415           * @example
27416           *   // Manipulate the data returned from the server - add a link to data
27417           *   // (note this can, should, be done using `render` for the column - this
27418           *   // is just a simple example of how the data can be manipulated).
27419           *   $('#example').dataTable( {
27420           *     "ajax": {
27421           *       "url": "data.json",
27422           *       "dataSrc": function ( json ) {
27423           *         for ( var i=0, ien=json.length ; i<ien ; i++ ) {
27424           *           json[i][0] = '<a href="/message/'+json[i][0]+'>View message</a>';
27425           *         }
27426           *         return json;
27427           *       }
27428           *     }
27429           *   } );
27430           *
27431           * @example
27432           *   // Add data to the request
27433           *   $('#example').dataTable( {
27434           *     "ajax": {
27435           *       "url": "data.json",
27436           *       "data": function ( d ) {
27437           *         return {
27438           *           "extra_search": $('#extra').val()
27439           *         };
27440           *       }
27441           *     }
27442           *   } );
27443           *
27444           * @example
27445           *   // Send request as POST
27446           *   $('#example').dataTable( {
27447           *     "ajax": {
27448           *       "url": "data.json",
27449           *       "type": "POST"
27450           *     }
27451           *   } );
27452           *
27453           * @example
27454           *   // Get the data from localStorage (could interface with a form for
27455           *   // adding, editing and removing rows).
27456           *   $('#example').dataTable( {
27457           *     "ajax": function (data, callback, settings) {
27458           *       callback(
27459           *         JSON.parse( localStorage.getItem('dataTablesData') )
27460           *       );
27461           *     }
27462           *   } );
27463           */
27464          "ajax": null,
27465          /**
27466           * This parameter allows you to readily specify the entries in the length drop
27467           * down menu that DataTables shows when pagination is enabled. It can be
27468           * either a 1D array of options which will be used for both the displayed
27469           * option and the value, or a 2D array which will use the array in the first
27470           * position as the value, and the array in the second position as the
27471           * displayed options (useful for language strings such as 'All').
27472           *
27473           * Note that the `pageLength` property will be automatically set to the
27474           * first value given in this array, unless `pageLength` is also provided.
27475           *  @type array
27476           *  @default [ 10, 25, 50, 100 ]
27477           *
27478           *  @dtopt Option
27479           *  @name DataTable.defaults.lengthMenu
27480           *
27481           *  @example
27482           *    $(document).ready( function() {
27483           *      $('#example').dataTable( {
27484           *        "lengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]]
27485           *      } );
27486           *    } );
27487           */
27488          "aLengthMenu": [10, 25, 50, 100],
27489          /**
27490           * The `columns` option in the initialisation parameter allows you to define
27491           * details about the way individual columns behave. For a full list of
27492           * column options that can be set, please see
27493           * {@link DataTable.defaults.column}. Note that if you use `columns` to
27494           * define your columns, you must have an entry in the array for every single
27495           * column that you have in your table (these can be null if you don't which
27496           * to specify any options).
27497           *  @member
27498           *
27499           *  @name DataTable.defaults.column
27500           */
27501          "aoColumns": null,
27502          /**
27503           * Very similar to `columns`, `columnDefs` allows you to target a specific
27504           * column, multiple columns, or all columns, using the `targets` property of
27505           * each object in the array. This allows great flexibility when creating
27506           * tables, as the `columnDefs` arrays can be of any length, targeting the
27507           * columns you specifically want. `columnDefs` may use any of the column
27508           * options available: {@link DataTable.defaults.column}, but it _must_
27509           * have `targets` defined in each object in the array. Values in the `targets`
27510           * array may be:
27511           *   <ul>
27512           *     <li>a string - class name will be matched on the TH for the column</li>
27513           *     <li>0 or a positive integer - column index counting from the left</li>
27514           *     <li>a negative integer - column index counting from the right</li>
27515           *     <li>the string "_all" - all columns (i.e. assign a default)</li>
27516           *   </ul>
27517           *  @member
27518           *
27519           *  @name DataTable.defaults.columnDefs
27520           */
27521          "aoColumnDefs": null,
27522          /**
27523           * Basically the same as `search`, this parameter defines the individual column
27524           * filtering state at initialisation time. The array must be of the same size
27525           * as the number of columns, and each element be an object with the parameters
27526           * `search` and `escapeRegex` (the latter is optional). 'null' is also
27527           * accepted and the default will be used.
27528           *  @type array
27529           *  @default []
27530           *
27531           *  @dtopt Option
27532           *  @name DataTable.defaults.searchCols
27533           *
27534           *  @example
27535           *    $(document).ready( function() {
27536           *      $('#example').dataTable( {
27537           *        "searchCols": [
27538           *          null,
27539           *          { "search": "My filter" },
27540           *          null,
27541           *          { "search": "^[0-9]", "escapeRegex": false }
27542           *        ]
27543           *      } );
27544           *    } )
27545           */
27546          "aoSearchCols": [],
27547          /**
27548           * An array of CSS classes that should be applied to displayed rows. This
27549           * array may be of any length, and DataTables will apply each class
27550           * sequentially, looping when required.
27551           *  @type array
27552           *  @default null <i>Will take the values determined by the `oClasses.stripe*`
27553           *    options</i>
27554           *
27555           *  @dtopt Option
27556           *  @name DataTable.defaults.stripeClasses
27557           *
27558           *  @example
27559           *    $(document).ready( function() {
27560           *      $('#example').dataTable( {
27561           *        "stripeClasses": [ 'strip1', 'strip2', 'strip3' ]
27562           *      } );
27563           *    } )
27564           */
27565          "asStripeClasses": null,
27566          /**
27567           * Enable or disable automatic column width calculation. This can be disabled
27568           * as an optimisation (it takes some time to calculate the widths) if the
27569           * tables widths are passed in using `columns`.
27570           *  @type boolean
27571           *  @default true
27572           *
27573           *  @dtopt Features
27574           *  @name DataTable.defaults.autoWidth
27575           *
27576           *  @example
27577           *    $(document).ready( function () {
27578           *      $('#example').dataTable( {
27579           *        "autoWidth": false
27580           *      } );
27581           *    } );
27582           */
27583          "bAutoWidth": true,
27584          /**
27585           * Deferred rendering can provide DataTables with a huge speed boost when you
27586           * are using an Ajax or JS data source for the table. This option, when set to
27587           * true, will cause DataTables to defer the creation of the table elements for
27588           * each row until they are needed for a draw - saving a significant amount of
27589           * time.
27590           *  @type boolean
27591           *  @default false
27592           *
27593           *  @dtopt Features
27594           *  @name DataTable.defaults.deferRender
27595           *
27596           *  @example
27597           *    $(document).ready( function() {
27598           *      $('#example').dataTable( {
27599           *        "ajax": "sources/arrays.txt",
27600           *        "deferRender": true
27601           *      } );
27602           *    } );
27603           */
27604          "bDeferRender": false,
27605          /**
27606           * Replace a DataTable which matches the given selector and replace it with
27607           * one which has the properties of the new initialisation object passed. If no
27608           * table matches the selector, then the new DataTable will be constructed as
27609           * per normal.
27610           *  @type boolean
27611           *  @default false
27612           *
27613           *  @dtopt Options
27614           *  @name DataTable.defaults.destroy
27615           *
27616           *  @example
27617           *    $(document).ready( function() {
27618           *      $('#example').dataTable( {
27619           *        "srollY": "200px",
27620           *        "paginate": false
27621           *      } );
27622           *
27623           *      // Some time later....
27624           *      $('#example').dataTable( {
27625           *        "filter": false,
27626           *        "destroy": true
27627           *      } );
27628           *    } );
27629           */
27630          "bDestroy": false,
27631          /**
27632           * Enable or disable filtering of data. Filtering in DataTables is "smart" in
27633           * that it allows the end user to input multiple words (space separated) and
27634           * will match a row containing those words, even if not in the order that was
27635           * specified (this allow matching across multiple columns). Note that if you
27636           * wish to use filtering in DataTables this must remain 'true' - to remove the
27637           * default filtering input box and retain filtering abilities, please use
27638           * {@link DataTable.defaults.dom}.
27639           *  @type boolean
27640           *  @default true
27641           *
27642           *  @dtopt Features
27643           *  @name DataTable.defaults.searching
27644           *
27645           *  @example
27646           *    $(document).ready( function () {
27647           *      $('#example').dataTable( {
27648           *        "searching": false
27649           *      } );
27650           *    } );
27651           */
27652          "bFilter": true,
27653          /**
27654           * Enable or disable the table information display. This shows information
27655           * about the data that is currently visible on the page, including information
27656           * about filtered data if that action is being performed.
27657           *  @type boolean
27658           *  @default true
27659           *
27660           *  @dtopt Features
27661           *  @name DataTable.defaults.info
27662           *
27663           *  @example
27664           *    $(document).ready( function () {
27665           *      $('#example').dataTable( {
27666           *        "info": false
27667           *      } );
27668           *    } );
27669           */
27670          "bInfo": true,
27671          /**
27672           * Allows the end user to select the size of a formatted page from a select
27673           * menu (sizes are 10, 25, 50 and 100). Requires pagination (`paginate`).
27674           *  @type boolean
27675           *  @default true
27676           *
27677           *  @dtopt Features
27678           *  @name DataTable.defaults.lengthChange
27679           *
27680           *  @example
27681           *    $(document).ready( function () {
27682           *      $('#example').dataTable( {
27683           *        "lengthChange": false
27684           *      } );
27685           *    } );
27686           */
27687          "bLengthChange": true,
27688          /**
27689           * Enable or disable pagination.
27690           *  @type boolean
27691           *  @default true
27692           *
27693           *  @dtopt Features
27694           *  @name DataTable.defaults.paging
27695           *
27696           *  @example
27697           *    $(document).ready( function () {
27698           *      $('#example').dataTable( {
27699           *        "paging": false
27700           *      } );
27701           *    } );
27702           */
27703          "bPaginate": true,
27704          /**
27705           * Enable or disable the display of a 'processing' indicator when the table is
27706           * being processed (e.g. a sort). This is particularly useful for tables with
27707           * large amounts of data where it can take a noticeable amount of time to sort
27708           * the entries.
27709           *  @type boolean
27710           *  @default false
27711           *
27712           *  @dtopt Features
27713           *  @name DataTable.defaults.processing
27714           *
27715           *  @example
27716           *    $(document).ready( function () {
27717           *      $('#example').dataTable( {
27718           *        "processing": true
27719           *      } );
27720           *    } );
27721           */
27722          "bProcessing": false,
27723          /**
27724           * Retrieve the DataTables object for the given selector. Note that if the
27725           * table has already been initialised, this parameter will cause DataTables
27726           * to simply return the object that has already been set up - it will not take
27727           * account of any changes you might have made to the initialisation object
27728           * passed to DataTables (setting this parameter to true is an acknowledgement
27729           * that you understand this). `destroy` can be used to reinitialise a table if
27730           * you need.
27731           *  @type boolean
27732           *  @default false
27733           *
27734           *  @dtopt Options
27735           *  @name DataTable.defaults.retrieve
27736           *
27737           *  @example
27738           *    $(document).ready( function() {
27739           *      initTable();
27740           *      tableActions();
27741           *    } );
27742           *
27743           *    function initTable ()
27744           *    {
27745           *      return $('#example').dataTable( {
27746           *        "scrollY": "200px",
27747           *        "paginate": false,
27748           *        "retrieve": true
27749           *      } );
27750           *    }
27751           *
27752           *    function tableActions ()
27753           *    {
27754           *      var table = initTable();
27755           *      // perform API operations with oTable
27756           *    }
27757           */
27758          "bRetrieve": false,
27759          /**
27760           * When vertical (y) scrolling is enabled, DataTables will force the height of
27761           * the table's viewport to the given height at all times (useful for layout).
27762           * However, this can look odd when filtering data down to a small data set,
27763           * and the footer is left "floating" further down. This parameter (when
27764           * enabled) will cause DataTables to collapse the table's viewport down when
27765           * the result set will fit within the given Y height.
27766           *  @type boolean
27767           *  @default false
27768           *
27769           *  @dtopt Options
27770           *  @name DataTable.defaults.scrollCollapse
27771           *
27772           *  @example
27773           *    $(document).ready( function() {
27774           *      $('#example').dataTable( {
27775           *        "scrollY": "200",
27776           *        "scrollCollapse": true
27777           *      } );
27778           *    } );
27779           */
27780          "bScrollCollapse": false,
27781          /**
27782           * Configure DataTables to use server-side processing. Note that the
27783           * `ajax` parameter must also be given in order to give DataTables a
27784           * source to obtain the required data for each draw.
27785           *  @type boolean
27786           *  @default false
27787           *
27788           *  @dtopt Features
27789           *  @dtopt Server-side
27790           *  @name DataTable.defaults.serverSide
27791           *
27792           *  @example
27793           *    $(document).ready( function () {
27794           *      $('#example').dataTable( {
27795           *        "serverSide": true,
27796           *        "ajax": "xhr.php"
27797           *      } );
27798           *    } );
27799           */
27800          "bServerSide": false,
27801          /**
27802           * Enable or disable sorting of columns. Sorting of individual columns can be
27803           * disabled by the `sortable` option for each column.
27804           *  @type boolean
27805           *  @default true
27806           *
27807           *  @dtopt Features
27808           *  @name DataTable.defaults.ordering
27809           *
27810           *  @example
27811           *    $(document).ready( function () {
27812           *      $('#example').dataTable( {
27813           *        "ordering": false
27814           *      } );
27815           *    } );
27816           */
27817          "bSort": true,
27818          /**
27819           * Enable or display DataTables' ability to sort multiple columns at the
27820           * same time (activated by shift-click by the user).
27821           *  @type boolean
27822           *  @default true
27823           *
27824           *  @dtopt Options
27825           *  @name DataTable.defaults.orderMulti
27826           *
27827           *  @example
27828           *    // Disable multiple column sorting ability
27829           *    $(document).ready( function () {
27830           *      $('#example').dataTable( {
27831           *        "orderMulti": false
27832           *      } );
27833           *    } );
27834           */
27835          "bSortMulti": true,
27836          /**
27837           * Allows control over whether DataTables should use the top (true) unique
27838           * cell that is found for a single column, or the bottom (false - default).
27839           * This is useful when using complex headers.
27840           *  @type boolean
27841           *  @default false
27842           *
27843           *  @dtopt Options
27844           *  @name DataTable.defaults.orderCellsTop
27845           *
27846           *  @example
27847           *    $(document).ready( function() {
27848           *      $('#example').dataTable( {
27849           *        "orderCellsTop": true
27850           *      } );
27851           *    } );
27852           */
27853          "bSortCellsTop": false,
27854          /**
27855           * Enable or disable the addition of the classes `sorting\_1`, `sorting\_2` and
27856           * `sorting\_3` to the columns which are currently being sorted on. This is
27857           * presented as a feature switch as it can increase processing time (while
27858           * classes are removed and added) so for large data sets you might want to
27859           * turn this off.
27860           *  @type boolean
27861           *  @default true
27862           *
27863           *  @dtopt Features
27864           *  @name DataTable.defaults.orderClasses
27865           *
27866           *  @example
27867           *    $(document).ready( function () {
27868           *      $('#example').dataTable( {
27869           *        "orderClasses": false
27870           *      } );
27871           *    } );
27872           */
27873          "bSortClasses": true,
27874          /**
27875           * Enable or disable state saving. When enabled HTML5 `localStorage` will be
27876           * used to save table display information such as pagination information,
27877           * display length, filtering and sorting. As such when the end user reloads
27878           * the page the display display will match what thy had previously set up.
27879           *
27880           * Due to the use of `localStorage` the default state saving is not supported
27881           * in IE6 or 7. If state saving is required in those browsers, use
27882           * `stateSaveCallback` to provide a storage solution such as cookies.
27883           *  @type boolean
27884           *  @default false
27885           *
27886           *  @dtopt Features
27887           *  @name DataTable.defaults.stateSave
27888           *
27889           *  @example
27890           *    $(document).ready( function () {
27891           *      $('#example').dataTable( {
27892           *        "stateSave": true
27893           *      } );
27894           *    } );
27895           */
27896          "bStateSave": false,
27897          /**
27898           * This function is called when a TR element is created (and all TD child
27899           * elements have been inserted), or registered if using a DOM source, allowing
27900           * manipulation of the TR element (adding classes etc).
27901           *  @type function
27902           *  @param {node} row "TR" element for the current row
27903           *  @param {array} data Raw data array for this row
27904           *  @param {int} dataIndex The index of this row in the internal aoData array
27905           *
27906           *  @dtopt Callbacks
27907           *  @name DataTable.defaults.createdRow
27908           *
27909           *  @example
27910           *    $(document).ready( function() {
27911           *      $('#example').dataTable( {
27912           *        "createdRow": function( row, data, dataIndex ) {
27913           *          // Bold the grade for all 'A' grade browsers
27914           *          if ( data[4] == "A" )
27915           *          {
27916           *            $('td:eq(4)', row).html( '<b>A</b>' );
27917           *          }
27918           *        }
27919           *      } );
27920           *    } );
27921           */
27922          "fnCreatedRow": null,
27923          /**
27924           * This function is called on every 'draw' event, and allows you to
27925           * dynamically modify any aspect you want about the created DOM.
27926           *  @type function
27927           *  @param {object} settings DataTables settings object
27928           *
27929           *  @dtopt Callbacks
27930           *  @name DataTable.defaults.drawCallback
27931           *
27932           *  @example
27933           *    $(document).ready( function() {
27934           *      $('#example').dataTable( {
27935           *        "drawCallback": function( settings ) {
27936           *          alert( 'DataTables has redrawn the table' );
27937           *        }
27938           *      } );
27939           *    } );
27940           */
27941          "fnDrawCallback": null,
27942          /**
27943           * Identical to fnHeaderCallback() but for the table footer this function
27944           * allows you to modify the table footer on every 'draw' event.
27945           *  @type function
27946           *  @param {node} foot "TR" element for the footer
27947           *  @param {array} data Full table data (as derived from the original HTML)
27948           *  @param {int} start Index for the current display starting point in the
27949           *    display array
27950           *  @param {int} end Index for the current display ending point in the
27951           *    display array
27952           *  @param {array int} display Index array to translate the visual position
27953           *    to the full data array
27954           *
27955           *  @dtopt Callbacks
27956           *  @name DataTable.defaults.footerCallback
27957           *
27958           *  @example
27959           *    $(document).ready( function() {
27960           *      $('#example').dataTable( {
27961           *        "footerCallback": function( tfoot, data, start, end, display ) {
27962           *          tfoot.getElementsByTagName('th')[0].innerHTML = "Starting index is "+start;
27963           *        }
27964           *      } );
27965           *    } )
27966           */
27967          "fnFooterCallback": null,
27968          /**
27969           * When rendering large numbers in the information element for the table
27970           * (i.e. "Showing 1 to 10 of 57 entries") DataTables will render large numbers
27971           * to have a comma separator for the 'thousands' units (e.g. 1 million is
27972           * rendered as "1,000,000") to help readability for the end user. This
27973           * function will override the default method DataTables uses.
27974           *  @type function
27975           *  @member
27976           *  @param {int} toFormat number to be formatted
27977           *  @returns {string} formatted string for DataTables to show the number
27978           *
27979           *  @dtopt Callbacks
27980           *  @name DataTable.defaults.formatNumber
27981           *
27982           *  @example
27983           *    // Format a number using a single quote for the separator (note that
27984           *    // this can also be done with the language.thousands option)
27985           *    $(document).ready( function() {
27986           *      $('#example').dataTable( {
27987           *        "formatNumber": function ( toFormat ) {
27988           *          return toFormat.toString().replace(
27989           *            /\B(?=(\d{3})+(?!\d))/g, "'"
27990           *          );
27991           *        };
27992           *      } );
27993           *    } );
27994           */
27995          "fnFormatNumber": function(toFormat) {
27996            return toFormat.toString().replace(
27997              /\B(?=(\d{3})+(?!\d))/g,
27998              this.oLanguage.sThousands
27999            );
28000          },
28001          /**
28002           * This function is called on every 'draw' event, and allows you to
28003           * dynamically modify the header row. This can be used to calculate and
28004           * display useful information about the table.
28005           *  @type function
28006           *  @param {node} head "TR" element for the header
28007           *  @param {array} data Full table data (as derived from the original HTML)
28008           *  @param {int} start Index for the current display starting point in the
28009           *    display array
28010           *  @param {int} end Index for the current display ending point in the
28011           *    display array
28012           *  @param {array int} display Index array to translate the visual position
28013           *    to the full data array
28014           *
28015           *  @dtopt Callbacks
28016           *  @name DataTable.defaults.headerCallback
28017           *
28018           *  @example
28019           *    $(document).ready( function() {
28020           *      $('#example').dataTable( {
28021           *        "fheaderCallback": function( head, data, start, end, display ) {
28022           *          head.getElementsByTagName('th')[0].innerHTML = "Displaying "+(end-start)+" records";
28023           *        }
28024           *      } );
28025           *    } )
28026           */
28027          "fnHeaderCallback": null,
28028          /**
28029           * The information element can be used to convey information about the current
28030           * state of the table. Although the internationalisation options presented by
28031           * DataTables are quite capable of dealing with most customisations, there may
28032           * be times where you wish to customise the string further. This callback
28033           * allows you to do exactly that.
28034           *  @type function
28035           *  @param {object} oSettings DataTables settings object
28036           *  @param {int} start Starting position in data for the draw
28037           *  @param {int} end End position in data for the draw
28038           *  @param {int} max Total number of rows in the table (regardless of
28039           *    filtering)
28040           *  @param {int} total Total number of rows in the data set, after filtering
28041           *  @param {string} pre The string that DataTables has formatted using it's
28042           *    own rules
28043           *  @returns {string} The string to be displayed in the information element.
28044           *
28045           *  @dtopt Callbacks
28046           *  @name DataTable.defaults.infoCallback
28047           *
28048           *  @example
28049           *    $('#example').dataTable( {
28050           *      "infoCallback": function( settings, start, end, max, total, pre ) {
28051           *        return start +" to "+ end;
28052           *      }
28053           *    } );
28054           */
28055          "fnInfoCallback": null,
28056          /**
28057           * Called when the table has been initialised. Normally DataTables will
28058           * initialise sequentially and there will be no need for this function,
28059           * however, this does not hold true when using external language information
28060           * since that is obtained using an async XHR call.
28061           *  @type function
28062           *  @param {object} settings DataTables settings object
28063           *  @param {object} json The JSON object request from the server - only
28064           *    present if client-side Ajax sourced data is used
28065           *
28066           *  @dtopt Callbacks
28067           *  @name DataTable.defaults.initComplete
28068           *
28069           *  @example
28070           *    $(document).ready( function() {
28071           *      $('#example').dataTable( {
28072           *        "initComplete": function(settings, json) {
28073           *          alert( 'DataTables has finished its initialisation.' );
28074           *        }
28075           *      } );
28076           *    } )
28077           */
28078          "fnInitComplete": null,
28079          /**
28080           * Called at the very start of each table draw and can be used to cancel the
28081           * draw by returning false, any other return (including undefined) results in
28082           * the full draw occurring).
28083           *  @type function
28084           *  @param {object} settings DataTables settings object
28085           *  @returns {boolean} False will cancel the draw, anything else (including no
28086           *    return) will allow it to complete.
28087           *
28088           *  @dtopt Callbacks
28089           *  @name DataTable.defaults.preDrawCallback
28090           *
28091           *  @example
28092           *    $(document).ready( function() {
28093           *      $('#example').dataTable( {
28094           *        "preDrawCallback": function( settings ) {
28095           *          if ( $('#test').val() == 1 ) {
28096           *            return false;
28097           *          }
28098           *        }
28099           *      } );
28100           *    } );
28101           */
28102          "fnPreDrawCallback": null,
28103          /**
28104           * This function allows you to 'post process' each row after it have been
28105           * generated for each table draw, but before it is rendered on screen. This
28106           * function might be used for setting the row class name etc.
28107           *  @type function
28108           *  @param {node} row "TR" element for the current row
28109           *  @param {array} data Raw data array for this row
28110           *  @param {int} displayIndex The display index for the current table draw
28111           *  @param {int} displayIndexFull The index of the data in the full list of
28112           *    rows (after filtering)
28113           *
28114           *  @dtopt Callbacks
28115           *  @name DataTable.defaults.rowCallback
28116           *
28117           *  @example
28118           *    $(document).ready( function() {
28119           *      $('#example').dataTable( {
28120           *        "rowCallback": function( row, data, displayIndex, displayIndexFull ) {
28121           *          // Bold the grade for all 'A' grade browsers
28122           *          if ( data[4] == "A" ) {
28123           *            $('td:eq(4)', row).html( '<b>A</b>' );
28124           *          }
28125           *        }
28126           *      } );
28127           *    } );
28128           */
28129          "fnRowCallback": null,
28130          /**
28131           * __Deprecated__ The functionality provided by this parameter has now been
28132           * superseded by that provided through `ajax`, which should be used instead.
28133           *
28134           * This parameter allows you to override the default function which obtains
28135           * the data from the server so something more suitable for your application.
28136           * For example you could use POST data, or pull information from a Gears or
28137           * AIR database.
28138           *  @type function
28139           *  @member
28140           *  @param {string} source HTTP source to obtain the data from (`ajax`)
28141           *  @param {array} data A key/value pair object containing the data to send
28142           *    to the server
28143           *  @param {function} callback to be called on completion of the data get
28144           *    process that will draw the data on the page.
28145           *  @param {object} settings DataTables settings object
28146           *
28147           *  @dtopt Callbacks
28148           *  @dtopt Server-side
28149           *  @name DataTable.defaults.serverData
28150           *
28151           *  @deprecated 1.10. Please use `ajax` for this functionality now.
28152           */
28153          "fnServerData": null,
28154          /**
28155           * __Deprecated__ The functionality provided by this parameter has now been
28156           * superseded by that provided through `ajax`, which should be used instead.
28157           *
28158           *  It is often useful to send extra data to the server when making an Ajax
28159           * request - for example custom filtering information, and this callback
28160           * function makes it trivial to send extra information to the server. The
28161           * passed in parameter is the data set that has been constructed by
28162           * DataTables, and you can add to this or modify it as you require.
28163           *  @type function
28164           *  @param {array} data Data array (array of objects which are name/value
28165           *    pairs) that has been constructed by DataTables and will be sent to the
28166           *    server. In the case of Ajax sourced data with server-side processing
28167           *    this will be an empty array, for server-side processing there will be a
28168           *    significant number of parameters!
28169           *  @returns {undefined} Ensure that you modify the data array passed in,
28170           *    as this is passed by reference.
28171           *
28172           *  @dtopt Callbacks
28173           *  @dtopt Server-side
28174           *  @name DataTable.defaults.serverParams
28175           *
28176           *  @deprecated 1.10. Please use `ajax` for this functionality now.
28177           */
28178          "fnServerParams": null,
28179          /**
28180           * Load the table state. With this function you can define from where, and how, the
28181           * state of a table is loaded. By default DataTables will load from `localStorage`
28182           * but you might wish to use a server-side database or cookies.
28183           *  @type function
28184           *  @member
28185           *  @param {object} settings DataTables settings object
28186           *  @param {object} callback Callback that can be executed when done. It
28187           *    should be passed the loaded state object.
28188           *  @return {object} The DataTables state object to be loaded
28189           *
28190           *  @dtopt Callbacks
28191           *  @name DataTable.defaults.stateLoadCallback
28192           *
28193           *  @example
28194           *    $(document).ready( function() {
28195           *      $('#example').dataTable( {
28196           *        "stateSave": true,
28197           *        "stateLoadCallback": function (settings, callback) {
28198           *          $.ajax( {
28199           *            "url": "/state_load",
28200           *            "dataType": "json",
28201           *            "success": function (json) {
28202           *              callback( json );
28203           *            }
28204           *          } );
28205           *        }
28206           *      } );
28207           *    } );
28208           */
28209          "fnStateLoadCallback": function(settings) {
28210            try {
28211              return JSON.parse(
28212                (settings.iStateDuration === -1 ? sessionStorage : localStorage).getItem(
28213                  "DataTables_" + settings.sInstance + "_" + location.pathname
28214                )
28215              );
28216            } catch (e) {
28217              return {};
28218            }
28219          },
28220          /**
28221           * Callback which allows modification of the saved state prior to loading that state.
28222           * This callback is called when the table is loading state from the stored data, but
28223           * prior to the settings object being modified by the saved state. Note that for
28224           * plug-in authors, you should use the `stateLoadParams` event to load parameters for
28225           * a plug-in.
28226           *  @type function
28227           *  @param {object} settings DataTables settings object
28228           *  @param {object} data The state object that is to be loaded
28229           *
28230           *  @dtopt Callbacks
28231           *  @name DataTable.defaults.stateLoadParams
28232           *
28233           *  @example
28234           *    // Remove a saved filter, so filtering is never loaded
28235           *    $(document).ready( function() {
28236           *      $('#example').dataTable( {
28237           *        "stateSave": true,
28238           *        "stateLoadParams": function (settings, data) {
28239           *          data.oSearch.sSearch = "";
28240           *        }
28241           *      } );
28242           *    } );
28243           *
28244           *  @example
28245           *    // Disallow state loading by returning false
28246           *    $(document).ready( function() {
28247           *      $('#example').dataTable( {
28248           *        "stateSave": true,
28249           *        "stateLoadParams": function (settings, data) {
28250           *          return false;
28251           *        }
28252           *      } );
28253           *    } );
28254           */
28255          "fnStateLoadParams": null,
28256          /**
28257           * Callback that is called when the state has been loaded from the state saving method
28258           * and the DataTables settings object has been modified as a result of the loaded state.
28259           *  @type function
28260           *  @param {object} settings DataTables settings object
28261           *  @param {object} data The state object that was loaded
28262           *
28263           *  @dtopt Callbacks
28264           *  @name DataTable.defaults.stateLoaded
28265           *
28266           *  @example
28267           *    // Show an alert with the filtering value that was saved
28268           *    $(document).ready( function() {
28269           *      $('#example').dataTable( {
28270           *        "stateSave": true,
28271           *        "stateLoaded": function (settings, data) {
28272           *          alert( 'Saved filter was: '+data.oSearch.sSearch );
28273           *        }
28274           *      } );
28275           *    } );
28276           */
28277          "fnStateLoaded": null,
28278          /**
28279           * Save the table state. This function allows you to define where and how the state
28280           * information for the table is stored By default DataTables will use `localStorage`
28281           * but you might wish to use a server-side database or cookies.
28282           *  @type function
28283           *  @member
28284           *  @param {object} settings DataTables settings object
28285           *  @param {object} data The state object to be saved
28286           *
28287           *  @dtopt Callbacks
28288           *  @name DataTable.defaults.stateSaveCallback
28289           *
28290           *  @example
28291           *    $(document).ready( function() {
28292           *      $('#example').dataTable( {
28293           *        "stateSave": true,
28294           *        "stateSaveCallback": function (settings, data) {
28295           *          // Send an Ajax request to the server with the state object
28296           *          $.ajax( {
28297           *            "url": "/state_save",
28298           *            "data": data,
28299           *            "dataType": "json",
28300           *            "method": "POST"
28301           *            "success": function () {}
28302           *          } );
28303           *        }
28304           *      } );
28305           *    } );
28306           */
28307          "fnStateSaveCallback": function(settings, data) {
28308            try {
28309              (settings.iStateDuration === -1 ? sessionStorage : localStorage).setItem(
28310                "DataTables_" + settings.sInstance + "_" + location.pathname,
28311                JSON.stringify(data)
28312              );
28313            } catch (e) {
28314            }
28315          },
28316          /**
28317           * Callback which allows modification of the state to be saved. Called when the table
28318           * has changed state a new state save is required. This method allows modification of
28319           * the state saving object prior to actually doing the save, including addition or
28320           * other state properties or modification. Note that for plug-in authors, you should
28321           * use the `stateSaveParams` event to save parameters for a plug-in.
28322           *  @type function
28323           *  @param {object} settings DataTables settings object
28324           *  @param {object} data The state object to be saved
28325           *
28326           *  @dtopt Callbacks
28327           *  @name DataTable.defaults.stateSaveParams
28328           *
28329           *  @example
28330           *    // Remove a saved filter, so filtering is never saved
28331           *    $(document).ready( function() {
28332           *      $('#example').dataTable( {
28333           *        "stateSave": true,
28334           *        "stateSaveParams": function (settings, data) {
28335           *          data.oSearch.sSearch = "";
28336           *        }
28337           *      } );
28338           *    } );
28339           */
28340          "fnStateSaveParams": null,
28341          /**
28342           * Duration for which the saved state information is considered valid. After this period
28343           * has elapsed the state will be returned to the default.
28344           * Value is given in seconds.
28345           *  @type int
28346           *  @default 7200 <i>(2 hours)</i>
28347           *
28348           *  @dtopt Options
28349           *  @name DataTable.defaults.stateDuration
28350           *
28351           *  @example
28352           *    $(document).ready( function() {
28353           *      $('#example').dataTable( {
28354           *        "stateDuration": 60*60*24; // 1 day
28355           *      } );
28356           *    } )
28357           */
28358          "iStateDuration": 7200,
28359          /**
28360           * When enabled DataTables will not make a request to the server for the first
28361           * page draw - rather it will use the data already on the page (no sorting etc
28362           * will be applied to it), thus saving on an XHR at load time. `deferLoading`
28363           * is used to indicate that deferred loading is required, but it is also used
28364           * to tell DataTables how many records there are in the full table (allowing
28365           * the information element and pagination to be displayed correctly). In the case
28366           * where a filtering is applied to the table on initial load, this can be
28367           * indicated by giving the parameter as an array, where the first element is
28368           * the number of records available after filtering and the second element is the
28369           * number of records without filtering (allowing the table information element
28370           * to be shown correctly).
28371           *  @type int | array
28372           *  @default null
28373           *
28374           *  @dtopt Options
28375           *  @name DataTable.defaults.deferLoading
28376           *
28377           *  @example
28378           *    // 57 records available in the table, no filtering applied
28379           *    $(document).ready( function() {
28380           *      $('#example').dataTable( {
28381           *        "serverSide": true,
28382           *        "ajax": "scripts/server_processing.php",
28383           *        "deferLoading": 57
28384           *      } );
28385           *    } );
28386           *
28387           *  @example
28388           *    // 57 records after filtering, 100 without filtering (an initial filter applied)
28389           *    $(document).ready( function() {
28390           *      $('#example').dataTable( {
28391           *        "serverSide": true,
28392           *        "ajax": "scripts/server_processing.php",
28393           *        "deferLoading": [ 57, 100 ],
28394           *        "search": {
28395           *          "search": "my_filter"
28396           *        }
28397           *      } );
28398           *    } );
28399           */
28400          "iDeferLoading": null,
28401          /**
28402           * Number of rows to display on a single page when using pagination. If
28403           * feature enabled (`lengthChange`) then the end user will be able to override
28404           * this to a custom setting using a pop-up menu.
28405           *  @type int
28406           *  @default 10
28407           *
28408           *  @dtopt Options
28409           *  @name DataTable.defaults.pageLength
28410           *
28411           *  @example
28412           *    $(document).ready( function() {
28413           *      $('#example').dataTable( {
28414           *        "pageLength": 50
28415           *      } );
28416           *    } )
28417           */
28418          "iDisplayLength": 10,
28419          /**
28420           * Define the starting point for data display when using DataTables with
28421           * pagination. Note that this parameter is the number of records, rather than
28422           * the page number, so if you have 10 records per page and want to start on
28423           * the third page, it should be "20".
28424           *  @type int
28425           *  @default 0
28426           *
28427           *  @dtopt Options
28428           *  @name DataTable.defaults.displayStart
28429           *
28430           *  @example
28431           *    $(document).ready( function() {
28432           *      $('#example').dataTable( {
28433           *        "displayStart": 20
28434           *      } );
28435           *    } )
28436           */
28437          "iDisplayStart": 0,
28438          /**
28439           * By default DataTables allows keyboard navigation of the table (sorting, paging,
28440           * and filtering) by adding a `tabindex` attribute to the required elements. This
28441           * allows you to tab through the controls and press the enter key to activate them.
28442           * The tabindex is default 0, meaning that the tab follows the flow of the document.
28443           * You can overrule this using this parameter if you wish. Use a value of -1 to
28444           * disable built-in keyboard navigation.
28445           *  @type int
28446           *  @default 0
28447           *
28448           *  @dtopt Options
28449           *  @name DataTable.defaults.tabIndex
28450           *
28451           *  @example
28452           *    $(document).ready( function() {
28453           *      $('#example').dataTable( {
28454           *        "tabIndex": 1
28455           *      } );
28456           *    } );
28457           */
28458          "iTabIndex": 0,
28459          /**
28460           * Classes that DataTables assigns to the various components and features
28461           * that it adds to the HTML table. This allows classes to be configured
28462           * during initialisation in addition to through the static
28463           * {@link DataTable.ext.oStdClasses} object).
28464           *  @namespace
28465           *  @name DataTable.defaults.classes
28466           */
28467          "oClasses": {},
28468          /**
28469           * All strings that DataTables uses in the user interface that it creates
28470           * are defined in this object, allowing you to modified them individually or
28471           * completely replace them all as required.
28472           *  @namespace
28473           *  @name DataTable.defaults.language
28474           */
28475          "oLanguage": {
28476            /**
28477             * Strings that are used for WAI-ARIA labels and controls only (these are not
28478             * actually visible on the page, but will be read by screenreaders, and thus
28479             * must be internationalised as well).
28480             *  @namespace
28481             *  @name DataTable.defaults.language.aria
28482             */
28483            "oAria": {
28484              /**
28485               * ARIA label that is added to the table headers when the column may be
28486               * sorted ascending by activing the column (click or return when focused).
28487               * Note that the column header is prefixed to this string.
28488               *  @type string
28489               *  @default : activate to sort column ascending
28490               *
28491               *  @dtopt Language
28492               *  @name DataTable.defaults.language.aria.sortAscending
28493               *
28494               *  @example
28495               *    $(document).ready( function() {
28496               *      $('#example').dataTable( {
28497               *        "language": {
28498               *          "aria": {
28499               *            "sortAscending": " - click/return to sort ascending"
28500               *          }
28501               *        }
28502               *      } );
28503               *    } );
28504               */
28505              "sSortAscending": ": activate to sort column ascending",
28506              /**
28507               * ARIA label that is added to the table headers when the column may be
28508               * sorted descending by activing the column (click or return when focused).
28509               * Note that the column header is prefixed to this string.
28510               *  @type string
28511               *  @default : activate to sort column ascending
28512               *
28513               *  @dtopt Language
28514               *  @name DataTable.defaults.language.aria.sortDescending
28515               *
28516               *  @example
28517               *    $(document).ready( function() {
28518               *      $('#example').dataTable( {
28519               *        "language": {
28520               *          "aria": {
28521               *            "sortDescending": " - click/return to sort descending"
28522               *          }
28523               *        }
28524               *      } );
28525               *    } );
28526               */
28527              "sSortDescending": ": activate to sort column descending"
28528            },
28529            /**
28530             * Pagination string used by DataTables for the built-in pagination
28531             * control types.
28532             *  @namespace
28533             *  @name DataTable.defaults.language.paginate
28534             */
28535            "oPaginate": {
28536              /**
28537               * Text to use when using the 'full_numbers' type of pagination for the
28538               * button to take the user to the first page.
28539               *  @type string
28540               *  @default First
28541               *
28542               *  @dtopt Language
28543               *  @name DataTable.defaults.language.paginate.first
28544               *
28545               *  @example
28546               *    $(document).ready( function() {
28547               *      $('#example').dataTable( {
28548               *        "language": {
28549               *          "paginate": {
28550               *            "first": "First page"
28551               *          }
28552               *        }
28553               *      } );
28554               *    } );
28555               */
28556              "sFirst": "First",
28557              /**
28558               * Text to use when using the 'full_numbers' type of pagination for the
28559               * button to take the user to the last page.
28560               *  @type string
28561               *  @default Last
28562               *
28563               *  @dtopt Language
28564               *  @name DataTable.defaults.language.paginate.last
28565               *
28566               *  @example
28567               *    $(document).ready( function() {
28568               *      $('#example').dataTable( {
28569               *        "language": {
28570               *          "paginate": {
28571               *            "last": "Last page"
28572               *          }
28573               *        }
28574               *      } );
28575               *    } );
28576               */
28577              "sLast": "Last",
28578              /**
28579               * Text to use for the 'next' pagination button (to take the user to the
28580               * next page).
28581               *  @type string
28582               *  @default Next
28583               *
28584               *  @dtopt Language
28585               *  @name DataTable.defaults.language.paginate.next
28586               *
28587               *  @example
28588               *    $(document).ready( function() {
28589               *      $('#example').dataTable( {
28590               *        "language": {
28591               *          "paginate": {
28592               *            "next": "Next page"
28593               *          }
28594               *        }
28595               *      } );
28596               *    } );
28597               */
28598              "sNext": "Next",
28599              /**
28600               * Text to use for the 'previous' pagination button (to take the user to
28601               * the previous page).
28602               *  @type string
28603               *  @default Previous
28604               *
28605               *  @dtopt Language
28606               *  @name DataTable.defaults.language.paginate.previous
28607               *
28608               *  @example
28609               *    $(document).ready( function() {
28610               *      $('#example').dataTable( {
28611               *        "language": {
28612               *          "paginate": {
28613               *            "previous": "Previous page"
28614               *          }
28615               *        }
28616               *      } );
28617               *    } );
28618               */
28619              "sPrevious": "Previous"
28620            },
28621            /**
28622             * This string is shown in preference to `zeroRecords` when the table is
28623             * empty of data (regardless of filtering). Note that this is an optional
28624             * parameter - if it is not given, the value of `zeroRecords` will be used
28625             * instead (either the default or given value).
28626             *  @type string
28627             *  @default No data available in table
28628             *
28629             *  @dtopt Language
28630             *  @name DataTable.defaults.language.emptyTable
28631             *
28632             *  @example
28633             *    $(document).ready( function() {
28634             *      $('#example').dataTable( {
28635             *        "language": {
28636             *          "emptyTable": "No data available in table"
28637             *        }
28638             *      } );
28639             *    } );
28640             */
28641            "sEmptyTable": "No data available in table",
28642            /**
28643             * This string gives information to the end user about the information
28644             * that is current on display on the page. The following tokens can be
28645             * used in the string and will be dynamically replaced as the table
28646             * display updates. This tokens can be placed anywhere in the string, or
28647             * removed as needed by the language requires:
28648             *
28649             * * `\_START\_` - Display index of the first record on the current page
28650             * * `\_END\_` - Display index of the last record on the current page
28651             * * `\_TOTAL\_` - Number of records in the table after filtering
28652             * * `\_MAX\_` - Number of records in the table without filtering
28653             * * `\_PAGE\_` - Current page number
28654             * * `\_PAGES\_` - Total number of pages of data in the table
28655             *
28656             *  @type string
28657             *  @default Showing _START_ to _END_ of _TOTAL_ entries
28658             *
28659             *  @dtopt Language
28660             *  @name DataTable.defaults.language.info
28661             *
28662             *  @example
28663             *    $(document).ready( function() {
28664             *      $('#example').dataTable( {
28665             *        "language": {
28666             *          "info": "Showing page _PAGE_ of _PAGES_"
28667             *        }
28668             *      } );
28669             *    } );
28670             */
28671            "sInfo": "Showing _START_ to _END_ of _TOTAL_ entries",
28672            /**
28673             * Display information string for when the table is empty. Typically the
28674             * format of this string should match `info`.
28675             *  @type string
28676             *  @default Showing 0 to 0 of 0 entries
28677             *
28678             *  @dtopt Language
28679             *  @name DataTable.defaults.language.infoEmpty
28680             *
28681             *  @example
28682             *    $(document).ready( function() {
28683             *      $('#example').dataTable( {
28684             *        "language": {
28685             *          "infoEmpty": "No entries to show"
28686             *        }
28687             *      } );
28688             *    } );
28689             */
28690            "sInfoEmpty": "Showing 0 to 0 of 0 entries",
28691            /**
28692             * When a user filters the information in a table, this string is appended
28693             * to the information (`info`) to give an idea of how strong the filtering
28694             * is. The variable _MAX_ is dynamically updated.
28695             *  @type string
28696             *  @default (filtered from _MAX_ total entries)
28697             *
28698             *  @dtopt Language
28699             *  @name DataTable.defaults.language.infoFiltered
28700             *
28701             *  @example
28702             *    $(document).ready( function() {
28703             *      $('#example').dataTable( {
28704             *        "language": {
28705             *          "infoFiltered": " - filtering from _MAX_ records"
28706             *        }
28707             *      } );
28708             *    } );
28709             */
28710            "sInfoFiltered": "(filtered from _MAX_ total entries)",
28711            /**
28712             * If can be useful to append extra information to the info string at times,
28713             * and this variable does exactly that. This information will be appended to
28714             * the `info` (`infoEmpty` and `infoFiltered` in whatever combination they are
28715             * being used) at all times.
28716             *  @type string
28717             *  @default <i>Empty string</i>
28718             *
28719             *  @dtopt Language
28720             *  @name DataTable.defaults.language.infoPostFix
28721             *
28722             *  @example
28723             *    $(document).ready( function() {
28724             *      $('#example').dataTable( {
28725             *        "language": {
28726             *          "infoPostFix": "All records shown are derived from real information."
28727             *        }
28728             *      } );
28729             *    } );
28730             */
28731            "sInfoPostFix": "",
28732            /**
28733             * This decimal place operator is a little different from the other
28734             * language options since DataTables doesn't output floating point
28735             * numbers, so it won't ever use this for display of a number. Rather,
28736             * what this parameter does is modify the sort methods of the table so
28737             * that numbers which are in a format which has a character other than
28738             * a period (`.`) as a decimal place will be sorted numerically.
28739             *
28740             * Note that numbers with different decimal places cannot be shown in
28741             * the same table and still be sortable, the table must be consistent.
28742             * However, multiple different tables on the page can use different
28743             * decimal place characters.
28744             *  @type string
28745             *  @default 
28746             *
28747             *  @dtopt Language
28748             *  @name DataTable.defaults.language.decimal
28749             *
28750             *  @example
28751             *    $(document).ready( function() {
28752             *      $('#example').dataTable( {
28753             *        "language": {
28754             *          "decimal": ","
28755             *          "thousands": "."
28756             *        }
28757             *      } );
28758             *    } );
28759             */
28760            "sDecimal": "",
28761            /**
28762             * DataTables has a build in number formatter (`formatNumber`) which is
28763             * used to format large numbers that are used in the table information.
28764             * By default a comma is used, but this can be trivially changed to any
28765             * character you wish with this parameter.
28766             *  @type string
28767             *  @default ,
28768             *
28769             *  @dtopt Language
28770             *  @name DataTable.defaults.language.thousands
28771             *
28772             *  @example
28773             *    $(document).ready( function() {
28774             *      $('#example').dataTable( {
28775             *        "language": {
28776             *          "thousands": "'"
28777             *        }
28778             *      } );
28779             *    } );
28780             */
28781            "sThousands": ",",
28782            /**
28783             * Detail the action that will be taken when the drop down menu for the
28784             * pagination length option is changed. The '_MENU_' variable is replaced
28785             * with a default select list of 10, 25, 50 and 100, and can be replaced
28786             * with a custom select box if required.
28787             *  @type string
28788             *  @default Show _MENU_ entries
28789             *
28790             *  @dtopt Language
28791             *  @name DataTable.defaults.language.lengthMenu
28792             *
28793             *  @example
28794             *    // Language change only
28795             *    $(document).ready( function() {
28796             *      $('#example').dataTable( {
28797             *        "language": {
28798             *          "lengthMenu": "Display _MENU_ records"
28799             *        }
28800             *      } );
28801             *    } );
28802             *
28803             *  @example
28804             *    // Language and options change
28805             *    $(document).ready( function() {
28806             *      $('#example').dataTable( {
28807             *        "language": {
28808             *          "lengthMenu": 'Display <select>'+
28809             *            '<option value="10">10</option>'+
28810             *            '<option value="20">20</option>'+
28811             *            '<option value="30">30</option>'+
28812             *            '<option value="40">40</option>'+
28813             *            '<option value="50">50</option>'+
28814             *            '<option value="-1">All</option>'+
28815             *            '</select> records'
28816             *        }
28817             *      } );
28818             *    } );
28819             */
28820            "sLengthMenu": "Show _MENU_ entries",
28821            /**
28822             * When using Ajax sourced data and during the first draw when DataTables is
28823             * gathering the data, this message is shown in an empty row in the table to
28824             * indicate to the end user the the data is being loaded. Note that this
28825             * parameter is not used when loading data by server-side processing, just
28826             * Ajax sourced data with client-side processing.
28827             *  @type string
28828             *  @default Loading...
28829             *
28830             *  @dtopt Language
28831             *  @name DataTable.defaults.language.loadingRecords
28832             *
28833             *  @example
28834             *    $(document).ready( function() {
28835             *      $('#example').dataTable( {
28836             *        "language": {
28837             *          "loadingRecords": "Please wait - loading..."
28838             *        }
28839             *      } );
28840             *    } );
28841             */
28842            "sLoadingRecords": "Loading...",
28843            /**
28844             * Text which is displayed when the table is processing a user action
28845             * (usually a sort command or similar).
28846             *  @type string
28847             *
28848             *  @dtopt Language
28849             *  @name DataTable.defaults.language.processing
28850             *
28851             *  @example
28852             *    $(document).ready( function() {
28853             *      $('#example').dataTable( {
28854             *        "language": {
28855             *          "processing": "DataTables is currently busy"
28856             *        }
28857             *      } );
28858             *    } );
28859             */
28860            "sProcessing": "",
28861            /**
28862             * Details the actions that will be taken when the user types into the
28863             * filtering input text box. The variable "_INPUT_", if used in the string,
28864             * is replaced with the HTML text box for the filtering input allowing
28865             * control over where it appears in the string. If "_INPUT_" is not given
28866             * then the input box is appended to the string automatically.
28867             *  @type string
28868             *  @default Search:
28869             *
28870             *  @dtopt Language
28871             *  @name DataTable.defaults.language.search
28872             *
28873             *  @example
28874             *    // Input text box will be appended at the end automatically
28875             *    $(document).ready( function() {
28876             *      $('#example').dataTable( {
28877             *        "language": {
28878             *          "search": "Filter records:"
28879             *        }
28880             *      } );
28881             *    } );
28882             *
28883             *  @example
28884             *    // Specify where the filter should appear
28885             *    $(document).ready( function() {
28886             *      $('#example').dataTable( {
28887             *        "language": {
28888             *          "search": "Apply filter _INPUT_ to table"
28889             *        }
28890             *      } );
28891             *    } );
28892             */
28893            "sSearch": "Search:",
28894            /**
28895             * Assign a `placeholder` attribute to the search `input` element
28896             *  @type string
28897             *  @default 
28898             *
28899             *  @dtopt Language
28900             *  @name DataTable.defaults.language.searchPlaceholder
28901             */
28902            "sSearchPlaceholder": "",
28903            /**
28904             * All of the language information can be stored in a file on the
28905             * server-side, which DataTables will look up if this parameter is passed.
28906             * It must store the URL of the language file, which is in a JSON format,
28907             * and the object has the same properties as the oLanguage object in the
28908             * initialiser object (i.e. the above parameters). Please refer to one of
28909             * the example language files to see how this works in action.
28910             *  @type string
28911             *  @default <i>Empty string - i.e. disabled</i>
28912             *
28913             *  @dtopt Language
28914             *  @name DataTable.defaults.language.url
28915             *
28916             *  @example
28917             *    $(document).ready( function() {
28918             *      $('#example').dataTable( {
28919             *        "language": {
28920             *          "url": "https://www.sprymedia.co.uk/dataTables/lang.txt"
28921             *        }
28922             *      } );
28923             *    } );
28924             */
28925            "sUrl": "",
28926            /**
28927             * Text shown inside the table records when the is no information to be
28928             * displayed after filtering. `emptyTable` is shown when there is simply no
28929             * information in the table at all (regardless of filtering).
28930             *  @type string
28931             *  @default No matching records found
28932             *
28933             *  @dtopt Language
28934             *  @name DataTable.defaults.language.zeroRecords
28935             *
28936             *  @example
28937             *    $(document).ready( function() {
28938             *      $('#example').dataTable( {
28939             *        "language": {
28940             *          "zeroRecords": "No records to display"
28941             *        }
28942             *      } );
28943             *    } );
28944             */
28945            "sZeroRecords": "No matching records found"
28946          },
28947          /**
28948           * This parameter allows you to have define the global filtering state at
28949           * initialisation time. As an object the `search` parameter must be
28950           * defined, but all other parameters are optional. When `regex` is true,
28951           * the search string will be treated as a regular expression, when false
28952           * (default) it will be treated as a straight string. When `smart`
28953           * DataTables will use it's smart filtering methods (to word match at
28954           * any point in the data), when false this will not be done.
28955           *  @namespace
28956           *  @extends DataTable.models.oSearch
28957           *
28958           *  @dtopt Options
28959           *  @name DataTable.defaults.search
28960           *
28961           *  @example
28962           *    $(document).ready( function() {
28963           *      $('#example').dataTable( {
28964           *        "search": {"search": "Initial search"}
28965           *      } );
28966           *    } )
28967           */
28968          "oSearch": $3.extend({}, DataTable2.models.oSearch),
28969          /**
28970           * __Deprecated__ The functionality provided by this parameter has now been
28971           * superseded by that provided through `ajax`, which should be used instead.
28972           *
28973           * By default DataTables will look for the property `data` (or `aaData` for
28974           * compatibility with DataTables 1.9-) when obtaining data from an Ajax
28975           * source or for server-side processing - this parameter allows that
28976           * property to be changed. You can use Javascript dotted object notation to
28977           * get a data source for multiple levels of nesting.
28978           *  @type string
28979           *  @default data
28980           *
28981           *  @dtopt Options
28982           *  @dtopt Server-side
28983           *  @name DataTable.defaults.ajaxDataProp
28984           *
28985           *  @deprecated 1.10. Please use `ajax` for this functionality now.
28986           */
28987          "sAjaxDataProp": "data",
28988          /**
28989           * __Deprecated__ The functionality provided by this parameter has now been
28990           * superseded by that provided through `ajax`, which should be used instead.
28991           *
28992           * You can instruct DataTables to load data from an external
28993           * source using this parameter (use aData if you want to pass data in you
28994           * already have). Simply provide a url a JSON object can be obtained from.
28995           *  @type string
28996           *  @default null
28997           *
28998           *  @dtopt Options
28999           *  @dtopt Server-side
29000           *  @name DataTable.defaults.ajaxSource
29001           *
29002           *  @deprecated 1.10. Please use `ajax` for this functionality now.
29003           */
29004          "sAjaxSource": null,
29005          /**
29006           * This initialisation variable allows you to specify exactly where in the
29007           * DOM you want DataTables to inject the various controls it adds to the page
29008           * (for example you might want the pagination controls at the top of the
29009           * table). DIV elements (with or without a custom class) can also be added to
29010           * aid styling. The follow syntax is used:
29011           *   <ul>
29012           *     <li>The following options are allowed:
29013           *       <ul>
29014           *         <li>'l' - Length changing</li>
29015           *         <li>'f' - Filtering input</li>
29016           *         <li>'t' - The table!</li>
29017           *         <li>'i' - Information</li>
29018           *         <li>'p' - Pagination</li>
29019           *         <li>'r' - pRocessing</li>
29020           *       </ul>
29021           *     </li>
29022           *     <li>The following constants are allowed:
29023           *       <ul>
29024           *         <li>'H' - jQueryUI theme "header" classes ('fg-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix')</li>
29025           *         <li>'F' - jQueryUI theme "footer" classes ('fg-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix')</li>
29026           *       </ul>
29027           *     </li>
29028           *     <li>The following syntax is expected:
29029           *       <ul>
29030           *         <li>'&lt;' and '&gt;' - div elements</li>
29031           *         <li>'&lt;"class" and '&gt;' - div with a class</li>
29032           *         <li>'&lt;"#id" and '&gt;' - div with an ID</li>
29033           *       </ul>
29034           *     </li>
29035           *     <li>Examples:
29036           *       <ul>
29037           *         <li>'&lt;"wrapper"flipt&gt;'</li>
29038           *         <li>'&lt;lf&lt;t&gt;ip&gt;'</li>
29039           *       </ul>
29040           *     </li>
29041           *   </ul>
29042           *  @type string
29043           *  @default lfrtip <i>(when `jQueryUI` is false)</i> <b>or</b>
29044           *    <"H"lfr>t<"F"ip> <i>(when `jQueryUI` is true)</i>
29045           *
29046           *  @dtopt Options
29047           *  @name DataTable.defaults.dom
29048           *
29049           *  @example
29050           *    $(document).ready( function() {
29051           *      $('#example').dataTable( {
29052           *        "dom": '&lt;"top"i&gt;rt&lt;"bottom"flp&gt;&lt;"clear"&gt;'
29053           *      } );
29054           *    } );
29055           */
29056          "sDom": "lfrtip",
29057          /**
29058           * Search delay option. This will throttle full table searches that use the
29059           * DataTables provided search input element (it does not effect calls to
29060           * `dt-api search()`, providing a delay before the search is made.
29061           *  @type integer
29062           *  @default 0
29063           *
29064           *  @dtopt Options
29065           *  @name DataTable.defaults.searchDelay
29066           *
29067           *  @example
29068           *    $(document).ready( function() {
29069           *      $('#example').dataTable( {
29070           *        "searchDelay": 200
29071           *      } );
29072           *    } )
29073           */
29074          "searchDelay": null,
29075          /**
29076           * DataTables features six different built-in options for the buttons to
29077           * display for pagination control:
29078           *
29079           * * `numbers` - Page number buttons only
29080           * * `simple` - 'Previous' and 'Next' buttons only
29081           * * 'simple_numbers` - 'Previous' and 'Next' buttons, plus page numbers
29082           * * `full` - 'First', 'Previous', 'Next' and 'Last' buttons
29083           * * `full_numbers` - 'First', 'Previous', 'Next' and 'Last' buttons, plus page numbers
29084           * * `first_last_numbers` - 'First' and 'Last' buttons, plus page numbers
29085           *  
29086           * Further methods can be added using {@link DataTable.ext.oPagination}.
29087           *  @type string
29088           *  @default simple_numbers
29089           *
29090           *  @dtopt Options
29091           *  @name DataTable.defaults.pagingType
29092           *
29093           *  @example
29094           *    $(document).ready( function() {
29095           *      $('#example').dataTable( {
29096           *        "pagingType": "full_numbers"
29097           *      } );
29098           *    } )
29099           */
29100          "sPaginationType": "simple_numbers",
29101          /**
29102           * Enable horizontal scrolling. When a table is too wide to fit into a
29103           * certain layout, or you have a large number of columns in the table, you
29104           * can enable x-scrolling to show the table in a viewport, which can be
29105           * scrolled. This property can be `true` which will allow the table to
29106           * scroll horizontally when needed, or any CSS unit, or a number (in which
29107           * case it will be treated as a pixel measurement). Setting as simply `true`
29108           * is recommended.
29109           *  @type boolean|string
29110           *  @default <i>blank string - i.e. disabled</i>
29111           *
29112           *  @dtopt Features
29113           *  @name DataTable.defaults.scrollX
29114           *
29115           *  @example
29116           *    $(document).ready( function() {
29117           *      $('#example').dataTable( {
29118           *        "scrollX": true,
29119           *        "scrollCollapse": true
29120           *      } );
29121           *    } );
29122           */
29123          "sScrollX": "",
29124          /**
29125           * This property can be used to force a DataTable to use more width than it
29126           * might otherwise do when x-scrolling is enabled. For example if you have a
29127           * table which requires to be well spaced, this parameter is useful for
29128           * "over-sizing" the table, and thus forcing scrolling. This property can by
29129           * any CSS unit, or a number (in which case it will be treated as a pixel
29130           * measurement).
29131           *  @type string
29132           *  @default <i>blank string - i.e. disabled</i>
29133           *
29134           *  @dtopt Options
29135           *  @name DataTable.defaults.scrollXInner
29136           *
29137           *  @example
29138           *    $(document).ready( function() {
29139           *      $('#example').dataTable( {
29140           *        "scrollX": "100%",
29141           *        "scrollXInner": "110%"
29142           *      } );
29143           *    } );
29144           */
29145          "sScrollXInner": "",
29146          /**
29147           * Enable vertical scrolling. Vertical scrolling will constrain the DataTable
29148           * to the given height, and enable scrolling for any data which overflows the
29149           * current viewport. This can be used as an alternative to paging to display
29150           * a lot of data in a small area (although paging and scrolling can both be
29151           * enabled at the same time). This property can be any CSS unit, or a number
29152           * (in which case it will be treated as a pixel measurement).
29153           *  @type string
29154           *  @default <i>blank string - i.e. disabled</i>
29155           *
29156           *  @dtopt Features
29157           *  @name DataTable.defaults.scrollY
29158           *
29159           *  @example
29160           *    $(document).ready( function() {
29161           *      $('#example').dataTable( {
29162           *        "scrollY": "200px",
29163           *        "paginate": false
29164           *      } );
29165           *    } );
29166           */
29167          "sScrollY": "",
29168          /**
29169           * __Deprecated__ The functionality provided by this parameter has now been
29170           * superseded by that provided through `ajax`, which should be used instead.
29171           *
29172           * Set the HTTP method that is used to make the Ajax call for server-side
29173           * processing or Ajax sourced data.
29174           *  @type string
29175           *  @default GET
29176           *
29177           *  @dtopt Options
29178           *  @dtopt Server-side
29179           *  @name DataTable.defaults.serverMethod
29180           *
29181           *  @deprecated 1.10. Please use `ajax` for this functionality now.
29182           */
29183          "sServerMethod": "GET",
29184          /**
29185           * DataTables makes use of renderers when displaying HTML elements for
29186           * a table. These renderers can be added or modified by plug-ins to
29187           * generate suitable mark-up for a site. For example the Bootstrap
29188           * integration plug-in for DataTables uses a paging button renderer to
29189           * display pagination buttons in the mark-up required by Bootstrap.
29190           *
29191           * For further information about the renderers available see
29192           * DataTable.ext.renderer
29193           *  @type string|object
29194           *  @default null
29195           *
29196           *  @name DataTable.defaults.renderer
29197           *
29198           */
29199          "renderer": null,
29200          /**
29201           * Set the data property name that DataTables should use to get a row's id
29202           * to set as the `id` property in the node.
29203           *  @type string
29204           *  @default DT_RowId
29205           *
29206           *  @name DataTable.defaults.rowId
29207           */
29208          "rowId": "DT_RowId"
29209        };
29210        _fnHungarianMap(DataTable2.defaults);
29211        DataTable2.defaults.column = {
29212          /**
29213           * Define which column(s) an order will occur on for this column. This
29214           * allows a column's ordering to take multiple columns into account when
29215           * doing a sort or use the data from a different column. For example first
29216           * name / last name columns make sense to do a multi-column sort over the
29217           * two columns.
29218           *  @type array|int
29219           *  @default null <i>Takes the value of the column index automatically</i>
29220           *
29221           *  @name DataTable.defaults.column.orderData
29222           *  @dtopt Columns
29223           *
29224           *  @example
29225           *    // Using `columnDefs`
29226           *    $(document).ready( function() {
29227           *      $('#example').dataTable( {
29228           *        "columnDefs": [
29229           *          { "orderData": [ 0, 1 ], "targets": [ 0 ] },
29230           *          { "orderData": [ 1, 0 ], "targets": [ 1 ] },
29231           *          { "orderData": 2, "targets": [ 2 ] }
29232           *        ]
29233           *      } );
29234           *    } );
29235           *
29236           *  @example
29237           *    // Using `columns`
29238           *    $(document).ready( function() {
29239           *      $('#example').dataTable( {
29240           *        "columns": [
29241           *          { "orderData": [ 0, 1 ] },
29242           *          { "orderData": [ 1, 0 ] },
29243           *          { "orderData": 2 },
29244           *          null,
29245           *          null
29246           *        ]
29247           *      } );
29248           *    } );
29249           */
29250          "aDataSort": null,
29251          "iDataSort": -1,
29252          /**
29253           * You can control the default ordering direction, and even alter the
29254           * behaviour of the sort handler (i.e. only allow ascending ordering etc)
29255           * using this parameter.
29256           *  @type array
29257           *  @default [ 'asc', 'desc' ]
29258           *
29259           *  @name DataTable.defaults.column.orderSequence
29260           *  @dtopt Columns
29261           *
29262           *  @example
29263           *    // Using `columnDefs`
29264           *    $(document).ready( function() {
29265           *      $('#example').dataTable( {
29266           *        "columnDefs": [
29267           *          { "orderSequence": [ "asc" ], "targets": [ 1 ] },
29268           *          { "orderSequence": [ "desc", "asc", "asc" ], "targets": [ 2 ] },
29269           *          { "orderSequence": [ "desc" ], "targets": [ 3 ] }
29270           *        ]
29271           *      } );
29272           *    } );
29273           *
29274           *  @example
29275           *    // Using `columns`
29276           *    $(document).ready( function() {
29277           *      $('#example').dataTable( {
29278           *        "columns": [
29279           *          null,
29280           *          { "orderSequence": [ "asc" ] },
29281           *          { "orderSequence": [ "desc", "asc", "asc" ] },
29282           *          { "orderSequence": [ "desc" ] },
29283           *          null
29284           *        ]
29285           *      } );
29286           *    } );
29287           */
29288          "asSorting": ["asc", "desc"],
29289          /**
29290           * Enable or disable filtering on the data in this column.
29291           *  @type boolean
29292           *  @default true
29293           *
29294           *  @name DataTable.defaults.column.searchable
29295           *  @dtopt Columns
29296           *
29297           *  @example
29298           *    // Using `columnDefs`
29299           *    $(document).ready( function() {
29300           *      $('#example').dataTable( {
29301           *        "columnDefs": [
29302           *          { "searchable": false, "targets": [ 0 ] }
29303           *        ] } );
29304           *    } );
29305           *
29306           *  @example
29307           *    // Using `columns`
29308           *    $(document).ready( function() {
29309           *      $('#example').dataTable( {
29310           *        "columns": [
29311           *          { "searchable": false },
29312           *          null,
29313           *          null,
29314           *          null,
29315           *          null
29316           *        ] } );
29317           *    } );
29318           */
29319          "bSearchable": true,
29320          /**
29321           * Enable or disable ordering on this column.
29322           *  @type boolean
29323           *  @default true
29324           *
29325           *  @name DataTable.defaults.column.orderable
29326           *  @dtopt Columns
29327           *
29328           *  @example
29329           *    // Using `columnDefs`
29330           *    $(document).ready( function() {
29331           *      $('#example').dataTable( {
29332           *        "columnDefs": [
29333           *          { "orderable": false, "targets": [ 0 ] }
29334           *        ] } );
29335           *    } );
29336           *
29337           *  @example
29338           *    // Using `columns`
29339           *    $(document).ready( function() {
29340           *      $('#example').dataTable( {
29341           *        "columns": [
29342           *          { "orderable": false },
29343           *          null,
29344           *          null,
29345           *          null,
29346           *          null
29347           *        ] } );
29348           *    } );
29349           */
29350          "bSortable": true,
29351          /**
29352           * Enable or disable the display of this column.
29353           *  @type boolean
29354           *  @default true
29355           *
29356           *  @name DataTable.defaults.column.visible
29357           *  @dtopt Columns
29358           *
29359           *  @example
29360           *    // Using `columnDefs`
29361           *    $(document).ready( function() {
29362           *      $('#example').dataTable( {
29363           *        "columnDefs": [
29364           *          { "visible": false, "targets": [ 0 ] }
29365           *        ] } );
29366           *    } );
29367           *
29368           *  @example
29369           *    // Using `columns`
29370           *    $(document).ready( function() {
29371           *      $('#example').dataTable( {
29372           *        "columns": [
29373           *          { "visible": false },
29374           *          null,
29375           *          null,
29376           *          null,
29377           *          null
29378           *        ] } );
29379           *    } );
29380           */
29381          "bVisible": true,
29382          /**
29383           * Developer definable function that is called whenever a cell is created (Ajax source,
29384           * etc) or processed for input (DOM source). This can be used as a compliment to mRender
29385           * allowing you to modify the DOM element (add background colour for example) when the
29386           * element is available.
29387           *  @type function
29388           *  @param {element} td The TD node that has been created
29389           *  @param {*} cellData The Data for the cell
29390           *  @param {array|object} rowData The data for the whole row
29391           *  @param {int} row The row index for the aoData data store
29392           *  @param {int} col The column index for aoColumns
29393           *
29394           *  @name DataTable.defaults.column.createdCell
29395           *  @dtopt Columns
29396           *
29397           *  @example
29398           *    $(document).ready( function() {
29399           *      $('#example').dataTable( {
29400           *        "columnDefs": [ {
29401           *          "targets": [3],
29402           *          "createdCell": function (td, cellData, rowData, row, col) {
29403           *            if ( cellData == "1.7" ) {
29404           *              $(td).css('color', 'blue')
29405           *            }
29406           *          }
29407           *        } ]
29408           *      });
29409           *    } );
29410           */
29411          "fnCreatedCell": null,
29412          /**
29413           * This parameter has been replaced by `data` in DataTables to ensure naming
29414           * consistency. `dataProp` can still be used, as there is backwards
29415           * compatibility in DataTables for this option, but it is strongly
29416           * recommended that you use `data` in preference to `dataProp`.
29417           *  @name DataTable.defaults.column.dataProp
29418           */
29419          /**
29420           * This property can be used to read data from any data source property,
29421           * including deeply nested objects / properties. `data` can be given in a
29422           * number of different ways which effect its behaviour:
29423           *
29424           * * `integer` - treated as an array index for the data source. This is the
29425           *   default that DataTables uses (incrementally increased for each column).
29426           * * `string` - read an object property from the data source. There are
29427           *   three 'special' options that can be used in the string to alter how
29428           *   DataTables reads the data from the source object:
29429           *    * `.` - Dotted Javascript notation. Just as you use a `.` in
29430           *      Javascript to read from nested objects, so to can the options
29431           *      specified in `data`. For example: `browser.version` or
29432           *      `browser.name`. If your object parameter name contains a period, use
29433           *      `\\` to escape it - i.e. `first\\.name`.
29434           *    * `[]` - Array notation. DataTables can automatically combine data
29435           *      from and array source, joining the data with the characters provided
29436           *      between the two brackets. For example: `name[, ]` would provide a
29437           *      comma-space separated list from the source array. If no characters
29438           *      are provided between the brackets, the original array source is
29439           *      returned.
29440           *    * `()` - Function notation. Adding `()` to the end of a parameter will
29441           *      execute a function of the name given. For example: `browser()` for a
29442           *      simple function on the data source, `browser.version()` for a
29443           *      function in a nested property or even `browser().version` to get an
29444           *      object property if the function called returns an object. Note that
29445           *      function notation is recommended for use in `render` rather than
29446           *      `data` as it is much simpler to use as a renderer.
29447           * * `null` - use the original data source for the row rather than plucking
29448           *   data directly from it. This action has effects on two other
29449           *   initialisation options:
29450           *    * `defaultContent` - When null is given as the `data` option and
29451           *      `defaultContent` is specified for the column, the value defined by
29452           *      `defaultContent` will be used for the cell.
29453           *    * `render` - When null is used for the `data` option and the `render`
29454           *      option is specified for the column, the whole data source for the
29455           *      row is used for the renderer.
29456           * * `function` - the function given will be executed whenever DataTables
29457           *   needs to set or get the data for a cell in the column. The function
29458           *   takes three parameters:
29459           *    * Parameters:
29460           *      * `{array|object}` The data source for the row
29461           *      * `{string}` The type call data requested - this will be 'set' when
29462           *        setting data or 'filter', 'display', 'type', 'sort' or undefined
29463           *        when gathering data. Note that when `undefined` is given for the
29464           *        type DataTables expects to get the raw data for the object back<
29465           *      * `{*}` Data to set when the second parameter is 'set'.
29466           *    * Return:
29467           *      * The return value from the function is not required when 'set' is
29468           *        the type of call, but otherwise the return is what will be used
29469           *        for the data requested.
29470           *
29471           * Note that `data` is a getter and setter option. If you just require
29472           * formatting of data for output, you will likely want to use `render` which
29473           * is simply a getter and thus simpler to use.
29474           *
29475           * Note that prior to DataTables 1.9.2 `data` was called `mDataProp`. The
29476           * name change reflects the flexibility of this property and is consistent
29477           * with the naming of mRender. If 'mDataProp' is given, then it will still
29478           * be used by DataTables, as it automatically maps the old name to the new
29479           * if required.
29480           *
29481           *  @type string|int|function|null
29482           *  @default null <i>Use automatically calculated column index</i>
29483           *
29484           *  @name DataTable.defaults.column.data
29485           *  @dtopt Columns
29486           *
29487           *  @example
29488           *    // Read table data from objects
29489           *    // JSON structure for each row:
29490           *    //   {
29491           *    //      "engine": {value},
29492           *    //      "browser": {value},
29493           *    //      "platform": {value},
29494           *    //      "version": {value},
29495           *    //      "grade": {value}
29496           *    //   }
29497           *    $(document).ready( function() {
29498           *      $('#example').dataTable( {
29499           *        "ajaxSource": "sources/objects.txt",
29500           *        "columns": [
29501           *          { "data": "engine" },
29502           *          { "data": "browser" },
29503           *          { "data": "platform" },
29504           *          { "data": "version" },
29505           *          { "data": "grade" }
29506           *        ]
29507           *      } );
29508           *    } );
29509           *
29510           *  @example
29511           *    // Read information from deeply nested objects
29512           *    // JSON structure for each row:
29513           *    //   {
29514           *    //      "engine": {value},
29515           *    //      "browser": {value},
29516           *    //      "platform": {
29517           *    //         "inner": {value}
29518           *    //      },
29519           *    //      "details": [
29520           *    //         {value}, {value}
29521           *    //      ]
29522           *    //   }
29523           *    $(document).ready( function() {
29524           *      $('#example').dataTable( {
29525           *        "ajaxSource": "sources/deep.txt",
29526           *        "columns": [
29527           *          { "data": "engine" },
29528           *          { "data": "browser" },
29529           *          { "data": "platform.inner" },
29530           *          { "data": "details.0" },
29531           *          { "data": "details.1" }
29532           *        ]
29533           *      } );
29534           *    } );
29535           *
29536           *  @example
29537           *    // Using `data` as a function to provide different information for
29538           *    // sorting, filtering and display. In this case, currency (price)
29539           *    $(document).ready( function() {
29540           *      $('#example').dataTable( {
29541           *        "columnDefs": [ {
29542           *          "targets": [ 0 ],
29543           *          "data": function ( source, type, val ) {
29544           *            if (type === 'set') {
29545           *              source.price = val;
29546           *              // Store the computed display and filter values for efficiency
29547           *              source.price_display = val=="" ? "" : "$"+numberFormat(val);
29548           *              source.price_filter  = val=="" ? "" : "$"+numberFormat(val)+" "+val;
29549           *              return;
29550           *            }
29551           *            else if (type === 'display') {
29552           *              return source.price_display;
29553           *            }
29554           *            else if (type === 'filter') {
29555           *              return source.price_filter;
29556           *            }
29557           *            // 'sort', 'type' and undefined all just use the integer
29558           *            return source.price;
29559           *          }
29560           *        } ]
29561           *      } );
29562           *    } );
29563           *
29564           *  @example
29565           *    // Using default content
29566           *    $(document).ready( function() {
29567           *      $('#example').dataTable( {
29568           *        "columnDefs": [ {
29569           *          "targets": [ 0 ],
29570           *          "data": null,
29571           *          "defaultContent": "Click to edit"
29572           *        } ]
29573           *      } );
29574           *    } );
29575           *
29576           *  @example
29577           *    // Using array notation - outputting a list from an array
29578           *    $(document).ready( function() {
29579           *      $('#example').dataTable( {
29580           *        "columnDefs": [ {
29581           *          "targets": [ 0 ],
29582           *          "data": "name[, ]"
29583           *        } ]
29584           *      } );
29585           *    } );
29586           *
29587           */
29588          "mData": null,
29589          /**
29590           * This property is the rendering partner to `data` and it is suggested that
29591           * when you want to manipulate data for display (including filtering,
29592           * sorting etc) without altering the underlying data for the table, use this
29593           * property. `render` can be considered to be the the read only companion to
29594           * `data` which is read / write (then as such more complex). Like `data`
29595           * this option can be given in a number of different ways to effect its
29596           * behaviour:
29597           *
29598           * * `integer` - treated as an array index for the data source. This is the
29599           *   default that DataTables uses (incrementally increased for each column).
29600           * * `string` - read an object property from the data source. There are
29601           *   three 'special' options that can be used in the string to alter how
29602           *   DataTables reads the data from the source object:
29603           *    * `.` - Dotted Javascript notation. Just as you use a `.` in
29604           *      Javascript to read from nested objects, so to can the options
29605           *      specified in `data`. For example: `browser.version` or
29606           *      `browser.name`. If your object parameter name contains a period, use
29607           *      `\\` to escape it - i.e. `first\\.name`.
29608           *    * `[]` - Array notation. DataTables can automatically combine data
29609           *      from and array source, joining the data with the characters provided
29610           *      between the two brackets. For example: `name[, ]` would provide a
29611           *      comma-space separated list from the source array. If no characters
29612           *      are provided between the brackets, the original array source is
29613           *      returned.
29614           *    * `()` - Function notation. Adding `()` to the end of a parameter will
29615           *      execute a function of the name given. For example: `browser()` for a
29616           *      simple function on the data source, `browser.version()` for a
29617           *      function in a nested property or even `browser().version` to get an
29618           *      object property if the function called returns an object.
29619           * * `object` - use different data for the different data types requested by
29620           *   DataTables ('filter', 'display', 'type' or 'sort'). The property names
29621           *   of the object is the data type the property refers to and the value can
29622           *   defined using an integer, string or function using the same rules as
29623           *   `render` normally does. Note that an `_` option _must_ be specified.
29624           *   This is the default value to use if you haven't specified a value for
29625           *   the data type requested by DataTables.
29626           * * `function` - the function given will be executed whenever DataTables
29627           *   needs to set or get the data for a cell in the column. The function
29628           *   takes three parameters:
29629           *    * Parameters:
29630           *      * {array|object} The data source for the row (based on `data`)
29631           *      * {string} The type call data requested - this will be 'filter',
29632           *        'display', 'type' or 'sort'.
29633           *      * {array|object} The full data source for the row (not based on
29634           *        `data`)
29635           *    * Return:
29636           *      * The return value from the function is what will be used for the
29637           *        data requested.
29638           *
29639           *  @type string|int|function|object|null
29640           *  @default null Use the data source value.
29641           *
29642           *  @name DataTable.defaults.column.render
29643           *  @dtopt Columns
29644           *
29645           *  @example
29646           *    // Create a comma separated list from an array of objects
29647           *    $(document).ready( function() {
29648           *      $('#example').dataTable( {
29649           *        "ajaxSource": "sources/deep.txt",
29650           *        "columns": [
29651           *          { "data": "engine" },
29652           *          { "data": "browser" },
29653           *          {
29654           *            "data": "platform",
29655           *            "render": "[, ].name"
29656           *          }
29657           *        ]
29658           *      } );
29659           *    } );
29660           *
29661           *  @example
29662           *    // Execute a function to obtain data
29663           *    $(document).ready( function() {
29664           *      $('#example').dataTable( {
29665           *        "columnDefs": [ {
29666           *          "targets": [ 0 ],
29667           *          "data": null, // Use the full data source object for the renderer's source
29668           *          "render": "browserName()"
29669           *        } ]
29670           *      } );
29671           *    } );
29672           *
29673           *  @example
29674           *    // As an object, extracting different data for the different types
29675           *    // This would be used with a data source such as:
29676           *    //   { "phone": 5552368, "phone_filter": "5552368 555-2368", "phone_display": "555-2368" }
29677           *    // Here the `phone` integer is used for sorting and type detection, while `phone_filter`
29678           *    // (which has both forms) is used for filtering for if a user inputs either format, while
29679           *    // the formatted phone number is the one that is shown in the table.
29680           *    $(document).ready( function() {
29681           *      $('#example').dataTable( {
29682           *        "columnDefs": [ {
29683           *          "targets": [ 0 ],
29684           *          "data": null, // Use the full data source object for the renderer's source
29685           *          "render": {
29686           *            "_": "phone",
29687           *            "filter": "phone_filter",
29688           *            "display": "phone_display"
29689           *          }
29690           *        } ]
29691           *      } );
29692           *    } );
29693           *
29694           *  @example
29695           *    // Use as a function to create a link from the data source
29696           *    $(document).ready( function() {
29697           *      $('#example').dataTable( {
29698           *        "columnDefs": [ {
29699           *          "targets": [ 0 ],
29700           *          "data": "download_link",
29701           *          "render": function ( data, type, full ) {
29702           *            return '<a href="'+data+'">Download</a>';
29703           *          }
29704           *        } ]
29705           *      } );
29706           *    } );
29707           */
29708          "mRender": null,
29709          /**
29710           * Change the cell type created for the column - either TD cells or TH cells. This
29711           * can be useful as TH cells have semantic meaning in the table body, allowing them
29712           * to act as a header for a row (you may wish to add scope='row' to the TH elements).
29713           *  @type string
29714           *  @default td
29715           *
29716           *  @name DataTable.defaults.column.cellType
29717           *  @dtopt Columns
29718           *
29719           *  @example
29720           *    // Make the first column use TH cells
29721           *    $(document).ready( function() {
29722           *      $('#example').dataTable( {
29723           *        "columnDefs": [ {
29724           *          "targets": [ 0 ],
29725           *          "cellType": "th"
29726           *        } ]
29727           *      } );
29728           *    } );
29729           */
29730          "sCellType": "td",
29731          /**
29732           * Class to give to each cell in this column.
29733           *  @type string
29734           *  @default <i>Empty string</i>
29735           *
29736           *  @name DataTable.defaults.column.class
29737           *  @dtopt Columns
29738           *
29739           *  @example
29740           *    // Using `columnDefs`
29741           *    $(document).ready( function() {
29742           *      $('#example').dataTable( {
29743           *        "columnDefs": [
29744           *          { "class": "my_class", "targets": [ 0 ] }
29745           *        ]
29746           *      } );
29747           *    } );
29748           *
29749           *  @example
29750           *    // Using `columns`
29751           *    $(document).ready( function() {
29752           *      $('#example').dataTable( {
29753           *        "columns": [
29754           *          { "class": "my_class" },
29755           *          null,
29756           *          null,
29757           *          null,
29758           *          null
29759           *        ]
29760           *      } );
29761           *    } );
29762           */
29763          "sClass": "",
29764          /**
29765           * When DataTables calculates the column widths to assign to each column,
29766           * it finds the longest string in each column and then constructs a
29767           * temporary table and reads the widths from that. The problem with this
29768           * is that "mmm" is much wider then "iiii", but the latter is a longer
29769           * string - thus the calculation can go wrong (doing it properly and putting
29770           * it into an DOM object and measuring that is horribly(!) slow). Thus as
29771           * a "work around" we provide this option. It will append its value to the
29772           * text that is found to be the longest string for the column - i.e. padding.
29773           * Generally you shouldn't need this!
29774           *  @type string
29775           *  @default <i>Empty string<i>
29776           *
29777           *  @name DataTable.defaults.column.contentPadding
29778           *  @dtopt Columns
29779           *
29780           *  @example
29781           *    // Using `columns`
29782           *    $(document).ready( function() {
29783           *      $('#example').dataTable( {
29784           *        "columns": [
29785           *          null,
29786           *          null,
29787           *          null,
29788           *          {
29789           *            "contentPadding": "mmm"
29790           *          }
29791           *        ]
29792           *      } );
29793           *    } );
29794           */
29795          "sContentPadding": "",
29796          /**
29797           * Allows a default value to be given for a column's data, and will be used
29798           * whenever a null data source is encountered (this can be because `data`
29799           * is set to null, or because the data source itself is null).
29800           *  @type string
29801           *  @default null
29802           *
29803           *  @name DataTable.defaults.column.defaultContent
29804           *  @dtopt Columns
29805           *
29806           *  @example
29807           *    // Using `columnDefs`
29808           *    $(document).ready( function() {
29809           *      $('#example').dataTable( {
29810           *        "columnDefs": [
29811           *          {
29812           *            "data": null,
29813           *            "defaultContent": "Edit",
29814           *            "targets": [ -1 ]
29815           *          }
29816           *        ]
29817           *      } );
29818           *    } );
29819           *
29820           *  @example
29821           *    // Using `columns`
29822           *    $(document).ready( function() {
29823           *      $('#example').dataTable( {
29824           *        "columns": [
29825           *          null,
29826           *          null,
29827           *          null,
29828           *          {
29829           *            "data": null,
29830           *            "defaultContent": "Edit"
29831           *          }
29832           *        ]
29833           *      } );
29834           *    } );
29835           */
29836          "sDefaultContent": null,
29837          /**
29838           * This parameter is only used in DataTables' server-side processing. It can
29839           * be exceptionally useful to know what columns are being displayed on the
29840           * client side, and to map these to database fields. When defined, the names
29841           * also allow DataTables to reorder information from the server if it comes
29842           * back in an unexpected order (i.e. if you switch your columns around on the
29843           * client-side, your server-side code does not also need updating).
29844           *  @type string
29845           *  @default <i>Empty string</i>
29846           *
29847           *  @name DataTable.defaults.column.name
29848           *  @dtopt Columns
29849           *
29850           *  @example
29851           *    // Using `columnDefs`
29852           *    $(document).ready( function() {
29853           *      $('#example').dataTable( {
29854           *        "columnDefs": [
29855           *          { "name": "engine", "targets": [ 0 ] },
29856           *          { "name": "browser", "targets": [ 1 ] },
29857           *          { "name": "platform", "targets": [ 2 ] },
29858           *          { "name": "version", "targets": [ 3 ] },
29859           *          { "name": "grade", "targets": [ 4 ] }
29860           *        ]
29861           *      } );
29862           *    } );
29863           *
29864           *  @example
29865           *    // Using `columns`
29866           *    $(document).ready( function() {
29867           *      $('#example').dataTable( {
29868           *        "columns": [
29869           *          { "name": "engine" },
29870           *          { "name": "browser" },
29871           *          { "name": "platform" },
29872           *          { "name": "version" },
29873           *          { "name": "grade" }
29874           *        ]
29875           *      } );
29876           *    } );
29877           */
29878          "sName": "",
29879          /**
29880           * Defines a data source type for the ordering which can be used to read
29881           * real-time information from the table (updating the internally cached
29882           * version) prior to ordering. This allows ordering to occur on user
29883           * editable elements such as form inputs.
29884           *  @type string
29885           *  @default std
29886           *
29887           *  @name DataTable.defaults.column.orderDataType
29888           *  @dtopt Columns
29889           *
29890           *  @example
29891           *    // Using `columnDefs`
29892           *    $(document).ready( function() {
29893           *      $('#example').dataTable( {
29894           *        "columnDefs": [
29895           *          { "orderDataType": "dom-text", "targets": [ 2, 3 ] },
29896           *          { "type": "numeric", "targets": [ 3 ] },
29897           *          { "orderDataType": "dom-select", "targets": [ 4 ] },
29898           *          { "orderDataType": "dom-checkbox", "targets": [ 5 ] }
29899           *        ]
29900           *      } );
29901           *    } );
29902           *
29903           *  @example
29904           *    // Using `columns`
29905           *    $(document).ready( function() {
29906           *      $('#example').dataTable( {
29907           *        "columns": [
29908           *          null,
29909           *          null,
29910           *          { "orderDataType": "dom-text" },
29911           *          { "orderDataType": "dom-text", "type": "numeric" },
29912           *          { "orderDataType": "dom-select" },
29913           *          { "orderDataType": "dom-checkbox" }
29914           *        ]
29915           *      } );
29916           *    } );
29917           */
29918          "sSortDataType": "std",
29919          /**
29920           * The title of this column.
29921           *  @type string
29922           *  @default null <i>Derived from the 'TH' value for this column in the
29923           *    original HTML table.</i>
29924           *
29925           *  @name DataTable.defaults.column.title
29926           *  @dtopt Columns
29927           *
29928           *  @example
29929           *    // Using `columnDefs`
29930           *    $(document).ready( function() {
29931           *      $('#example').dataTable( {
29932           *        "columnDefs": [
29933           *          { "title": "My column title", "targets": [ 0 ] }
29934           *        ]
29935           *      } );
29936           *    } );
29937           *
29938           *  @example
29939           *    // Using `columns`
29940           *    $(document).ready( function() {
29941           *      $('#example').dataTable( {
29942           *        "columns": [
29943           *          { "title": "My column title" },
29944           *          null,
29945           *          null,
29946           *          null,
29947           *          null
29948           *        ]
29949           *      } );
29950           *    } );
29951           */
29952          "sTitle": null,
29953          /**
29954           * The type allows you to specify how the data for this column will be
29955           * ordered. Four types (string, numeric, date and html (which will strip
29956           * HTML tags before ordering)) are currently available. Note that only date
29957           * formats understood by Javascript's Date() object will be accepted as type
29958           * date. For example: "Mar 26, 2008 5:03 PM". May take the values: 'string',
29959           * 'numeric', 'date' or 'html' (by default). Further types can be adding
29960           * through plug-ins.
29961           *  @type string
29962           *  @default null <i>Auto-detected from raw data</i>
29963           *
29964           *  @name DataTable.defaults.column.type
29965           *  @dtopt Columns
29966           *
29967           *  @example
29968           *    // Using `columnDefs`
29969           *    $(document).ready( function() {
29970           *      $('#example').dataTable( {
29971           *        "columnDefs": [
29972           *          { "type": "html", "targets": [ 0 ] }
29973           *        ]
29974           *      } );
29975           *    } );
29976           *
29977           *  @example
29978           *    // Using `columns`
29979           *    $(document).ready( function() {
29980           *      $('#example').dataTable( {
29981           *        "columns": [
29982           *          { "type": "html" },
29983           *          null,
29984           *          null,
29985           *          null,
29986           *          null
29987           *        ]
29988           *      } );
29989           *    } );
29990           */
29991          "sType": null,
29992          /**
29993           * Defining the width of the column, this parameter may take any CSS value
29994           * (3em, 20px etc). DataTables applies 'smart' widths to columns which have not
29995           * been given a specific width through this interface ensuring that the table
29996           * remains readable.
29997           *  @type string
29998           *  @default null <i>Automatic</i>
29999           *
30000           *  @name DataTable.defaults.column.width
30001           *  @dtopt Columns
30002           *
30003           *  @example
30004           *    // Using `columnDefs`
30005           *    $(document).ready( function() {
30006           *      $('#example').dataTable( {
30007           *        "columnDefs": [
30008           *          { "width": "20%", "targets": [ 0 ] }
30009           *        ]
30010           *      } );
30011           *    } );
30012           *
30013           *  @example
30014           *    // Using `columns`
30015           *    $(document).ready( function() {
30016           *      $('#example').dataTable( {
30017           *        "columns": [
30018           *          { "width": "20%" },
30019           *          null,
30020           *          null,
30021           *          null,
30022           *          null
30023           *        ]
30024           *      } );
30025           *    } );
30026           */
30027          "sWidth": null
30028        };
30029        _fnHungarianMap(DataTable2.defaults.column);
30030        DataTable2.models.oSettings = {
30031          /**
30032           * Primary features of DataTables and their enablement state.
30033           *  @namespace
30034           */
30035          "oFeatures": {
30036            /**
30037             * Flag to say if DataTables should automatically try to calculate the
30038             * optimum table and columns widths (true) or not (false).
30039             * Note that this parameter will be set by the initialisation routine. To
30040             * set a default use {@link DataTable.defaults}.
30041             *  @type boolean
30042             */
30043            "bAutoWidth": null,
30044            /**
30045             * Delay the creation of TR and TD elements until they are actually
30046             * needed by a driven page draw. This can give a significant speed
30047             * increase for Ajax source and Javascript source data, but makes no
30048             * difference at all for DOM and server-side processing tables.
30049             * Note that this parameter will be set by the initialisation routine. To
30050             * set a default use {@link DataTable.defaults}.
30051             *  @type boolean
30052             */
30053            "bDeferRender": null,
30054            /**
30055             * Enable filtering on the table or not. Note that if this is disabled
30056             * then there is no filtering at all on the table, including fnFilter.
30057             * To just remove the filtering input use sDom and remove the 'f' option.
30058             * Note that this parameter will be set by the initialisation routine. To
30059             * set a default use {@link DataTable.defaults}.
30060             *  @type boolean
30061             */
30062            "bFilter": null,
30063            /**
30064             * Table information element (the 'Showing x of y records' div) enable
30065             * flag.
30066             * Note that this parameter will be set by the initialisation routine. To
30067             * set a default use {@link DataTable.defaults}.
30068             *  @type boolean
30069             */
30070            "bInfo": null,
30071            /**
30072             * Present a user control allowing the end user to change the page size
30073             * when pagination is enabled.
30074             * Note that this parameter will be set by the initialisation routine. To
30075             * set a default use {@link DataTable.defaults}.
30076             *  @type boolean
30077             */
30078            "bLengthChange": null,
30079            /**
30080             * Pagination enabled or not. Note that if this is disabled then length
30081             * changing must also be disabled.
30082             * Note that this parameter will be set by the initialisation routine. To
30083             * set a default use {@link DataTable.defaults}.
30084             *  @type boolean
30085             */
30086            "bPaginate": null,
30087            /**
30088             * Processing indicator enable flag whenever DataTables is enacting a
30089             * user request - typically an Ajax request for server-side processing.
30090             * Note that this parameter will be set by the initialisation routine. To
30091             * set a default use {@link DataTable.defaults}.
30092             *  @type boolean
30093             */
30094            "bProcessing": null,
30095            /**
30096             * Server-side processing enabled flag - when enabled DataTables will
30097             * get all data from the server for every draw - there is no filtering,
30098             * sorting or paging done on the client-side.
30099             * Note that this parameter will be set by the initialisation routine. To
30100             * set a default use {@link DataTable.defaults}.
30101             *  @type boolean
30102             */
30103            "bServerSide": null,
30104            /**
30105             * Sorting enablement flag.
30106             * Note that this parameter will be set by the initialisation routine. To
30107             * set a default use {@link DataTable.defaults}.
30108             *  @type boolean
30109             */
30110            "bSort": null,
30111            /**
30112             * Multi-column sorting
30113             * Note that this parameter will be set by the initialisation routine. To
30114             * set a default use {@link DataTable.defaults}.
30115             *  @type boolean
30116             */
30117            "bSortMulti": null,
30118            /**
30119             * Apply a class to the columns which are being sorted to provide a
30120             * visual highlight or not. This can slow things down when enabled since
30121             * there is a lot of DOM interaction.
30122             * Note that this parameter will be set by the initialisation routine. To
30123             * set a default use {@link DataTable.defaults}.
30124             *  @type boolean
30125             */
30126            "bSortClasses": null,
30127            /**
30128             * State saving enablement flag.
30129             * Note that this parameter will be set by the initialisation routine. To
30130             * set a default use {@link DataTable.defaults}.
30131             *  @type boolean
30132             */
30133            "bStateSave": null
30134          },
30135          /**
30136           * Scrolling settings for a table.
30137           *  @namespace
30138           */
30139          "oScroll": {
30140            /**
30141             * When the table is shorter in height than sScrollY, collapse the
30142             * table container down to the height of the table (when true).
30143             * Note that this parameter will be set by the initialisation routine. To
30144             * set a default use {@link DataTable.defaults}.
30145             *  @type boolean
30146             */
30147            "bCollapse": null,
30148            /**
30149             * Width of the scrollbar for the web-browser's platform. Calculated
30150             * during table initialisation.
30151             *  @type int
30152             *  @default 0
30153             */
30154            "iBarWidth": 0,
30155            /**
30156             * Viewport width for horizontal scrolling. Horizontal scrolling is
30157             * disabled if an empty string.
30158             * Note that this parameter will be set by the initialisation routine. To
30159             * set a default use {@link DataTable.defaults}.
30160             *  @type string
30161             */
30162            "sX": null,
30163            /**
30164             * Width to expand the table to when using x-scrolling. Typically you
30165             * should not need to use this.
30166             * Note that this parameter will be set by the initialisation routine. To
30167             * set a default use {@link DataTable.defaults}.
30168             *  @type string
30169             *  @deprecated
30170             */
30171            "sXInner": null,
30172            /**
30173             * Viewport height for vertical scrolling. Vertical scrolling is disabled
30174             * if an empty string.
30175             * Note that this parameter will be set by the initialisation routine. To
30176             * set a default use {@link DataTable.defaults}.
30177             *  @type string
30178             */
30179            "sY": null
30180          },
30181          /**
30182           * Language information for the table.
30183           *  @namespace
30184           *  @extends DataTable.defaults.oLanguage
30185           */
30186          "oLanguage": {
30187            /**
30188             * Information callback function. See
30189             * {@link DataTable.defaults.fnInfoCallback}
30190             *  @type function
30191             *  @default null
30192             */
30193            "fnInfoCallback": null
30194          },
30195          /**
30196           * Browser support parameters
30197           *  @namespace
30198           */
30199          "oBrowser": {
30200            /**
30201             * Indicate if the browser incorrectly calculates width:100% inside a
30202             * scrolling element (IE6/7)
30203             *  @type boolean
30204             *  @default false
30205             */
30206            "bScrollOversize": false,
30207            /**
30208             * Determine if the vertical scrollbar is on the right or left of the
30209             * scrolling container - needed for rtl language layout, although not
30210             * all browsers move the scrollbar (Safari).
30211             *  @type boolean
30212             *  @default false
30213             */
30214            "bScrollbarLeft": false,
30215            /**
30216             * Flag for if `getBoundingClientRect` is fully supported or not
30217             *  @type boolean
30218             *  @default false
30219             */
30220            "bBounding": false,
30221            /**
30222             * Browser scrollbar width
30223             *  @type integer
30224             *  @default 0
30225             */
30226            "barWidth": 0
30227          },
30228          "ajax": null,
30229          /**
30230           * Array referencing the nodes which are used for the features. The
30231           * parameters of this object match what is allowed by sDom - i.e.
30232           *   <ul>
30233           *     <li>'l' - Length changing</li>
30234           *     <li>'f' - Filtering input</li>
30235           *     <li>'t' - The table!</li>
30236           *     <li>'i' - Information</li>
30237           *     <li>'p' - Pagination</li>
30238           *     <li>'r' - pRocessing</li>
30239           *   </ul>
30240           *  @type array
30241           *  @default []
30242           */
30243          "aanFeatures": [],
30244          /**
30245           * Store data information - see {@link DataTable.models.oRow} for detailed
30246           * information.
30247           *  @type array
30248           *  @default []
30249           */
30250          "aoData": [],
30251          /**
30252           * Array of indexes which are in the current display (after filtering etc)
30253           *  @type array
30254           *  @default []
30255           */
30256          "aiDisplay": [],
30257          /**
30258           * Array of indexes for display - no filtering
30259           *  @type array
30260           *  @default []
30261           */
30262          "aiDisplayMaster": [],
30263          /**
30264           * Map of row ids to data indexes
30265           *  @type object
30266           *  @default {}
30267           */
30268          "aIds": {},
30269          /**
30270           * Store information about each column that is in use
30271           *  @type array
30272           *  @default []
30273           */
30274          "aoColumns": [],
30275          /**
30276           * Store information about the table's header
30277           *  @type array
30278           *  @default []
30279           */
30280          "aoHeader": [],
30281          /**
30282           * Store information about the table's footer
30283           *  @type array
30284           *  @default []
30285           */
30286          "aoFooter": [],
30287          /**
30288           * Store the applied global search information in case we want to force a
30289           * research or compare the old search to a new one.
30290           * Note that this parameter will be set by the initialisation routine. To
30291           * set a default use {@link DataTable.defaults}.
30292           *  @namespace
30293           *  @extends DataTable.models.oSearch
30294           */
30295          "oPreviousSearch": {},
30296          /**
30297           * Store the applied search for each column - see
30298           * {@link DataTable.models.oSearch} for the format that is used for the
30299           * filtering information for each column.
30300           *  @type array
30301           *  @default []
30302           */
30303          "aoPreSearchCols": [],
30304          /**
30305           * Sorting that is applied to the table. Note that the inner arrays are
30306           * used in the following manner:
30307           * <ul>
30308           *   <li>Index 0 - column number</li>
30309           *   <li>Index 1 - current sorting direction</li>
30310           * </ul>
30311           * Note that this parameter will be set by the initialisation routine. To
30312           * set a default use {@link DataTable.defaults}.
30313           *  @type array
30314           *  @todo These inner arrays should really be objects
30315           */
30316          "aaSorting": null,
30317          /**
30318           * Sorting that is always applied to the table (i.e. prefixed in front of
30319           * aaSorting).
30320           * Note that this parameter will be set by the initialisation routine. To
30321           * set a default use {@link DataTable.defaults}.
30322           *  @type array
30323           *  @default []
30324           */
30325          "aaSortingFixed": [],
30326          /**
30327           * Classes to use for the striping of a table.
30328           * Note that this parameter will be set by the initialisation routine. To
30329           * set a default use {@link DataTable.defaults}.
30330           *  @type array
30331           *  @default []
30332           */
30333          "asStripeClasses": null,
30334          /**
30335           * If restoring a table - we should restore its striping classes as well
30336           *  @type array
30337           *  @default []
30338           */
30339          "asDestroyStripes": [],
30340          /**
30341           * If restoring a table - we should restore its width
30342           *  @type int
30343           *  @default 0
30344           */
30345          "sDestroyWidth": 0,
30346          /**
30347           * Callback functions array for every time a row is inserted (i.e. on a draw).
30348           *  @type array
30349           *  @default []
30350           */
30351          "aoRowCallback": [],
30352          /**
30353           * Callback functions for the header on each draw.
30354           *  @type array
30355           *  @default []
30356           */
30357          "aoHeaderCallback": [],
30358          /**
30359           * Callback function for the footer on each draw.
30360           *  @type array
30361           *  @default []
30362           */
30363          "aoFooterCallback": [],
30364          /**
30365           * Array of callback functions for draw callback functions
30366           *  @type array
30367           *  @default []
30368           */
30369          "aoDrawCallback": [],
30370          /**
30371           * Array of callback functions for row created function
30372           *  @type array
30373           *  @default []
30374           */
30375          "aoRowCreatedCallback": [],
30376          /**
30377           * Callback functions for just before the table is redrawn. A return of
30378           * false will be used to cancel the draw.
30379           *  @type array
30380           *  @default []
30381           */
30382          "aoPreDrawCallback": [],
30383          /**
30384           * Callback functions for when the table has been initialised.
30385           *  @type array
30386           *  @default []
30387           */
30388          "aoInitComplete": [],
30389          /**
30390           * Callbacks for modifying the settings to be stored for state saving, prior to
30391           * saving state.
30392           *  @type array
30393           *  @default []
30394           */
30395          "aoStateSaveParams": [],
30396          /**
30397           * Callbacks for modifying the settings that have been stored for state saving
30398           * prior to using the stored values to restore the state.
30399           *  @type array
30400           *  @default []
30401           */
30402          "aoStateLoadParams": [],
30403          /**
30404           * Callbacks for operating on the settings object once the saved state has been
30405           * loaded
30406           *  @type array
30407           *  @default []
30408           */
30409          "aoStateLoaded": [],
30410          /**
30411           * Cache the table ID for quick access
30412           *  @type string
30413           *  @default <i>Empty string</i>
30414           */
30415          "sTableId": "",
30416          /**
30417           * The TABLE node for the main table
30418           *  @type node
30419           *  @default null
30420           */
30421          "nTable": null,
30422          /**
30423           * Permanent ref to the thead element
30424           *  @type node
30425           *  @default null
30426           */
30427          "nTHead": null,
30428          /**
30429           * Permanent ref to the tfoot element - if it exists
30430           *  @type node
30431           *  @default null
30432           */
30433          "nTFoot": null,
30434          /**
30435           * Permanent ref to the tbody element
30436           *  @type node
30437           *  @default null
30438           */
30439          "nTBody": null,
30440          /**
30441           * Cache the wrapper node (contains all DataTables controlled elements)
30442           *  @type node
30443           *  @default null
30444           */
30445          "nTableWrapper": null,
30446          /**
30447           * Indicate if when using server-side processing the loading of data
30448           * should be deferred until the second draw.
30449           * Note that this parameter will be set by the initialisation routine. To
30450           * set a default use {@link DataTable.defaults}.
30451           *  @type boolean
30452           *  @default false
30453           */
30454          "bDeferLoading": false,
30455          /**
30456           * Indicate if all required information has been read in
30457           *  @type boolean
30458           *  @default false
30459           */
30460          "bInitialised": false,
30461          /**
30462           * Information about open rows. Each object in the array has the parameters
30463           * 'nTr' and 'nParent'
30464           *  @type array
30465           *  @default []
30466           */
30467          "aoOpenRows": [],
30468          /**
30469           * Dictate the positioning of DataTables' control elements - see
30470           * {@link DataTable.model.oInit.sDom}.
30471           * Note that this parameter will be set by the initialisation routine. To
30472           * set a default use {@link DataTable.defaults}.
30473           *  @type string
30474           *  @default null
30475           */
30476          "sDom": null,
30477          /**
30478           * Search delay (in mS)
30479           *  @type integer
30480           *  @default null
30481           */
30482          "searchDelay": null,
30483          /**
30484           * Which type of pagination should be used.
30485           * Note that this parameter will be set by the initialisation routine. To
30486           * set a default use {@link DataTable.defaults}.
30487           *  @type string
30488           *  @default two_button
30489           */
30490          "sPaginationType": "two_button",
30491          /**
30492           * The state duration (for `stateSave`) in seconds.
30493           * Note that this parameter will be set by the initialisation routine. To
30494           * set a default use {@link DataTable.defaults}.
30495           *  @type int
30496           *  @default 0
30497           */
30498          "iStateDuration": 0,
30499          /**
30500           * Array of callback functions for state saving. Each array element is an
30501           * object with the following parameters:
30502           *   <ul>
30503           *     <li>function:fn - function to call. Takes two parameters, oSettings
30504           *       and the JSON string to save that has been thus far created. Returns
30505           *       a JSON string to be inserted into a json object
30506           *       (i.e. '"param": [ 0, 1, 2]')</li>
30507           *     <li>string:sName - name of callback</li>
30508           *   </ul>
30509           *  @type array
30510           *  @default []
30511           */
30512          "aoStateSave": [],
30513          /**
30514           * Array of callback functions for state loading. Each array element is an
30515           * object with the following parameters:
30516           *   <ul>
30517           *     <li>function:fn - function to call. Takes two parameters, oSettings
30518           *       and the object stored. May return false to cancel state loading</li>
30519           *     <li>string:sName - name of callback</li>
30520           *   </ul>
30521           *  @type array
30522           *  @default []
30523           */
30524          "aoStateLoad": [],
30525          /**
30526           * State that was saved. Useful for back reference
30527           *  @type object
30528           *  @default null
30529           */
30530          "oSavedState": null,
30531          /**
30532           * State that was loaded. Useful for back reference
30533           *  @type object
30534           *  @default null
30535           */
30536          "oLoadedState": null,
30537          /**
30538           * Source url for AJAX data for the table.
30539           * Note that this parameter will be set by the initialisation routine. To
30540           * set a default use {@link DataTable.defaults}.
30541           *  @type string
30542           *  @default null
30543           */
30544          "sAjaxSource": null,
30545          /**
30546           * Property from a given object from which to read the table data from. This
30547           * can be an empty string (when not server-side processing), in which case
30548           * it is  assumed an an array is given directly.
30549           * Note that this parameter will be set by the initialisation routine. To
30550           * set a default use {@link DataTable.defaults}.
30551           *  @type string
30552           */
30553          "sAjaxDataProp": null,
30554          /**
30555           * The last jQuery XHR object that was used for server-side data gathering.
30556           * This can be used for working with the XHR information in one of the
30557           * callbacks
30558           *  @type object
30559           *  @default null
30560           */
30561          "jqXHR": null,
30562          /**
30563           * JSON returned from the server in the last Ajax request
30564           *  @type object
30565           *  @default undefined
30566           */
30567          "json": undefined2,
30568          /**
30569           * Data submitted as part of the last Ajax request
30570           *  @type object
30571           *  @default undefined
30572           */
30573          "oAjaxData": undefined2,
30574          /**
30575           * Function to get the server-side data.
30576           * Note that this parameter will be set by the initialisation routine. To
30577           * set a default use {@link DataTable.defaults}.
30578           *  @type function
30579           */
30580          "fnServerData": null,
30581          /**
30582           * Functions which are called prior to sending an Ajax request so extra
30583           * parameters can easily be sent to the server
30584           *  @type array
30585           *  @default []
30586           */
30587          "aoServerParams": [],
30588          /**
30589           * Send the XHR HTTP method - GET or POST (could be PUT or DELETE if
30590           * required).
30591           * Note that this parameter will be set by the initialisation routine. To
30592           * set a default use {@link DataTable.defaults}.
30593           *  @type string
30594           */
30595          "sServerMethod": null,
30596          /**
30597           * Format numbers for display.
30598           * Note that this parameter will be set by the initialisation routine. To
30599           * set a default use {@link DataTable.defaults}.
30600           *  @type function
30601           */
30602          "fnFormatNumber": null,
30603          /**
30604           * List of options that can be used for the user selectable length menu.
30605           * Note that this parameter will be set by the initialisation routine. To
30606           * set a default use {@link DataTable.defaults}.
30607           *  @type array
30608           *  @default []
30609           */
30610          "aLengthMenu": null,
30611          /**
30612           * Counter for the draws that the table does. Also used as a tracker for
30613           * server-side processing
30614           *  @type int
30615           *  @default 0
30616           */
30617          "iDraw": 0,
30618          /**
30619           * Indicate if a redraw is being done - useful for Ajax
30620           *  @type boolean
30621           *  @default false
30622           */
30623          "bDrawing": false,
30624          /**
30625           * Draw index (iDraw) of the last error when parsing the returned data
30626           *  @type int
30627           *  @default -1
30628           */
30629          "iDrawError": -1,
30630          /**
30631           * Paging display length
30632           *  @type int
30633           *  @default 10
30634           */
30635          "_iDisplayLength": 10,
30636          /**
30637           * Paging start point - aiDisplay index
30638           *  @type int
30639           *  @default 0
30640           */
30641          "_iDisplayStart": 0,
30642          /**
30643           * Server-side processing - number of records in the result set
30644           * (i.e. before filtering), Use fnRecordsTotal rather than
30645           * this property to get the value of the number of records, regardless of
30646           * the server-side processing setting.
30647           *  @type int
30648           *  @default 0
30649           *  @private
30650           */
30651          "_iRecordsTotal": 0,
30652          /**
30653           * Server-side processing - number of records in the current display set
30654           * (i.e. after filtering). Use fnRecordsDisplay rather than
30655           * this property to get the value of the number of records, regardless of
30656           * the server-side processing setting.
30657           *  @type boolean
30658           *  @default 0
30659           *  @private
30660           */
30661          "_iRecordsDisplay": 0,
30662          /**
30663           * The classes to use for the table
30664           *  @type object
30665           *  @default {}
30666           */
30667          "oClasses": {},
30668          /**
30669           * Flag attached to the settings object so you can check in the draw
30670           * callback if filtering has been done in the draw. Deprecated in favour of
30671           * events.
30672           *  @type boolean
30673           *  @default false
30674           *  @deprecated
30675           */
30676          "bFiltered": false,
30677          /**
30678           * Flag attached to the settings object so you can check in the draw
30679           * callback if sorting has been done in the draw. Deprecated in favour of
30680           * events.
30681           *  @type boolean
30682           *  @default false
30683           *  @deprecated
30684           */
30685          "bSorted": false,
30686          /**
30687           * Indicate that if multiple rows are in the header and there is more than
30688           * one unique cell per column, if the top one (true) or bottom one (false)
30689           * should be used for sorting / title by DataTables.
30690           * Note that this parameter will be set by the initialisation routine. To
30691           * set a default use {@link DataTable.defaults}.
30692           *  @type boolean
30693           */
30694          "bSortCellsTop": null,
30695          /**
30696           * Initialisation object that is used for the table
30697           *  @type object
30698           *  @default null
30699           */
30700          "oInit": null,
30701          /**
30702           * Destroy callback functions - for plug-ins to attach themselves to the
30703           * destroy so they can clean up markup and events.
30704           *  @type array
30705           *  @default []
30706           */
30707          "aoDestroyCallback": [],
30708          /**
30709           * Get the number of records in the current record set, before filtering
30710           *  @type function
30711           */
30712          "fnRecordsTotal": function() {
30713            return _fnDataSource(this) == "ssp" ? this._iRecordsTotal * 1 : this.aiDisplayMaster.length;
30714          },
30715          /**
30716           * Get the number of records in the current record set, after filtering
30717           *  @type function
30718           */
30719          "fnRecordsDisplay": function() {
30720            return _fnDataSource(this) == "ssp" ? this._iRecordsDisplay * 1 : this.aiDisplay.length;
30721          },
30722          /**
30723           * Get the display end point - aiDisplay index
30724           *  @type function
30725           */
30726          "fnDisplayEnd": function() {
30727            var len = this._iDisplayLength, start = this._iDisplayStart, calc = start + len, records = this.aiDisplay.length, features = this.oFeatures, paginate = features.bPaginate;
30728            if (features.bServerSide) {
30729              return paginate === false || len === -1 ? start + records : Math.min(start + len, this._iRecordsDisplay);
30730            } else {
30731              return !paginate || calc > records || len === -1 ? records : calc;
30732            }
30733          },
30734          /**
30735           * The DataTables object for this table
30736           *  @type object
30737           *  @default null
30738           */
30739          "oInstance": null,
30740          /**
30741           * Unique identifier for each instance of the DataTables object. If there
30742           * is an ID on the table node, then it takes that value, otherwise an
30743           * incrementing internal counter is used.
30744           *  @type string
30745           *  @default null
30746           */
30747          "sInstance": null,
30748          /**
30749           * tabindex attribute value that is added to DataTables control elements, allowing
30750           * keyboard navigation of the table and its controls.
30751           */
30752          "iTabIndex": 0,
30753          /**
30754           * DIV container for the footer scrolling table if scrolling
30755           */
30756          "nScrollHead": null,
30757          /**
30758           * DIV container for the footer scrolling table if scrolling
30759           */
30760          "nScrollFoot": null,
30761          /**
30762           * Last applied sort
30763           *  @type array
30764           *  @default []
30765           */
30766          "aLastSort": [],
30767          /**
30768           * Stored plug-in instances
30769           *  @type object
30770           *  @default {}
30771           */
30772          "oPlugins": {},
30773          /**
30774           * Function used to get a row's id from the row's data
30775           *  @type function
30776           *  @default null
30777           */
30778          "rowIdFn": null,
30779          /**
30780           * Data location where to store a row's id
30781           *  @type string
30782           *  @default null
30783           */
30784          "rowId": null
30785        };
30786        DataTable2.ext = _ext = {
30787          /**
30788           * Buttons. For use with the Buttons extension for DataTables. This is
30789           * defined here so other extensions can define buttons regardless of load
30790           * order. It is _not_ used by DataTables core.
30791           *
30792           *  @type object
30793           *  @default {}
30794           */
30795          buttons: {},
30796          /**
30797           * Element class names
30798           *
30799           *  @type object
30800           *  @default {}
30801           */
30802          classes: {},
30803          /**
30804           * DataTables build type (expanded by the download builder)
30805           *
30806           *  @type string
30807           */
30808          builder: "-source-",
30809          /**
30810           * Error reporting.
30811           * 
30812           * How should DataTables report an error. Can take the value 'alert',
30813           * 'throw', 'none' or a function.
30814           *
30815           *  @type string|function
30816           *  @default alert
30817           */
30818          errMode: "alert",
30819          /**
30820           * Feature plug-ins.
30821           * 
30822           * This is an array of objects which describe the feature plug-ins that are
30823           * available to DataTables. These feature plug-ins are then available for
30824           * use through the `dom` initialisation option.
30825           * 
30826           * Each feature plug-in is described by an object which must have the
30827           * following properties:
30828           * 
30829           * * `fnInit` - function that is used to initialise the plug-in,
30830           * * `cFeature` - a character so the feature can be enabled by the `dom`
30831           *   instillation option. This is case sensitive.
30832           *
30833           * The `fnInit` function has the following input parameters:
30834           *
30835           * 1. `{object}` DataTables settings object: see
30836           *    {@link DataTable.models.oSettings}
30837           *
30838           * And the following return is expected:
30839           * 
30840           * * {node|null} The element which contains your feature. Note that the
30841           *   return may also be void if your plug-in does not require to inject any
30842           *   DOM elements into DataTables control (`dom`) - for example this might
30843           *   be useful when developing a plug-in which allows table control via
30844           *   keyboard entry
30845           *
30846           *  @type array
30847           *
30848           *  @example
30849           *    $.fn.dataTable.ext.features.push( {
30850           *      "fnInit": function( oSettings ) {
30851           *        return new TableTools( { "oDTSettings": oSettings } );
30852           *      },
30853           *      "cFeature": "T"
30854           *    } );
30855           */
30856          feature: [],
30857          /**
30858           * Row searching.
30859           * 
30860           * This method of searching is complimentary to the default type based
30861           * searching, and a lot more comprehensive as it allows you complete control
30862           * over the searching logic. Each element in this array is a function
30863           * (parameters described below) that is called for every row in the table,
30864           * and your logic decides if it should be included in the searching data set
30865           * or not.
30866           *
30867           * Searching functions have the following input parameters:
30868           *
30869           * 1. `{object}` DataTables settings object: see
30870           *    {@link DataTable.models.oSettings}
30871           * 2. `{array|object}` Data for the row to be processed (same as the
30872           *    original format that was passed in as the data source, or an array
30873           *    from a DOM data source
30874           * 3. `{int}` Row index ({@link DataTable.models.oSettings.aoData}), which
30875           *    can be useful to retrieve the `TR` element if you need DOM interaction.
30876           *
30877           * And the following return is expected:
30878           *
30879           * * {boolean} Include the row in the searched result set (true) or not
30880           *   (false)
30881           *
30882           * Note that as with the main search ability in DataTables, technically this
30883           * is "filtering", since it is subtractive. However, for consistency in
30884           * naming we call it searching here.
30885           *
30886           *  @type array
30887           *  @default []
30888           *
30889           *  @example
30890           *    // The following example shows custom search being applied to the
30891           *    // fourth column (i.e. the data[3] index) based on two input values
30892           *    // from the end-user, matching the data in a certain range.
30893           *    $.fn.dataTable.ext.search.push(
30894           *      function( settings, data, dataIndex ) {
30895           *        var min = document.getElementById('min').value * 1;
30896           *        var max = document.getElementById('max').value * 1;
30897           *        var version = data[3] == "-" ? 0 : data[3]*1;
30898           *
30899           *        if ( min == "" && max == "" ) {
30900           *          return true;
30901           *        }
30902           *        else if ( min == "" && version < max ) {
30903           *          return true;
30904           *        }
30905           *        else if ( min < version && "" == max ) {
30906           *          return true;
30907           *        }
30908           *        else if ( min < version && version < max ) {
30909           *          return true;
30910           *        }
30911           *        return false;
30912           *      }
30913           *    );
30914           */
30915          search: [],
30916          /**
30917           * Selector extensions
30918           *
30919           * The `selector` option can be used to extend the options available for the
30920           * selector modifier options (`selector-modifier` object data type) that
30921           * each of the three built in selector types offer (row, column and cell +
30922           * their plural counterparts). For example the Select extension uses this
30923           * mechanism to provide an option to select only rows, columns and cells
30924           * that have been marked as selected by the end user (`{selected: true}`),
30925           * which can be used in conjunction with the existing built in selector
30926           * options.
30927           *
30928           * Each property is an array to which functions can be pushed. The functions
30929           * take three attributes:
30930           *
30931           * * Settings object for the host table
30932           * * Options object (`selector-modifier` object type)
30933           * * Array of selected item indexes
30934           *
30935           * The return is an array of the resulting item indexes after the custom
30936           * selector has been applied.
30937           *
30938           *  @type object
30939           */
30940          selector: {
30941            cell: [],
30942            column: [],
30943            row: []
30944          },
30945          /**
30946           * Internal functions, exposed for used in plug-ins.
30947           * 
30948           * Please note that you should not need to use the internal methods for
30949           * anything other than a plug-in (and even then, try to avoid if possible).
30950           * The internal function may change between releases.
30951           *
30952           *  @type object
30953           *  @default {}
30954           */
30955          internal: {},
30956          /**
30957           * Legacy configuration options. Enable and disable legacy options that
30958           * are available in DataTables.
30959           *
30960           *  @type object
30961           */
30962          legacy: {
30963            /**
30964             * Enable / disable DataTables 1.9 compatible server-side processing
30965             * requests
30966             *
30967             *  @type boolean
30968             *  @default null
30969             */
30970            ajax: null
30971          },
30972          /**
30973           * Pagination plug-in methods.
30974           * 
30975           * Each entry in this object is a function and defines which buttons should
30976           * be shown by the pagination rendering method that is used for the table:
30977           * {@link DataTable.ext.renderer.pageButton}. The renderer addresses how the
30978           * buttons are displayed in the document, while the functions here tell it
30979           * what buttons to display. This is done by returning an array of button
30980           * descriptions (what each button will do).
30981           *
30982           * Pagination types (the four built in options and any additional plug-in
30983           * options defined here) can be used through the `paginationType`
30984           * initialisation parameter.
30985           *
30986           * The functions defined take two parameters:
30987           *
30988           * 1. `{int} page` The current page index
30989           * 2. `{int} pages` The number of pages in the table
30990           *
30991           * Each function is expected to return an array where each element of the
30992           * array can be one of:
30993           *
30994           * * `first` - Jump to first page when activated
30995           * * `last` - Jump to last page when activated
30996           * * `previous` - Show previous page when activated
30997           * * `next` - Show next page when activated
30998           * * `{int}` - Show page of the index given
30999           * * `{array}` - A nested array containing the above elements to add a
31000           *   containing 'DIV' element (might be useful for styling).
31001           *
31002           * Note that DataTables v1.9- used this object slightly differently whereby
31003           * an object with two functions would be defined for each plug-in. That
31004           * ability is still supported by DataTables 1.10+ to provide backwards
31005           * compatibility, but this option of use is now decremented and no longer
31006           * documented in DataTables 1.10+.
31007           *
31008           *  @type object
31009           *  @default {}
31010           *
31011           *  @example
31012           *    // Show previous, next and current page buttons only
31013           *    $.fn.dataTableExt.oPagination.current = function ( page, pages ) {
31014           *      return [ 'previous', page, 'next' ];
31015           *    };
31016           */
31017          pager: {},
31018          renderer: {
31019            pageButton: {},
31020            header: {}
31021          },
31022          /**
31023           * Ordering plug-ins - custom data source
31024           * 
31025           * The extension options for ordering of data available here is complimentary
31026           * to the default type based ordering that DataTables typically uses. It
31027           * allows much greater control over the the data that is being used to
31028           * order a column, but is necessarily therefore more complex.
31029           * 
31030           * This type of ordering is useful if you want to do ordering based on data
31031           * live from the DOM (for example the contents of an 'input' element) rather
31032           * than just the static string that DataTables knows of.
31033           * 
31034           * The way these plug-ins work is that you create an array of the values you
31035           * wish to be ordering for the column in question and then return that
31036           * array. The data in the array much be in the index order of the rows in
31037           * the table (not the currently ordering order!). Which order data gathering
31038           * function is run here depends on the `dt-init columns.orderDataType`
31039           * parameter that is used for the column (if any).
31040           *
31041           * The functions defined take two parameters:
31042           *
31043           * 1. `{object}` DataTables settings object: see
31044           *    {@link DataTable.models.oSettings}
31045           * 2. `{int}` Target column index
31046           *
31047           * Each function is expected to return an array:
31048           *
31049           * * `{array}` Data for the column to be ordering upon
31050           *
31051           *  @type array
31052           *
31053           *  @example
31054           *    // Ordering using `input` node values
31055           *    $.fn.dataTable.ext.order['dom-text'] = function  ( settings, col )
31056           *    {
31057           *      return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {
31058           *        return $('input', td).val();
31059           *      } );
31060           *    }
31061           */
31062          order: {},
31063          /**
31064           * Type based plug-ins.
31065           *
31066           * Each column in DataTables has a type assigned to it, either by automatic
31067           * detection or by direct assignment using the `type` option for the column.
31068           * The type of a column will effect how it is ordering and search (plug-ins
31069           * can also make use of the column type if required).
31070           *
31071           * @namespace
31072           */
31073          type: {
31074            /**
31075             * Type detection functions.
31076             *
31077             * The functions defined in this object are used to automatically detect
31078             * a column's type, making initialisation of DataTables super easy, even
31079             * when complex data is in the table.
31080             *
31081             * The functions defined take two parameters:
31082             *
31083                *  1. `{*}` Data from the column cell to be analysed
31084                *  2. `{settings}` DataTables settings object. This can be used to
31085                *     perform context specific type detection - for example detection
31086                *     based on language settings such as using a comma for a decimal
31087                *     place. Generally speaking the options from the settings will not
31088                *     be required
31089             *
31090             * Each function is expected to return:
31091             *
31092             * * `{string|null}` Data type detected, or null if unknown (and thus
31093             *   pass it on to the other type detection functions.
31094             *
31095             *  @type array
31096             *
31097             *  @example
31098             *    // Currency type detection plug-in:
31099             *    $.fn.dataTable.ext.type.detect.push(
31100             *      function ( data, settings ) {
31101             *        // Check the numeric part
31102             *        if ( ! data.substring(1).match(/[0-9]/) ) {
31103             *          return null;
31104             *        }
31105             *
31106             *        // Check prefixed by currency
31107             *        if ( data.charAt(0) == '$' || data.charAt(0) == '&pound;' ) {
31108             *          return 'currency';
31109             *        }
31110             *        return null;
31111             *      }
31112             *    );
31113             */
31114            detect: [],
31115            /**
31116             * Type based search formatting.
31117             *
31118             * The type based searching functions can be used to pre-format the
31119             * data to be search on. For example, it can be used to strip HTML
31120             * tags or to de-format telephone numbers for numeric only searching.
31121             *
31122             * Note that is a search is not defined for a column of a given type,
31123             * no search formatting will be performed.
31124             * 
31125             * Pre-processing of searching data plug-ins - When you assign the sType
31126             * for a column (or have it automatically detected for you by DataTables
31127             * or a type detection plug-in), you will typically be using this for
31128             * custom sorting, but it can also be used to provide custom searching
31129             * by allowing you to pre-processing the data and returning the data in
31130             * the format that should be searched upon. This is done by adding
31131             * functions this object with a parameter name which matches the sType
31132             * for that target column. This is the corollary of <i>afnSortData</i>
31133             * for searching data.
31134             *
31135             * The functions defined take a single parameter:
31136             *
31137                *  1. `{*}` Data from the column cell to be prepared for searching
31138             *
31139             * Each function is expected to return:
31140             *
31141             * * `{string|null}` Formatted string that will be used for the searching.
31142             *
31143             *  @type object
31144             *  @default {}
31145             *
31146             *  @example
31147             *    $.fn.dataTable.ext.type.search['title-numeric'] = function ( d ) {
31148             *      return d.replace(/\n/g," ").replace( /<.*?>/g, "" );
31149             *    }
31150             */
31151            search: {},
31152            /**
31153             * Type based ordering.
31154             *
31155             * The column type tells DataTables what ordering to apply to the table
31156             * when a column is sorted upon. The order for each type that is defined,
31157             * is defined by the functions available in this object.
31158             *
31159             * Each ordering option can be described by three properties added to
31160             * this object:
31161             *
31162             * * `{type}-pre` - Pre-formatting function
31163             * * `{type}-asc` - Ascending order function
31164             * * `{type}-desc` - Descending order function
31165             *
31166             * All three can be used together, only `{type}-pre` or only
31167             * `{type}-asc` and `{type}-desc` together. It is generally recommended
31168             * that only `{type}-pre` is used, as this provides the optimal
31169             * implementation in terms of speed, although the others are provided
31170             * for compatibility with existing Javascript sort functions.
31171             *
31172             * `{type}-pre`: Functions defined take a single parameter:
31173             *
31174                *  1. `{*}` Data from the column cell to be prepared for ordering
31175             *
31176             * And return:
31177             *
31178             * * `{*}` Data to be sorted upon
31179             *
31180             * `{type}-asc` and `{type}-desc`: Functions are typical Javascript sort
31181             * functions, taking two parameters:
31182             *
31183                *  1. `{*}` Data to compare to the second parameter
31184                *  2. `{*}` Data to compare to the first parameter
31185             *
31186             * And returning:
31187             *
31188             * * `{*}` Ordering match: <0 if first parameter should be sorted lower
31189             *   than the second parameter, ===0 if the two parameters are equal and
31190             *   >0 if the first parameter should be sorted height than the second
31191             *   parameter.
31192             * 
31193             *  @type object
31194             *  @default {}
31195             *
31196             *  @example
31197             *    // Numeric ordering of formatted numbers with a pre-formatter
31198             *    $.extend( $.fn.dataTable.ext.type.order, {
31199             *      "string-pre": function(x) {
31200             *        a = (a === "-" || a === "") ? 0 : a.replace( /[^\d\-\.]/g, "" );
31201             *        return parseFloat( a );
31202             *      }
31203             *    } );
31204             *
31205             *  @example
31206             *    // Case-sensitive string ordering, with no pre-formatting method
31207             *    $.extend( $.fn.dataTable.ext.order, {
31208             *      "string-case-asc": function(x,y) {
31209             *        return ((x < y) ? -1 : ((x > y) ? 1 : 0));
31210             *      },
31211             *      "string-case-desc": function(x,y) {
31212             *        return ((x < y) ? 1 : ((x > y) ? -1 : 0));
31213             *      }
31214             *    } );
31215             */
31216            order: {}
31217          },
31218          /**
31219           * Unique DataTables instance counter
31220           *
31221           * @type int
31222           * @private
31223           */
31224          _unique: 0,
31225          //
31226          // Depreciated
31227          // The following properties are retained for backwards compatibility only.
31228          // The should not be used in new projects and will be removed in a future
31229          // version
31230          //
31231          /**
31232           * Version check function.
31233           *  @type function
31234           *  @depreciated Since 1.10
31235           */
31236          fnVersionCheck: DataTable2.fnVersionCheck,
31237          /**
31238           * Index for what 'this' index API functions should use
31239           *  @type int
31240           *  @deprecated Since v1.10
31241           */
31242          iApiIndex: 0,
31243          /**
31244           * jQuery UI class container
31245           *  @type object
31246           *  @deprecated Since v1.10
31247           */
31248          oJUIClasses: {},
31249          /**
31250           * Software version
31251           *  @type string
31252           *  @deprecated Since v1.10
31253           */
31254          sVersion: DataTable2.version
31255        };
31256        $3.extend(_ext, {
31257          afnFiltering: _ext.search,
31258          aTypes: _ext.type.detect,
31259          ofnSearch: _ext.type.search,
31260          oSort: _ext.type.order,
31261          afnSortData: _ext.order,
31262          aoFeatures: _ext.feature,
31263          oApi: _ext.internal,
31264          oStdClasses: _ext.classes,
31265          oPagination: _ext.pager
31266        });
31267        $3.extend(DataTable2.ext.classes, {
31268          "sTable": "dataTable",
31269          "sNoFooter": "no-footer",
31270          /* Paging buttons */
31271          "sPageButton": "paginate_button",
31272          "sPageButtonActive": "current",
31273          "sPageButtonDisabled": "disabled",
31274          /* Striping classes */
31275          "sStripeOdd": "odd",
31276          "sStripeEven": "even",
31277          /* Empty row */
31278          "sRowEmpty": "dataTables_empty",
31279          /* Features */
31280          "sWrapper": "dataTables_wrapper",
31281          "sFilter": "dataTables_filter",
31282          "sInfo": "dataTables_info",
31283          "sPaging": "dataTables_paginate paging_",
31284          /* Note that the type is postfixed */
31285          "sLength": "dataTables_length",
31286          "sProcessing": "dataTables_processing",
31287          /* Sorting */
31288          "sSortAsc": "sorting_asc",
31289          "sSortDesc": "sorting_desc",
31290          "sSortable": "sorting",
31291          /* Sortable in both directions */
31292          "sSortableAsc": "sorting_desc_disabled",
31293          "sSortableDesc": "sorting_asc_disabled",
31294          "sSortableNone": "sorting_disabled",
31295          "sSortColumn": "sorting_",
31296          /* Note that an int is postfixed for the sorting order */
31297          /* Filtering */
31298          "sFilterInput": "",
31299          /* Page length */
31300          "sLengthSelect": "",
31301          /* Scrolling */
31302          "sScrollWrapper": "dataTables_scroll",
31303          "sScrollHead": "dataTables_scrollHead",
31304          "sScrollHeadInner": "dataTables_scrollHeadInner",
31305          "sScrollBody": "dataTables_scrollBody",
31306          "sScrollFoot": "dataTables_scrollFoot",
31307          "sScrollFootInner": "dataTables_scrollFootInner",
31308          /* Misc */
31309          "sHeaderTH": "",
31310          "sFooterTH": "",
31311          // Deprecated
31312          "sSortJUIAsc": "",
31313          "sSortJUIDesc": "",
31314          "sSortJUI": "",
31315          "sSortJUIAscAllowed": "",
31316          "sSortJUIDescAllowed": "",
31317          "sSortJUIWrapper": "",
31318          "sSortIcon": "",
31319          "sJUIHeader": "",
31320          "sJUIFooter": ""
31321        });
31322        var extPagination = DataTable2.ext.pager;
31323        function _numbers(page, pages) {
31324          var numbers = [], buttons = extPagination.numbers_length, half = Math.floor(buttons / 2), i2 = 1;
31325          if (pages <= buttons) {
31326            numbers = _range(0, pages);
31327          } else if (page <= half) {
31328            numbers = _range(0, buttons - 2);
31329            numbers.push("ellipsis");
31330            numbers.push(pages - 1);
31331          } else if (page >= pages - 1 - half) {
31332            numbers = _range(pages - (buttons - 2), pages);
31333            numbers.splice(0, 0, "ellipsis");
31334            numbers.splice(0, 0, 0);
31335          } else {
31336            numbers = _range(page - half + 2, page + half - 1);
31337            numbers.push("ellipsis");
31338            numbers.push(pages - 1);
31339            numbers.splice(0, 0, "ellipsis");
31340            numbers.splice(0, 0, 0);
31341          }
31342          numbers.DT_el = "span";
31343          return numbers;
31344        }
31345        $3.extend(extPagination, {
31346          simple: function(page, pages) {
31347            return ["previous", "next"];
31348          },
31349          full: function(page, pages) {
31350            return ["first", "previous", "next", "last"];
31351          },
31352          numbers: function(page, pages) {
31353            return [_numbers(page, pages)];
31354          },
31355          simple_numbers: function(page, pages) {
31356            return ["previous", _numbers(page, pages), "next"];
31357          },
31358          full_numbers: function(page, pages) {
31359            return ["first", "previous", _numbers(page, pages), "next", "last"];
31360          },
31361          first_last_numbers: function(page, pages) {
31362            return ["first", _numbers(page, pages), "last"];
31363          },
31364          // For testing and plug-ins to use
31365          _numbers,
31366          // Number of number buttons (including ellipsis) to show. _Must be odd!_
31367          numbers_length: 7
31368        });
31369        $3.extend(true, DataTable2.ext.renderer, {
31370          pageButton: {
31371            _: function(settings, host, idx, buttons, page, pages) {
31372              var classes = settings.oClasses;
31373              var lang = settings.oLanguage.oPaginate;
31374              var aria = settings.oLanguage.oAria.paginate || {};
31375              var btnDisplay, btnClass;
31376              var attach = function(container, buttons2) {
31377                var i2, ien, node, button;
31378                var disabledClass = classes.sPageButtonDisabled;
31379                var clickHandler = function(e) {
31380                  _fnPageChange(settings, e.data.action, true);
31381                };
31382                for (i2 = 0, ien = buttons2.length; i2 < ien; i2++) {
31383                  button = buttons2[i2];
31384                  if (Array.isArray(button)) {
31385                    var inner = $3("<" + (button.DT_el || "div") + "/>").appendTo(container);
31386                    attach(inner, button);
31387                  } else {
31388                    var disabled = false;
31389                    btnDisplay = null;
31390                    btnClass = button;
31391                    switch (button) {
31392                      case "ellipsis":
31393                        container.append('<span class="ellipsis">&#x2026;</span>');
31394                        break;
31395                      case "first":
31396                        btnDisplay = lang.sFirst;
31397                        if (page === 0) {
31398                          disabled = true;
31399                        }
31400                        break;
31401                      case "previous":
31402                        btnDisplay = lang.sPrevious;
31403                        if (page === 0) {
31404                          disabled = true;
31405                        }
31406                        break;
31407                      case "next":
31408                        btnDisplay = lang.sNext;
31409                        if (pages === 0 || page === pages - 1) {
31410                          disabled = true;
31411                        }
31412                        break;
31413                      case "last":
31414                        btnDisplay = lang.sLast;
31415                        if (pages === 0 || page === pages - 1) {
31416                          disabled = true;
31417                        }
31418                        break;
31419                      default:
31420                        btnDisplay = settings.fnFormatNumber(button + 1);
31421                        btnClass = page === button ? classes.sPageButtonActive : "";
31422                        break;
31423                    }
31424                    if (btnDisplay !== null) {
31425                      var tag = settings.oInit.pagingTag || "a";
31426                      if (disabled) {
31427                        btnClass += " " + disabledClass;
31428                      }
31429                      node = $3("<" + tag + ">", {
31430                        "class": classes.sPageButton + " " + btnClass,
31431                        "aria-controls": settings.sTableId,
31432                        "aria-disabled": disabled ? "true" : null,
31433                        "aria-label": aria[button],
31434                        "role": "link",
31435                        "aria-current": btnClass === classes.sPageButtonActive ? "page" : null,
31436                        "data-dt-idx": button,
31437                        "tabindex": disabled ? -1 : settings.iTabIndex,
31438                        "id": idx === 0 && typeof button === "string" ? settings.sTableId + "_" + button : null
31439                      }).html(btnDisplay).appendTo(container);
31440                      _fnBindAction(
31441                        node,
31442                        { action: button },
31443                        clickHandler
31444                      );
31445                    }
31446                  }
31447                }
31448              };
31449              var activeEl;
31450              try {
31451                activeEl = $3(host).find(document2.activeElement).data("dt-idx");
31452              } catch (e) {
31453              }
31454              attach($3(host).empty(), buttons);
31455              if (activeEl !== undefined2) {
31456                $3(host).find("[data-dt-idx=" + activeEl + "]").trigger("focus");
31457              }
31458            }
31459          }
31460        });
31461        $3.extend(DataTable2.ext.type.detect, [
31462          // Plain numbers - first since V8 detects some plain numbers as dates
31463          // e.g. Date.parse('55') (but not all, e.g. Date.parse('22')...).
31464          function(d, settings) {
31465            var decimal = settings.oLanguage.sDecimal;
31466            return _isNumber(d, decimal) ? "num" + decimal : null;
31467          },
31468          // Dates (only those recognised by the browser's Date.parse)
31469          function(d, settings) {
31470            if (d && !(d instanceof Date) && !_re_date.test(d)) {
31471              return null;
31472            }
31473            var parsed = Date.parse(d);
31474            return parsed !== null && !isNaN(parsed) || _empty(d) ? "date" : null;
31475          },
31476          // Formatted numbers
31477          function(d, settings) {
31478            var decimal = settings.oLanguage.sDecimal;
31479            return _isNumber(d, decimal, true) ? "num-fmt" + decimal : null;
31480          },
31481          // HTML numeric
31482          function(d, settings) {
31483            var decimal = settings.oLanguage.sDecimal;
31484            return _htmlNumeric(d, decimal) ? "html-num" + decimal : null;
31485          },
31486          // HTML numeric, formatted
31487          function(d, settings) {
31488            var decimal = settings.oLanguage.sDecimal;
31489            return _htmlNumeric(d, decimal, true) ? "html-num-fmt" + decimal : null;
31490          },
31491          // HTML (this is strict checking - there must be html)
31492          function(d, settings) {
31493            return _empty(d) || typeof d === "string" && d.indexOf("<") !== -1 ? "html" : null;
31494          }
31495        ]);
31496        $3.extend(DataTable2.ext.type.search, {
31497          html: function(data) {
31498            return _empty(data) ? data : typeof data === "string" ? data.replace(_re_new_lines, " ").replace(_re_html, "") : "";
31499          },
31500          string: function(data) {
31501            return _empty(data) ? data : typeof data === "string" ? data.replace(_re_new_lines, " ") : data;
31502          }
31503        });
31504        var __numericReplace = function(d, decimalPlace, re1, re2) {
31505          if (d !== 0 && (!d || d === "-")) {
31506            return -Infinity;
31507          }
31508          var type = typeof d;
31509          if (type === "number" || type === "bigint") {
31510            return d;
31511          }
31512          if (decimalPlace) {
31513            d = _numToDecimal(d, decimalPlace);
31514          }
31515          if (d.replace) {
31516            if (re1) {
31517              d = d.replace(re1, "");
31518            }
31519            if (re2) {
31520              d = d.replace(re2, "");
31521            }
31522          }
31523          return d * 1;
31524        };
31525        function _addNumericSort(decimalPlace) {
31526          $3.each(
31527            {
31528              // Plain numbers
31529              "num": function(d) {
31530                return __numericReplace(d, decimalPlace);
31531              },
31532              // Formatted numbers
31533              "num-fmt": function(d) {
31534                return __numericReplace(d, decimalPlace, _re_formatted_numeric);
31535              },
31536              // HTML numeric
31537              "html-num": function(d) {
31538                return __numericReplace(d, decimalPlace, _re_html);
31539              },
31540              // HTML numeric, formatted
31541              "html-num-fmt": function(d) {
31542                return __numericReplace(d, decimalPlace, _re_html, _re_formatted_numeric);
31543              }
31544            },
31545            function(key, fn) {
31546              _ext.type.order[key + decimalPlace + "-pre"] = fn;
31547              if (key.match(/^html\-/)) {
31548                _ext.type.search[key + decimalPlace] = _ext.type.search.html;
31549              }
31550            }
31551          );
31552        }
31553        $3.extend(_ext.type.order, {
31554          // Dates
31555          "date-pre": function(d) {
31556            var ts = Date.parse(d);
31557            return isNaN(ts) ? -Infinity : ts;
31558          },
31559          // html
31560          "html-pre": function(a) {
31561            return _empty(a) ? "" : a.replace ? a.replace(/<.*?>/g, "").toLowerCase() : a + "";
31562          },
31563          // string
31564          "string-pre": function(a) {
31565            return _empty(a) ? "" : typeof a === "string" ? a.toLowerCase() : !a.toString ? "" : a.toString();
31566          },
31567          // string-asc and -desc are retained only for compatibility with the old
31568          // sort methods
31569          "string-asc": function(x, y) {
31570            return x < y ? -1 : x > y ? 1 : 0;
31571          },
31572          "string-desc": function(x, y) {
31573            return x < y ? 1 : x > y ? -1 : 0;
31574          }
31575        });
31576        _addNumericSort("");
31577        $3.extend(true, DataTable2.ext.renderer, {
31578          header: {
31579            _: function(settings, cell, column, classes) {
31580              $3(settings.nTable).on("order.dt.DT", function(e, ctx, sorting, columns) {
31581                if (settings !== ctx) {
31582                  return;
31583                }
31584                var colIdx = column.idx;
31585                cell.removeClass(
31586                  classes.sSortAsc + " " + classes.sSortDesc
31587                ).addClass(
31588                  columns[colIdx] == "asc" ? classes.sSortAsc : columns[colIdx] == "desc" ? classes.sSortDesc : column.sSortingClass
31589                );
31590              });
31591            },
31592            jqueryui: function(settings, cell, column, classes) {
31593              $3("<div/>").addClass(classes.sSortJUIWrapper).append(cell.contents()).append(
31594                $3("<span/>").addClass(classes.sSortIcon + " " + column.sSortingClassJUI)
31595              ).appendTo(cell);
31596              $3(settings.nTable).on("order.dt.DT", function(e, ctx, sorting, columns) {
31597                if (settings !== ctx) {
31598                  return;
31599                }
31600                var colIdx = column.idx;
31601                cell.removeClass(classes.sSortAsc + " " + classes.sSortDesc).addClass(
31602                  columns[colIdx] == "asc" ? classes.sSortAsc : columns[colIdx] == "desc" ? classes.sSortDesc : column.sSortingClass
31603                );
31604                cell.find("span." + classes.sSortIcon).removeClass(
31605                  classes.sSortJUIAsc + " " + classes.sSortJUIDesc + " " + classes.sSortJUI + " " + classes.sSortJUIAscAllowed + " " + classes.sSortJUIDescAllowed
31606                ).addClass(
31607                  columns[colIdx] == "asc" ? classes.sSortJUIAsc : columns[colIdx] == "desc" ? classes.sSortJUIDesc : column.sSortingClassJUI
31608                );
31609              });
31610            }
31611          }
31612        });
31613        var __htmlEscapeEntities = function(d) {
31614          if (Array.isArray(d)) {
31615            d = d.join(",");
31616          }
31617          return typeof d === "string" ? d.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;") : d;
31618        };
31619        function __mld(dt, momentFn, luxonFn, dateFn, arg1) {
31620          if (window2.moment) {
31621            return dt[momentFn](arg1);
31622          } else if (window2.luxon) {
31623            return dt[luxonFn](arg1);
31624          }
31625          return dateFn ? dt[dateFn](arg1) : dt;
31626        }
31627        var __mlWarning = false;
31628        function __mldObj(d, format, locale) {
31629          var dt;
31630          if (window2.moment) {
31631            dt = window2.moment.utc(d, format, locale, true);
31632            if (!dt.isValid()) {
31633              return null;
31634            }
31635          } else if (window2.luxon) {
31636            dt = format && typeof d === "string" ? window2.luxon.DateTime.fromFormat(d, format) : window2.luxon.DateTime.fromISO(d);
31637            if (!dt.isValid) {
31638              return null;
31639            }
31640            dt.setLocale(locale);
31641          } else if (!format) {
31642            dt = new Date(d);
31643          } else {
31644            if (!__mlWarning) {
31645              alert("DataTables warning: Formatted date without Moment.js or Luxon - https://datatables.net/tn/17");
31646            }
31647            __mlWarning = true;
31648          }
31649          return dt;
31650        }
31651        function __mlHelper(localeString) {
31652          return function(from, to, locale, def) {
31653            if (arguments.length === 0) {
31654              locale = "en";
31655              to = null;
31656              from = null;
31657            } else if (arguments.length === 1) {
31658              locale = "en";
31659              to = from;
31660              from = null;
31661            } else if (arguments.length === 2) {
31662              locale = to;
31663              to = from;
31664              from = null;
31665            }
31666            var typeName = "datetime-" + to;
31667            if (!DataTable2.ext.type.order[typeName]) {
31668              DataTable2.ext.type.detect.unshift(function(d) {
31669                return d === typeName ? typeName : false;
31670              });
31671              DataTable2.ext.type.order[typeName + "-asc"] = function(a, b) {
31672                var x = a.valueOf();
31673                var y = b.valueOf();
31674                return x === y ? 0 : x < y ? -1 : 1;
31675              };
31676              DataTable2.ext.type.order[typeName + "-desc"] = function(a, b) {
31677                var x = a.valueOf();
31678                var y = b.valueOf();
31679                return x === y ? 0 : x > y ? -1 : 1;
31680              };
31681            }
31682            return function(d, type) {
31683              if (d === null || d === undefined2) {
31684                if (def === "--now") {
31685                  var local = /* @__PURE__ */ new Date();
31686                  d = new Date(Date.UTC(
31687                    local.getFullYear(),
31688                    local.getMonth(),
31689                    local.getDate(),
31690                    local.getHours(),
31691                    local.getMinutes(),
31692                    local.getSeconds()
31693                  ));
31694                } else {
31695                  d = "";
31696                }
31697              }
31698              if (type === "type") {
31699                return typeName;
31700              }
31701              if (d === "") {
31702                return type !== "sort" ? "" : __mldObj("0000-01-01 00:00:00", null, locale);
31703              }
31704              if (to !== null && from === to && type !== "sort" && type !== "type" && !(d instanceof Date)) {
31705                return d;
31706              }
31707              var dt = __mldObj(d, from, locale);
31708              if (dt === null) {
31709                return d;
31710              }
31711              if (type === "sort") {
31712                return dt;
31713              }
31714              var formatted = to === null ? __mld(dt, "toDate", "toJSDate", "")[localeString]() : __mld(dt, "format", "toFormat", "toISOString", to);
31715              return type === "display" ? __htmlEscapeEntities(formatted) : formatted;
31716            };
31717          };
31718        }
31719        var __thousands = ",";
31720        var __decimal = ".";
31721        if (window2.Intl !== undefined2) {
31722          try {
31723            var num = new Intl.NumberFormat().formatToParts(100000.1);
31724            for (var i = 0; i < num.length; i++) {
31725              if (num[i].type === "group") {
31726                __thousands = num[i].value;
31727              } else if (num[i].type === "decimal") {
31728                __decimal = num[i].value;
31729              }
31730            }
31731          } catch (e) {
31732          }
31733        }
31734        DataTable2.datetime = function(format, locale) {
31735          var typeName = "datetime-detect-" + format;
31736          if (!locale) {
31737            locale = "en";
31738          }
31739          if (!DataTable2.ext.type.order[typeName]) {
31740            DataTable2.ext.type.detect.unshift(function(d) {
31741              var dt = __mldObj(d, format, locale);
31742              return d === "" || dt ? typeName : false;
31743            });
31744            DataTable2.ext.type.order[typeName + "-pre"] = function(d) {
31745              return __mldObj(d, format, locale) || 0;
31746            };
31747          }
31748        };
31749        DataTable2.render = {
31750          date: __mlHelper("toLocaleDateString"),
31751          datetime: __mlHelper("toLocaleString"),
31752          time: __mlHelper("toLocaleTimeString"),
31753          number: function(thousands, decimal, precision, prefix, postfix) {
31754            if (thousands === null || thousands === undefined2) {
31755              thousands = __thousands;
31756            }
31757            if (decimal === null || decimal === undefined2) {
31758              decimal = __decimal;
31759            }
31760            return {
31761              display: function(d) {
31762                if (typeof d !== "number" && typeof d !== "string") {
31763                  return d;
31764                }
31765                if (d === "" || d === null) {
31766                  return d;
31767                }
31768                var negative = d < 0 ? "-" : "";
31769                var flo = parseFloat(d);
31770                if (isNaN(flo)) {
31771                  return __htmlEscapeEntities(d);
31772                }
31773                flo = flo.toFixed(precision);
31774                d = Math.abs(flo);
31775                var intPart = parseInt(d, 10);
31776                var floatPart = precision ? decimal + (d - intPart).toFixed(precision).substring(2) : "";
31777                if (intPart === 0 && parseFloat(floatPart) === 0) {
31778                  negative = "";
31779                }
31780                return negative + (prefix || "") + intPart.toString().replace(
31781                  /\B(?=(\d{3})+(?!\d))/g,
31782                  thousands
31783                ) + floatPart + (postfix || "");
31784              }
31785            };
31786          },
31787          text: function() {
31788            return {
31789              display: __htmlEscapeEntities,
31790              filter: __htmlEscapeEntities
31791            };
31792          }
31793        };
31794        function _fnExternApiFunc(fn) {
31795          return function() {
31796            var args = [_fnSettingsFromNode(this[DataTable2.ext.iApiIndex])].concat(
31797              Array.prototype.slice.call(arguments)
31798            );
31799            return DataTable2.ext.internal[fn].apply(this, args);
31800          };
31801        }
31802        $3.extend(DataTable2.ext.internal, {
31803          _fnExternApiFunc,
31804          _fnBuildAjax,
31805          _fnAjaxUpdate,
31806          _fnAjaxParameters,
31807          _fnAjaxUpdateDraw,
31808          _fnAjaxDataSrc,
31809          _fnAddColumn,
31810          _fnColumnOptions,
31811          _fnAdjustColumnSizing,
31812          _fnVisibleToColumnIndex,
31813          _fnColumnIndexToVisible,
31814          _fnVisbleColumns,
31815          _fnGetColumns,
31816          _fnColumnTypes,
31817          _fnApplyColumnDefs,
31818          _fnHungarianMap,
31819          _fnCamelToHungarian,
31820          _fnLanguageCompat,
31821          _fnBrowserDetect,
31822          _fnAddData,
31823          _fnAddTr,
31824          _fnNodeToDataIndex,
31825          _fnNodeToColumnIndex,
31826          _fnGetCellData,
31827          _fnSetCellData,
31828          _fnSplitObjNotation,
31829          _fnGetObjectDataFn,
31830          _fnSetObjectDataFn,
31831          _fnGetDataMaster,
31832          _fnClearTable,
31833          _fnDeleteIndex,
31834          _fnInvalidate,
31835          _fnGetRowElements,
31836          _fnCreateTr,
31837          _fnBuildHead,
31838          _fnDrawHead,
31839          _fnDraw,
31840          _fnReDraw,
31841          _fnAddOptionsHtml,
31842          _fnDetectHeader,
31843          _fnGetUniqueThs,
31844          _fnFeatureHtmlFilter,
31845          _fnFilterComplete,
31846          _fnFilterCustom,
31847          _fnFilterColumn,
31848          _fnFilter,
31849          _fnFilterCreateSearch,
31850          _fnEscapeRegex,
31851          _fnFilterData,
31852          _fnFeatureHtmlInfo,
31853          _fnUpdateInfo,
31854          _fnInfoMacros,
31855          _fnInitialise,
31856          _fnInitComplete,
31857          _fnLengthChange,
31858          _fnFeatureHtmlLength,
31859          _fnFeatureHtmlPaginate,
31860          _fnPageChange,
31861          _fnFeatureHtmlProcessing,
31862          _fnProcessingDisplay,
31863          _fnFeatureHtmlTable,
31864          _fnScrollDraw,
31865          _fnApplyToChildren,
31866          _fnCalculateColumnWidths,
31867          _fnThrottle,
31868          _fnConvertToWidth,
31869          _fnGetWidestNode,
31870          _fnGetMaxLenString,
31871          _fnStringToCss,
31872          _fnSortFlatten,
31873          _fnSort,
31874          _fnSortAria,
31875          _fnSortListener,
31876          _fnSortAttachListener,
31877          _fnSortingClasses,
31878          _fnSortData,
31879          _fnSaveState,
31880          _fnLoadState,
31881          _fnImplementState,
31882          _fnSettingsFromNode,
31883          _fnLog,
31884          _fnMap,
31885          _fnBindAction,
31886          _fnCallbackReg,
31887          _fnCallbackFire,
31888          _fnLengthOverflow,
31889          _fnRenderer,
31890          _fnDataSource,
31891          _fnRowAttributes,
31892          _fnExtend,
31893          _fnCalculateEnd: function() {
31894          }
31895          // Used by a lot of plug-ins, but redundant
31896          // in 1.10, so this dead-end function is
31897          // added to prevent errors
31898        });
31899        $3.fn.dataTable = DataTable2;
31900        DataTable2.$ = $3;
31901        $3.fn.dataTableSettings = DataTable2.settings;
31902        $3.fn.dataTableExt = DataTable2.ext;
31903        $3.fn.DataTable = function(opts) {
31904          return $3(this).dataTable(opts).api();
31905        };
31906        $3.each(DataTable2, function(prop, val) {
31907          $3.fn.DataTable[prop] = val;
31908        });
31909        return DataTable2;
31910      });
31911    }
31912  });
31913
31914  
31914// apps/base/assets/javascripts/vendor/intro.js
31915  var require_intro = __commonJS({
31916    "apps/base/assets/javascripts/vendor/intro.js"(exports, module) {
31917      "use strict";
31918      init_esbuild_shims();
31919      !(function(t2, e) {
31920        "object" == typeof exports && "undefined" != typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define(e) : (t2 = "undefined" != typeof globalThis ? globalThis : t2 || self).introJs = e();
31921      })(exports, (function() {
31922        "use strict";
31923        function t2(e2) {
31924          return t2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t3) {
31925            return typeof t3;
31926          } : function(t3) {
31927            return t3 && "function" == typeof Symbol && t3.constructor === Symbol && t3 !== Symbol.prototype ? "symbol" : typeof t3;
31928          }, t2(e2);
31929        }
31930        var e = /* @__PURE__ */ (function() {
31931          var t3 = {};
31932          return function(e2) {
31933            var n2 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "introjs-stamp";
31934            return t3[n2] = t3[n2] || 0, void 0 === e2[n2] && (e2[n2] = t3[n2]++), e2[n2];
31935          };
31936        })();
31937        function n(t3, e2, n2) {
31938          if (t3) for (var i2 = 0, o2 = t3.length; i2 < o2; i2++) e2(t3[i2], i2);
31939          "function" == typeof n2 && n2();
31940        }
31941        var i = new function() {
31942          var t3 = "introjs_event";
31943          this._id = function(t4, n2, i2, o2) {
31944            return n2 + e(i2) + (o2 ? "_".concat(e(o2)) : "");
31945          }, this.on = function(e2, n2, i2, o2, r2) {
31946            var a2 = this._id.apply(this, arguments), l2 = function(t4) {
31947              return i2.call(o2 || e2, t4 || window.event);
31948            };
31949            "addEventListener" in e2 ? e2.addEventListener(n2, l2, r2) : "attachEvent" in e2 && e2.attachEvent("on".concat(n2), l2), e2[t3] = e2[t3] || {}, e2[t3][a2] = l2;
31950          }, this.off = function(e2, n2, i2, o2, r2) {
31951            var a2 = this._id.apply(this, arguments), l2 = e2[t3] && e2[t3][a2];
31952            l2 && ("removeEventListener" in e2 ? e2.removeEventListener(n2, l2, r2) : "detachEvent" in e2 && e2.detachEvent("on".concat(n2), l2), e2[t3][a2] = null);
31953          };
31954        }(), o = "undefined" != typeof globalThis ? globalThis : "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : {};
31955        function r(t3, e2) {
31956          return t3(e2 = { exports: {} }, e2.exports), e2.exports;
31957        }
31958        var a, l, s = function(t3) {
31959          return t3 && t3.Math == Math && t3;
31960        }, c = s("object" == typeof globalThis && globalThis) || s("object" == typeof window && window) || s("object" == typeof self && self) || s("object" == typeof o && o) || /* @__PURE__ */ (function() {
31961          return this;
31962        })() || Function("return this")(), u = function(t3) {
31963          try {
31964            return !!t3();
31965          } catch (t4) {
31966            return true;
31967          }
31968        }, h = !u((function() {
31969          return 7 != Object.defineProperty({}, 1, { get: function() {
31970            return 7;
31971          } })[1];
31972        })), f = Function.prototype.call, p = f.bind ? f.bind(f) : function() {
31973          return f.apply(f, arguments);
31974        }, d = {}.propertyIsEnumerable, g = Object.getOwnPropertyDescriptor, v = { f: g && !d.call({ 1: 2 }, 1) ? function(t3) {
31975          var e2 = g(this, t3);
31976          return !!e2 && e2.enumerable;
31977        } : d }, m = function(t3, e2) {
31978          return { enumerable: !(1 & t3), configurable: !(2 & t3), writable: !(4 & t3), value: e2 };
31979        }, b = Function.prototype, y = b.bind, w = b.call, _ = y && y.bind(w), x = y ? function(t3) {
31980          return t3 && _(w, t3);
31981        } : function(t3) {
31982          return t3 && function() {
31983            return w.apply(t3, arguments);
31984          };
31985        }, S = x({}.toString), j = x("".slice), C = function(t3) {
31986          return j(S(t3), 8, -1);
31987        }, k = c.Object, A = x("".split), E = u((function() {
31988          return !k("z").propertyIsEnumerable(0);
31989        })) ? function(t3) {
31990          return "String" == C(t3) ? A(t3, "") : k(t3);
31991        } : k, I = c.TypeError, T = function(t3) {
31992          if (null == t3) throw I("Can't call method on " + t3);
31993          return t3;
31994        }, N = function(t3) {
31995          return E(T(t3));
31996        }, O = function(t3) {
31997          return "function" == typeof t3;
31998        }, P = function(t3) {
31999          return "object" == typeof t3 ? null !== t3 : O(t3);
32000        }, L = function(t3) {
32001          return O(t3) ? t3 : void 0;
32002        }, R = function(t3, e2) {
32003          return arguments.length < 2 ? L(c[t3]) : c[t3] && c[t3][e2];
32004        }, q = x({}.isPrototypeOf), B = R("navigator", "userAgent") || "", M = c.process, H = c.Deno, F = M && M.versions || H && H.version, $3 = F && F.v8;
32005        $3 && (l = (a = $3.split("."))[0] > 0 && a[0] < 4 ? 1 : +(a[0] + a[1])), !l && B && (!(a = B.match(/Edge\/(\d+)/)) || a[1] >= 74) && (a = B.match(/Chrome\/(\d+)/)) && (l = +a[1]);
32006        var D = l, z = !!Object.getOwnPropertySymbols && !u((function() {
32007          var t3 = /* @__PURE__ */ Symbol();
32008          return !String(t3) || !(Object(t3) instanceof Symbol) || !Symbol.sham && D && D < 41;
32009        })), G = z && !Symbol.sham && "symbol" == typeof Symbol.iterator, U = c.Object, W = G ? function(t3) {
32010          return "symbol" == typeof t3;
32011        } : function(t3) {
32012          var e2 = R("Symbol");
32013          return O(e2) && q(e2.prototype, U(t3));
32014        }, V = c.String, Y = function(t3) {
32015          try {
32016            return V(t3);
32017          } catch (t4) {
32018            return "Object";
32019          }
32020        }, K = c.TypeError, X = function(t3) {
32021          if (O(t3)) return t3;
32022          throw K(Y(t3) + " is not a function");
32023        }, J = function(t3, e2) {
32024          var n2 = t3[e2];
32025          return null == n2 ? void 0 : X(n2);
32026        }, Q = c.TypeError, Z = Object.defineProperty, tt = function(t3, e2) {
32027          try {
32028            Z(c, t3, { value: e2, configurable: true, writable: true });
32029          } catch (n2) {
32030            c[t3] = e2;
32031          }
32032          return e2;
32033        }, et = "__core-js_shared__", nt = c[et] || tt(et, {}), it = r((function(t3) {
32034          (t3.exports = function(t4, e2) {
32035            return nt[t4] || (nt[t4] = void 0 !== e2 ? e2 : {});
32036          })("versions", []).push({ version: "3.19.1", mode: "global", copyright: "\xA9 2021 Denis Pushkarev (zloirock.ru)" });
32037        })), ot = c.Object, rt = function(t3) {
32038          return ot(T(t3));
32039        }, at = x({}.hasOwnProperty), lt = Object.hasOwn || function(t3, e2) {
32040          return at(rt(t3), e2);
32041        }, st = 0, ct = Math.random(), ut = x(1 .toString), ht = function(t3) {
32042          return "Symbol(" + (void 0 === t3 ? "" : t3) + ")_" + ut(++st + ct, 36);
32043        }, ft = it("wks"), pt = c.Symbol, dt = pt && pt.for, gt = G ? pt : pt && pt.withoutSetter || ht, vt = function(t3) {
32044          if (!lt(ft, t3) || !z && "string" != typeof ft[t3]) {
32045            var e2 = "Symbol." + t3;
32046            z && lt(pt, t3) ? ft[t3] = pt[t3] : ft[t3] = G && dt ? dt(e2) : gt(e2);
32047          }
32048          return ft[t3];
32049        }, mt = c.TypeError, bt = vt("toPrimitive"), yt = function(t3, e2) {
32050          if (!P(t3) || W(t3)) return t3;
32051          var n2, i2 = J(t3, bt);
32052          if (i2) {
32053            if (void 0 === e2 && (e2 = "default"), n2 = p(i2, t3, e2), !P(n2) || W(n2)) return n2;
32054            throw mt("Can't convert object to primitive value");
32055          }
32056          return void 0 === e2 && (e2 = "number"), (function(t4, e3) {
32057            var n3, i3;
32058            if ("string" === e3 && O(n3 = t4.toString) && !P(i3 = p(n3, t4))) return i3;
32059            if (O(n3 = t4.valueOf) && !P(i3 = p(n3, t4))) return i3;
32060            if ("string" !== e3 && O(n3 = t4.toString) && !P(i3 = p(n3, t4))) return i3;
32061            throw Q("Can't convert object to primitive value");
32062          })(t3, e2);
32063        }, wt = function(t3) {
32064          var e2 = yt(t3, "string");
32065          return W(e2) ? e2 : e2 + "";
32066        }, _t = c.document, xt = P(_t) && P(_t.createElement), St = function(t3) {
32067          return xt ? _t.createElement(t3) : {};
32068        }, jt = !h && !u((function() {
32069          return 7 != Object.defineProperty(St("div"), "a", { get: function() {
32070            return 7;
32071          } }).a;
32072        })), Ct = Object.getOwnPropertyDescriptor, kt = { f: h ? Ct : function(t3, e2) {
32073          if (t3 = N(t3), e2 = wt(e2), jt) try {
32074            return Ct(t3, e2);
32075          } catch (t4) {
32076          }
32077          if (lt(t3, e2)) return m(!p(v.f, t3, e2), t3[e2]);
32078        } }, At = c.String, Et = c.TypeError, It = function(t3) {
32079          if (P(t3)) return t3;
32080          throw Et(At(t3) + " is not an object");
32081        }, Tt = c.TypeError, Nt = Object.defineProperty, Ot = { f: h ? Nt : function(t3, e2, n2) {
32082          if (It(t3), e2 = wt(e2), It(n2), jt) try {
32083            return Nt(t3, e2, n2);
32084          } catch (t4) {
32085          }
32086          if ("get" in n2 || "set" in n2) throw Tt("Accessors not supported");
32087          return "value" in n2 && (t3[e2] = n2.value), t3;
32088        } }, Pt = h ? function(t3, e2, n2) {
32089          return Ot.f(t3, e2, m(1, n2));
32090        } : function(t3, e2, n2) {
32091          return t3[e2] = n2, t3;
32092        }, Lt = x(Function.toString);
32093        O(nt.inspectSource) || (nt.inspectSource = function(t3) {
32094          return Lt(t3);
32095        });
32096        var Rt, qt, Bt, Mt = nt.inspectSource, Ht = c.WeakMap, Ft = O(Ht) && /native code/.test(Mt(Ht)), $t = it("keys"), Dt = function(t3) {
32097          return $t[t3] || ($t[t3] = ht(t3));
32098        }, zt = {}, Gt = "Object already initialized", Ut = c.TypeError, Wt = c.WeakMap;
32099        if (Ft || nt.state) {
32100          var Vt = nt.state || (nt.state = new Wt()), Yt = x(Vt.get), Kt = x(Vt.has), Xt = x(Vt.set);
32101          Rt = function(t3, e2) {
32102            if (Kt(Vt, t3)) throw new Ut(Gt);
32103            return e2.facade = t3, Xt(Vt, t3, e2), e2;
32104          }, qt = function(t3) {
32105            return Yt(Vt, t3) || {};
32106          }, Bt = function(t3) {
32107            return Kt(Vt, t3);
32108          };
32109        } else {
32110          var Jt = Dt("state");
32111          zt[Jt] = true, Rt = function(t3, e2) {
32112            if (lt(t3, Jt)) throw new Ut(Gt);
32113            return e2.facade = t3, Pt(t3, Jt, e2), e2;
32114          }, qt = function(t3) {
32115            return lt(t3, Jt) ? t3[Jt] : {};
32116          }, Bt = function(t3) {
32117            return lt(t3, Jt);
32118          };
32119        }
32120        var Qt = { set: Rt, get: qt, has: Bt, enforce: function(t3) {
32121          return Bt(t3) ? qt(t3) : Rt(t3, {});
32122        }, getterFor: function(t3) {
32123          return function(e2) {
32124            var n2;
32125            if (!P(e2) || (n2 = qt(e2)).type !== t3) throw Ut("Incompatible receiver, " + t3 + " required");
32126            return n2;
32127          };
32128        } }, Zt = Function.prototype, te = h && Object.getOwnPropertyDescriptor, ee = lt(Zt, "name"), ne = { EXISTS: ee, PROPER: ee && "something" === function() {
32129        }.name, CONFIGURABLE: ee && (!h || h && te(Zt, "name").configurable) }, ie = r((function(t3) {
32130          var e2 = ne.CONFIGURABLE, n2 = Qt.get, i2 = Qt.enforce, o2 = String(String).split("String");
32131          (t3.exports = function(t4, n3, r2, a2) {
32132            var l2, s2 = !!a2 && !!a2.unsafe, u2 = !!a2 && !!a2.enumerable, h2 = !!a2 && !!a2.noTargetGet, f2 = a2 && void 0 !== a2.name ? a2.name : n3;
32133            O(r2) && ("Symbol(" === String(f2).slice(0, 7) && (f2 = "[" + String(f2).replace(/^Symbol\(([^)]*)\)/, "$1") + "]"), (!lt(r2, "name") || e2 && r2.name !== f2) && Pt(r2, "name", f2), (l2 = i2(r2)).source || (l2.source = o2.join("string" == typeof f2 ? f2 : ""))), t4 !== c ? (s2 ? !h2 && t4[n3] && (u2 = true) : delete t4[n3], u2 ? t4[n3] = r2 : Pt(t4, n3, r2)) : u2 ? t4[n3] = r2 : tt(n3, r2);
32134          })(Function.prototype, "toString", (function() {
32135            return O(this) && n2(this).source || Mt(this);
32136          }));
32137        })), oe = Math.ceil, re = Math.floor, ae = function(t3) {
32138          var e2 = +t3;
32139          return e2 != e2 || 0 === e2 ? 0 : (e2 > 0 ? re : oe)(e2);
32140        }, le = Math.max, se = Math.min, ce = function(t3, e2) {
32141          var n2 = ae(t3);
32142          return n2 < 0 ? le(n2 + e2, 0) : se(n2, e2);
32143        }, ue = Math.min, he = function(t3) {
32144          return t3 > 0 ? ue(ae(t3), 9007199254740991) : 0;
32145        }, fe = function(t3) {
32146          return he(t3.length);
32147        }, pe = function(t3) {
32148          return function(e2, n2, i2) {
32149            var o2, r2 = N(e2), a2 = fe(r2), l2 = ce(i2, a2);
32150            if (t3 && n2 != n2) {
32151              for (; a2 > l2; ) if ((o2 = r2[l2++]) != o2) return true;
32152            } else for (; a2 > l2; l2++) if ((t3 || l2 in r2) && r2[l2] === n2) return t3 || l2 || 0;
32153            return !t3 && -1;
32154          };
32155        }, de = { includes: pe(true), indexOf: pe(false) }, ge = de.indexOf, ve = x([].push), me = function(t3, e2) {
32156          var n2, i2 = N(t3), o2 = 0, r2 = [];
32157          for (n2 in i2) !lt(zt, n2) && lt(i2, n2) && ve(r2, n2);
32158          for (; e2.length > o2; ) lt(i2, n2 = e2[o2++]) && (~ge(r2, n2) || ve(r2, n2));
32159          return r2;
32160        }, be = ["constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleStr
32160ing", "toString", "valueOf"], ye = be.concat("length", "prototype"), we = { f: Object.getOwnPropertyNames || function(t3) {
32161          return me(t3, ye);
32162        } }, _e = { f: Object.getOwnPropertySymbols }, xe = x([].concat), Se = R("Reflect", "ownKeys") || function(t3) {
32163          var e2 = we.f(It(t3)), n2 = _e.f;
32164          return n2 ? xe(e2, n2(t3)) : e2;
32165        }, je = function(t3, e2) {
32166          for (var n2 = Se(e2), i2 = Ot.f, o2 = kt.f, r2 = 0; r2 < n2.length; r2++) {
32167            var a2 = n2[r2];
32168            lt(t3, a2) || i2(t3, a2, o2(e2, a2));
32169          }
32170        }, Ce = /#|\.prototype\./, ke = function(t3, e2) {
32171          var n2 = Ee[Ae(t3)];
32172          return n2 == Te || n2 != Ie && (O(e2) ? u(e2) : !!e2);
32173        }, Ae = ke.normalize = function(t3) {
32174          return String(t3).replace(Ce, ".").toLowerCase();
32175        }, Ee = ke.data = {}, Ie = ke.NATIVE = "N", Te = ke.POLYFILL = "P", Ne = ke, Oe = kt.f, Pe = function(t3, e2) {
32176          var n2, i2, o2, r2, a2, l2 = t3.target, s2 = t3.global, u2 = t3.stat;
32177          if (n2 = s2 ? c : u2 ? c[l2] || tt(l2, {}) : (c[l2] || {}).prototype) for (i2 in e2) {
32178            if (r2 = e2[i2], o2 = t3.noTargetGet ? (a2 = Oe(n2, i2)) && a2.value : n2[i2], !Ne(s2 ? i2 : l2 + (u2 ? "." : "#") + i2, t3.forced) && void 0 !== o2) {
32179              if (typeof r2 == typeof o2) continue;
32180              je(r2, o2);
32181            }
32182            (t3.sham || o2 && o2.sham) && Pt(r2, "sham", true), ie(n2, i2, r2, t3);
32183          }
32184        }, Le = {};
32185        Le[vt("toStringTag")] = "z";
32186        var Re, qe = "[object z]" === String(Le), Be = vt("toStringTag"), Me = c.Object, He = "Arguments" == C(/* @__PURE__ */ (function() {
32187          return arguments;
32188        })()), Fe = qe ? C : function(t3) {
32189          var e2, n2, i2;
32190          return void 0 === t3 ? "Undefined" : null === t3 ? "Null" : "string" == typeof (n2 = (function(t4, e3) {
32191            try {
32192              return t4[e3];
32193            } catch (t5) {
32194            }
32195          })(e2 = Me(t3), Be)) ? n2 : He ? C(e2) : "Object" == (i2 = C(e2)) && O(e2.callee) ? "Arguments" : i2;
32196        }, $e = c.String, De = function(t3) {
32197          if ("Symbol" === Fe(t3)) throw TypeError("Cannot convert a Symbol value to a string");
32198          return $e(t3);
32199        }, ze = function() {
32200          var t3 = It(this), e2 = "";
32201          return t3.global && (e2 += "g"), t3.ignoreCase && (e2 += "i"), t3.multiline && (e2 += "m"), t3.dotAll && (e2 += "s"), t3.unicode && (e2 += "u"), t3.sticky && (e2 += "y"), e2;
32202        }, Ge = c.RegExp, Ue = { UNSUPPORTED_Y: u((function() {
32203          var t3 = Ge("a", "y");
32204          return t3.lastIndex = 2, null != t3.exec("abcd");
32205        })), BROKEN_CARET: u((function() {
32206          var t3 = Ge("^r", "gy");
32207          return t3.lastIndex = 2, null != t3.exec("str");
32208        })) }, We = Object.keys || function(t3) {
32209          return me(t3, be);
32210        }, Ve = h ? Object.defineProperties : function(t3, e2) {
32211          It(t3);
32212          for (var n2, i2 = N(e2), o2 = We(e2), r2 = o2.length, a2 = 0; r2 > a2; ) Ot.f(t3, n2 = o2[a2++], i2[n2]);
32213          return t3;
32214        }, Ye = R("document", "documentElement"), Ke = Dt("IE_PROTO"), Xe = function() {
32215        }, Je = function(t3) {
32216          return "<script>" + t3 + "<\/script>";
32217        }, Qe = function(t3) {
32218          t3.write(Je("")), t3.close();
32219          var e2 = t3.parentWindow.Object;
32220          return t3 = null, e2;
32221        }, Ze = function() {
32222          try {
32223            Re = new ActiveXObject("htmlfile");
32224          } catch (t4) {
32225          }
32226          var t3, e2;
32227          Ze = "undefined" != typeof document ? document.domain && Re ? Qe(Re) : ((e2 = St("iframe")).style.display = "none", Ye.appendChild(e2), e2.src = String("javascript:"), (t3 = e2.contentWindow.document).open(), t3.write(Je("document.F=Object")), t3.close(), t3.F) : Qe(Re);
32228          for (var n2 = be.length; n2--; ) delete Ze.prototype[be[n2]];
32229          return Ze();
32230        };
32231        zt[Ke] = true;
32232        var tn, en, nn = Object.create || function(t3, e2) {
32233          var n2;
32234          return null !== t3 ? (Xe.prototype = It(t3), n2 = new Xe(), Xe.prototype = null, n2[Ke] = t3) : n2 = Ze(), void 0 === e2 ? n2 : Ve(n2, e2);
32235        }, on = c.RegExp, rn = u((function() {
32236          var t3 = on(".", "s");
32237          return !(t3.dotAll && t3.exec("\n") && "s" === t3.flags);
32238        })), an = c.RegExp, ln = u((function() {
32239          var t3 = an("(?<a>b)", "g");
32240          return "b" !== t3.exec("b").groups.a || "bc" !== "b".replace(t3, "$<a>c");
32241        })), sn = Qt.get, cn = it("native-string-replace", String.prototype.replace), un = RegExp.prototype.exec, hn = un, fn = x("".charAt), pn = x("".indexOf), dn = x("".replace), gn = x("".slice), vn = (en = /b*/g, p(un, tn = /a/, "a"), p(u
32241n, en, "a"), 0 !== tn.lastIndex || 0 !== en.lastIndex), mn = Ue.UNSUPPORTED_Y || Ue.BROKEN_CARET, bn = void 0 !== /()??/.exec("")[1];
32242        (vn || bn || mn || rn || ln) && (hn = function(t3) {
32243          var e2, n2, i2, o2, r2, a2, l2, s2 = this, c2 = sn(s2), u2 = De(t3), h2 = c2.raw;
32244          if (h2) return h2.lastIndex = s2.lastIndex, e2 = p(hn, h2, u2), s2.lastIndex = h2.lastIndex, e2;
32245          var f2 = c2.groups, d2 = mn && s2.sticky, g2 = p(ze, s2), v2 = s2.source, m2 = 0, b2 = u2;
32246          if (d2 && (g2 = dn(g2, "y", ""), -1 === pn(g2, "g") && (g2 += "g"), b2 = gn(u2, s2.lastIndex), s2.lastIndex > 0 && (!s2.multiline || s2.multiline && "\n" !== fn(u2, s2.lastIndex - 1)) && (v2 = "(?: " + v2 + ")", b2 = " " + b2, m2++), n2 = new RegExp("^(?:" + v2 + ")", g2)), bn && (n2 = new RegExp("^" + v2 + "$(?!\\s)", g2)), vn && (i2 = s2.lastIndex), o2 = p(un, d2 ? n2 : s2, b2), d2 ? o2 ? (o2.input = gn(o2.input, m2), o2[0] = gn(o2[0], m2), o2.index = s2.lastIndex, s2.lastIndex += o2[0].length) : s2.lastIndex = 0 : vn && o2 && (s2.lastIndex = s2.global ? o2.index + o2[0].length : i2), bn && o2 && o2.length > 1 && p(cn, o2[0], n2, (function() {
32247            for (r2 = 1; r2 < arguments.length - 2; r2++) void 0 === arguments[r2] && (o2[r2] = void 0);
32248          })), o2 && f2) for (o2.groups = a2 = nn(null), r2 = 0; r2 < f2.length; r2++) a2[(l2 = f2[r2])[0]] = o2[l2[1]];
32249          return o2;
32250        });
32251        var yn = hn;
32252        Pe({ target: "RegExp", proto: true, forced: /./.exec !== yn }, { exec: yn });
32253        var wn = vt("species"), _n = RegExp.prototype, xn = function(t3, e2, n2, i2) {
32254          var o2 = vt(t3), r2 = !u((function() {
32255            var e3 = {};
32256            return e3[o2] = function() {
32257              return 7;
32258            }, 7 != ""[t3](e3);
32259          })), a2 = r2 && !u((function() {
32260            var e3 = false, n3 = /a/;
32261            return "split" === t3 && ((n3 = {}).constructor = {}, n3.constructor[wn] = function() {
32262              return n3;
32263            }, n3.flags = "", n3[o2] = /./[o2]), n3.exec = function() {
32264              return e3 = true, null;
32265            }, n3[o2](""), !e3;
32266          }));
32267          if (!r2 || !a2 || n2) {
32268            var l2 = x(/./[o2]), s2 = e2(o2, ""[t3], (function(t4, e3, n3, i3, o3) {
32269              var a3 = x(t4), s3 = e3.exec;
32270              return s3 === yn || s3 === _n.exec ? r2 && !o3 ? { done: true, value: l2(e3, n3, i3) } : { done: true, value: a3(n3, e3, i3) } : { done: false };
32271            }));
32272            ie(String.prototype, t3, s2[0]), ie(_n, o2, s2[1]);
32273          }
32274          i2 && Pt(_n[o2], "sham", true);
32275        }, Sn = x("".charAt), jn = x("".charCodeAt), Cn = x("".slice), kn = function(t3) {
32276          return function(e2, n2) {
32277            var i2, o2, r2 = De(T(e2)), a2 = ae(n2), l2 = r2.length;
32278            return a2 < 0 || a2 >= l2 ? t3 ? "" : void 0 : (i2 = jn(r2, a2)) < 55296 || i2 > 56319 || a2 + 1 === l2 || (o2 = jn(r2, a2 + 1)) < 56320 || o2 > 57343 ? t3 ? Sn(r2, a2) : i2 : t3 ? Cn(r2, a2, a2 + 2) : o2 - 56320 + (i2 - 55296 << 10) + 65536;
32279          };
32280        }, An = { codeAt: kn(false), charAt: kn(true) }.charAt, En = function(t3, e2, n2) {
32281          return e2 + (n2 ? An(t3, e2).length : 1);
32282        }, In = c.TypeError, Tn = function(t3, e2) {
32283          var n2 = t3.exec;
32284          if (O(n2)) {
32285            var i2 = p(n2, t3, e2);
32286            return null !== i2 && It(i2), i2;
32287          }
32288          if ("RegExp" === C(t3)) return p(yn, t3, e2);
32289          throw In("RegExp#exec called on incompatible receiver");
32290        };
32291        xn("match", (function(t3, e2, n2) {
32292          return [function(e3) {
32293            var n3 = T(this), i2 = null == e3 ? void 0 : J(e3, t3);
32294            return i2 ? p(i2, e3, n3) : new RegExp(e3)[t3](De(n3));
32295          }, function(t4) {
32296            var i2 = It(this), o2 = De(t4), r2 = n2(e2, i2, o2);
32297            if (r2.done) return r2.value;
32298            if (!i2.global) return Tn(i2, o2);
32299            var a2 = i2.unicode;
32300            i2.lastIndex = 0;
32301            for (var l2, s2 = [], c2 = 0; null !== (l2 = Tn(i2, o2)); ) {
32302              var u2 = De(l2[0]);
32303              s2[c2] = u2, "" === u2 && (i2.lastIndex = En(o2, he(i2.lastIndex), a2)), c2++;
32304            }
32305            return 0 === c2 ? null : s2;
32306          }];
32307        }));
32308        var Nn = Array.isArray || function(t3) {
32309          return "Array" == C(t3);
32310        }, On = function(t3, e2, n2) {
32311          var i2 = wt(e2);
32312          i2 in t3 ? Ot.f(t3, i2, m(0, n2)) : t3[i2] = n2;
32313        }, Pn = function() {
32314        }, Ln = [], Rn = R("Reflect", "construct"), qn = /^\s*(?:class|function)\b/, Bn = x(qn.exec), Mn = !qn.exec(Pn), Hn = function(t3) {
32315          if (!O(t3)) return false;
32316          try {
32317            return Rn(Pn, Ln, t3), true;
32318          } catch (t4) {
32319            return false;
32320          }
32321        }, Fn = !Rn || u((function() {
32322          var t3;
32323          return Hn(Hn.call) || !Hn(Object) || !Hn((function() {
32324            t3 = true;
32325          })) || t3;
32326        })) ? function(t3) {
32327          if (!O(t3)) return false;
32328          switch (Fe(t3)) {
32329            case "AsyncFunction":
32330            case "GeneratorFunction":
32331            case "AsyncGeneratorFunction":
32332              return false;
32333          }
32334          return Mn || !!Bn(qn, Mt(t3));
32335        } : Hn, $n = vt("species"), Dn = c.Array, zn = function(t3, e2) {
32336          return new ((function(t4) {
32337            var e3;
32338            return Nn(t4) && (e3 = t4.constructor, (Fn(e3) && (e3 === Dn || Nn(e3.prototype)) || P(e3) && null === (e3 = e3[$n])) && (e3 = void 0)), void 0 === e3 ? Dn : e3;
32339          })(t3))(0 === e2 ? 0 : e2);
32340        }, Gn = vt("species"), Un = function(t3) {
32341          return D >= 51 || !u((function() {
32342            var e2 = [];
32343            return (e2.constructor = {})[Gn] = function() {
32344              return { foo: 1 };
32345            }, 1 !== e2[t3](Boolean).foo;
32346          }));
32347        }, Wn = vt("isConcatSpreadable"), Vn = 9007199254740991, Yn = "Maximum allowed index exceeded", Kn = c.TypeError, Xn = D >= 51 || !u((function() {
32348          var t3 = [];
32349          return t3[Wn] = false, t3.concat()[0] !== t3;
32350        })), Jn = Un("concat"), Qn = function(t3) {
32351          if (!P(t3)) return false;
32352          var e2 = t3[Wn];
32353          return void 0 !== e2 ? !!e2 : Nn(t3);
32354        };
32355        Pe({ target: "Array", proto: true, forced: !Xn || !Jn }, { concat: function(t3) {
32356          var e2, n2, i2, o2, r2, a2 = rt(this), l2 = zn(a2, 0), s2 = 0;
32357          for (e2 = -1, i2 = arguments.length; e2 < i2; e2++) if (Qn(r2 = -1 === e2 ? a2 : arguments[e2])) {
32358            if (s2 + (o2 = fe(r2)) > Vn) throw Kn(Yn);
32359            for (n2 = 0; n2 < o2; n2++, s2++) n2 in r2 && On(l2, s2, r2[n2]);
32360          } else {
32361            if (s2 >= Vn) throw Kn(Yn);
32362            On(l2, s2++, r2);
32363          }
32364          return l2.length = s2, l2;
32365        } });
32366        var Zn = qe ? {}.toString : function() {
32367          return "[object " + Fe(this) + "]";
32368        };
32369        qe || ie(Object.prototype, "toString", Zn, { unsafe: true });
32370        var ti = ne.PROPER, ei = "toString", ni = RegExp.prototype, ii = ni.toString, oi = x(ze), ri = u((function() {
32371          return "/a/b" != ii.call({ source: "a", flags: "b" });
32372        })), ai = ti && ii.name != ei;
32373        (ri || ai) && ie(RegExp.prototype, ei, (function() {
32374          var t3 = It(this), e2 = De(t3.source), n2 = t3.flags;
32375          return "/" + e2 + "/" + De(void 0 === n2 && q(ni, t3) && !("flags" in ni) ? oi(t3) : n2);
32376        }), { unsafe: true });
32377        var li = Function.prototype, si = li.apply, ci = li.bind, ui = li.call, hi = "object" == typeof Reflect && Reflect.apply || (ci ? ui.bind(si) : function() {
32378          return ui.apply(si, arguments);
32379        }), fi = vt("match"), pi = function(t3) {
32380          var e2;
32381          return P(t3) && (void 0 !== (e2 = t3[fi]) ? !!e2 : "RegExp" == C(t3));
32382        }, di = c.TypeError, gi = vt("species"), vi = function(t3, e2) {
32383          var n2, i2 = It(t3).constructor;
32384          return void 0 === i2 || null == (n2 = It(i2)[gi]) ? e2 : (function(t4) {
32385            if (Fn(t4)) return t4;
32386            throw di(Y(t4) + " is not a constructor");
32387          })(n2);
32388        }, mi = x([].slice), bi = Ue.UNSUPPORTED_Y, yi = 4294967295, wi = Math.min, _i = [].push, xi = x(/./.exec), Si = x(_i), ji = x("".slice), Ci = !u((function() {
32389          var t3 = /(?:)/, e2 = t3.exec;
32390          t3.exec = function() {
32391            return e2.apply(this, arguments);
32392          };
32393          var n2 = "ab".split(t3);
32394          return 2 !== n2.length || "a" !== n2[0] || "b" !== n2[1];
32395        }));
32396        function ki(t3, e2) {
32397          if (t3 instanceof SVGElement) {
32398            var i2 = t3.getAttribute("class") || "";
32399            i2.match(e2) || t3.setAttribute("class", "".concat(i2, " ").concat(e2));
32400          } else {
32401            if (void 0 !== t3.classList) n(e2.split(" "), (function(e3) {
32402              t3.classList.add(e3);
32403            }));
32404            else t3.className.match(e2) || (t3.className += " ".concat(e2));
32405          }
32406        }
32407        function Ai(t3, e2) {
32408          var n2 = "";
32409          return t3.currentStyle ? n2 = t3.currentStyle[e2] : document.defaultView && document.defaultView.getComputedStyle && (n2 = document.defaultView.getComputedStyle(t3, null).getPropertyValue(e2)), n2 && n2.toLowerCase ? n2.toLowerCase() : n2;
32410        }
32411        function Ei(t3) {
32412          var e2 = t3.element;
32413          if (this._options.scrollToElement) {
32414            var n2 = (function(t4) {
32415              var e3 = window.getComputedStyle(t4), n3 = "absolute" === e3.position, i2 = /(auto|scroll)/;
32416              if ("fixed" === e3.position) return document.body;
32417              for (var o2 = t4; o2 = o2.parentElement; ) if (e3 = window.getComputedStyle(o2), (!n3 || "static" !== e3.position) && i2.test(e3.overflow + e3.overflowY + e3.overflowX)) return o2;
32418              return document.body;
32419            })(e2);
32420            n2 !== document.body && (n2.scrollTop = e2.offsetTop - n2.offsetTop);
32421          }
32422        }
32423        function Ii() {
32424          if (void 0 !== window.innerWidth) return { width: window.innerWidth, height: window.innerHeight };
32425          var t3 = document.documentElement;
32426          return { width: t3.clientWidth, height: t3.clientHeight };
32427        }
32428        function Ti(t3, e2, n2) {
32429          var i2, o2 = e2.element;
32430          if ("off" !== t3 && (this._options.scrollToElement && (i2 = "tooltip" === t3 ? n2.getBoundingClientRect() : o2.getBoundingClientRect(), !(function(t4) {
32431            var e3 = t4.getBoundingClientRect();
32432            return e3.top >= 0 && e3.left >= 0 && e3.bottom + 80 <= window.innerHeight && e3.right <= window.innerWidth;
32433          })(o2)))) {
32434            var r2 = Ii().height;
32435            i2.bottom - (i2.bottom - i2.top) < 0 || o2.clientHeight > r2 ? window.scrollBy(0, i2.top - (r2 / 2 - i2.height / 2) - this._options.scrollPadding) : window.scrollBy(0, i2.top - (r2 / 2 - i2.height / 2) + this._options.scrollPadding);
32436          }
32437        }
32438        function Ni(t3) {
32439          t3.setAttribute("role", "button"), t3.tabIndex = 0;
32440        }
32441        xn("split", (function(t3, e2, n2) {
32442          var i2;
32443          return i2 = "c" == "abbc".split(/(b)*/)[1] || 4 != "test".split(/(?:)/, -1).length || 2 != "ab".split(/(?:ab)*/).length || 4 != ".".split(/(.?)(.?)/).length || ".".split(/()()/).length > 1 || "".split(/.?/).length ? function(t4, n3) {
32444            var i3 = De(T(this)), o2 = void 0 === n3 ? yi : n3 >>> 0;
32445            if (0 === o2) return [];
32446            if (void 0 === t4) return [i3];
32447            if (!pi(t4)) return p(e2, i3, t4, o2);
32448            for (var r2, a2, l2, s2 = [], c2 = (t4.ignoreCase ? "i" : "") + (t4.multiline ? "m" : "") + (t4.unicode ? "u" : "") + (t4.sticky ? "y" : ""), u2 = 0, h2 = new RegExp(t4.source, c2 + "g"); (r2 = p(yn, h2, i3)) && !((a2 = h2.lastIndex) > u2 && (Si(s2, ji(i3, u2, r2.index)), r2.length > 1 && r2.index < i3.length && hi(_i, s2, mi(r2, 1)), l2 = r2[0].length, u2 = a2, s2.length >= o2)); ) h2.lastIndex === r2.index && h2.lastIndex++;
32449            return u2 === i3.length ? !l2 && xi(h2, "") || Si(s2, "") : Si(s2, ji(i3, u2)), s2.length > o2 ? mi(s2, 0, o2) : s2;
32450          } : "0".split(void 0, 0).length ? function(t4, n3) {
32451            return void 0 === t4 && 0 === n3 ? [] : p(e2, this, t4, n3);
32452          } : e2, [function(e3, n3) {
32453            var o2 = T(this), r2 = null == e3 ? void 0 : J(e3, t3);
32454            return r2 ? p(r2, e3, o2, n3) : p(i2, De(o2), e3, n3);
32455          }, function(t4, o2) {
32456            var r2 = It(this), a2 = De(t4), l2 = n2(i2, r2, a2, o2, i2 !== e2);
32457            if (l2.done) return l2.value;
32458            var s2 = vi(r2, RegExp), c2 = r2.unicode, u2 = (r2.ignoreCase ? "i" : "") + (r2.multiline ? "m" : "") + (r2.unicode ? "u" : "") + (bi ? "g" : "y"), h2 = new s2(bi ? "^(?:" + r2.source + ")" : r2, u2), f2 = void 0 === o2 ? yi : o2 >>> 0;
32459            if (0 === f2) return [];
32460            if (0 === a2.length) return null === Tn(h2, a2) ? [a2] : [];
32461            for (var p2 = 0, d2 = 0, g2 = []; d2 < a2.length; ) {
32462              h2.lastIndex = bi ? 0 : d2;
32463              var v2, m2 = Tn(h2, bi ? ji(a2, d2) : a2);
32464              if (null === m2 || (v2 = wi(he(h2.lastIndex + (bi ? d2 : 0)), a2.length)) === p2) d2 = En(a2, d2, c2);
32465              else {
32466                if (Si(g2, ji(a2, p2, d2)), g2.length === f2) return g2;
32467                for (var b2 = 1; b2 <= m2.length - 1; b2++) if (Si(g2, m2[b2]), g2.length === f2) return g2;
32468                d2 = p2 = v2;
32469              }
32470            }
32471            return Si(g2, ji(a2, p2)), g2;
32472          }];
32473        }), !Ci, bi);
32474        var Oi = Object.assign, Pi = Object.defineProperty, Li = x([].concat), Ri = !Oi || u((function() {
32475          if (h && 1 !== Oi({ b: 1 }, Oi(Pi({}, "a", { enumerable: true, get: function() {
32476            Pi(this, "b", { value: 3, enumerable: false });
32477          } }), { b: 2 })).b) return true;
32478          var t3 = {}, e2 = {}, n2 = /* @__PURE__ */ Symbol(), i2 = "abcdefghijklmnopqrst";
32479          return t3[n2] = 7, i2.split("").forEach((function(t4) {
32480            e2[t4] = t4;
32481          })), 7 != Oi({}, t3)[n2] || We(Oi({}, e2)).join("") != i2;
32482        })) ? function(t3, e2) {
32483          for (var n2 = rt(t3), i2 = arguments.length, o2 = 1, r2 = _e.f, a2 = v.f; i2 > o2; ) for (var l2, s2 = E(arguments[o2++]), c2 = r2 ? Li(We(s2), r2(s2)) : We(s2), u2 = c2.length, f2 = 0; u2 > f2; ) l2 = c2[f2++], h && !p(a2, s2, l2) || (n2[l2] = s2[l2]);
32484          return n2;
32485        } : Oi;
32486        function qi(t3) {
32487          var e2 = t3.parentNode;
32488          return !(!e2 || "HTML" === e2.nodeName) && ("fixed" === Ai(t3, "position") || qi(e2));
32489        }
32490        function Bi(t3, e2) {
32491          var n2 = document.body, i2 = document.documentElement, o2 = window.pageYOffset || i2.
32491scrollTop || n2.scrollTop, r2 = window.pageXOffset || i2.scrollLeft || n2.scrollLeft;
32492          e2 = e2 || n2;
32493          var a2 = t3.getBoundingClientRect(), l2 = e2.getBoundingClientRect(), s2 = Ai(e2, "position"), c2 = { width: a2.width, height: a2.height };
32494          return "body" !== e2.tagName.toLowerCase() && "relative" === s2 || "sticky" === s2 ? Object.assign(c2, { top: a2.top - l2.top, left: a2.left - l2.left }) : qi(t3) ? Object.assign(c2, { top: a2.top, left: a2.left }) : Object.assign(c2, { top: a2.top + o2, left: a2.left + r2 });
32495        }
32496        Pe({ target: "Object", stat: true, forced: Object.assign !== Ri }, { assign: Ri });
32497        var Mi = Math.floor, Hi = x("".charAt), Fi = x("".replace), $i = x("".slice), Di = /\$([$&'`]|\d{1,2}|<[^>]*>)/g, zi = /\$([$&'`]|\d{1,2})/g, Gi = function(t3, e2, n2, i2, o2, r2) {
32498          var a2 = n2 + t3.length, l2 = i2.length, s2 = zi;
32499          return void 0 !== o2 && (o2 = rt(o2), s2 = Di), Fi(r2, s2, (function(r3, s3) {
32500            var c2;
32501            switch (Hi(s3, 0)) {
32502              case "$":
32503                return "$";
32504              case "&":
32505                return t3;
32506              case "`":
32507                return $i(e2, 0, n2);
32508              case "'":
32509                return $i(e2, a2);
32510              case "<":
32511                c2 = o2[$i(s3, 1, -1)];
32512                break;
32513              default:
32514                var u2 = +s3;
32515                if (0 === u2) return r3;
32516                if (u2 > l2) {
32517                  var h2 = Mi(u2 / 10);
32518                  return 0 === h2 ? r3 : h2 <= l2 ? void 0 === i2[h2 - 1] ? Hi(s3, 1) : i2[h2 - 1] + Hi(s3, 1) : r3;
32519                }
32520                c2 = i2[u2 - 1];
32521            }
32522            return void 0 === c2 ? "" : c2;
32523          }));
32524        }, Ui = vt("replace"), Wi = Math.max, Vi = Math.min, Yi = x([].concat), Ki = x([].push), Xi = x("".indexOf), Ji = x("".slice), Qi = "$0" === "a".replace(/./, "$0"), Zi = !!/./[Ui] && "" === /./[Ui]("a", "$0");
32525        function to(t3, e2) {
32526          if (t3 instanceof SVGElement) {
32527            var n2 = t3.getAttribute("class") || "";
32528            t3.setAttribute("class", n2.replace(e2, "").replace(/^\s+|\s+$/g, ""));
32529          } else t3.className = t3.className.replace(e2, "").replace(/^\s+|\s+$/g, "");
32530        }
32531        function eo(t3, e2) {
32532          var n2 = "";
32533          if (t3.style.cssText && (n2 += t3.style.cssText), "string" == typeof e2) n2 += e2;
32534          else for (var i2 in e2) n2 += "".concat(i2, ":").concat(e2[i2], ";");
32535          t3.style.cssText = n2;
32536        }
32537        function no(t3) {
32538          if (t3) {
32539            if (!this._introItems[this._currentStep]) return;
32540            var e2 = this._introItems[this._currentStep], n2 = Bi(e2.element, this._targetElement), i2 = this._options.helperElementPadding;
32541            qi(e2.element) ? ki(t3, "introjs-fixedTooltip") : to(t3, "introjs-fixedTooltip"), "floating" === e2.position && (i2 = 0), eo(t3, { width: "".concat(n2.width + i2, "px"), height: "".concat(n2.height + i2, "px"), top: "".concat(n2.top - i2 / 2, "px"), left: "".concat(n2.left - i2 / 2, "px") });
32542          }
32543        }
32544        xn("replace", (function(t3, e2, n2) {
32545          var i2 = Zi ? "$" : "$0";
32546          return [function(t4, n3) {
32547            var i3 = T(this), o2 = null == t4 ? void 0 : J(t4, Ui);
32548            return o2 ? p(o2, t4, i3, n3) : p(e2, De(i3), t4, n3);
32549          }, function(t4, o2) {
32550            var r2 = It(this), a2 = De(t4);
32551            if ("string" == typeof o2 && -1 === Xi(o2, i2) && -1 === Xi(o2, "$<")) {
32552              var l2 = n2(e2, r2, a2, o2);
32553              if (l2.done) return l2.value;
32554            }
32555            var s2 = O(o2);
32556            s2 || (o2 = De(o2));
32557            var c2 = r2.global;
32558            if (c2) {
32559              var u2 = r2.unicode;
32560              r2.lastIndex = 0;
32561            }
32562            for (var h2 = []; ; ) {
32563              var f2 = Tn(r2, a2);
32564              if (null === f2) break;
32565              if (Ki(h2, f2), !c2) break;
32566              "" === De(f2[0]) && (r2.lastIndex = En(a2, he(r2.lastIndex), u2));
32567            }
32568            for (var p2, d2 = "", g2 = 0, v2 = 0; v2 < h2.length; v2++) {
32569              for (var m2 = De((f2 = h2[v2])[0]), b2 = Wi(Vi(ae(f2.index), a2.length), 0), y2 = [], w2 = 1; w2 < f2.length; w2++) Ki(y2, void 0 === (p2 = f2[w2]) ? p2 : String(p2));
32570              var _2 = f2.groups;
32571              if (s2) {
32572                var x2 = Yi([m2], y2, b2, a2);
32573                void 0 !== _2 && Ki(x2, _2);
32574                var S2 = De(hi(o2, void 0, x2));
32575              } else S2 = Gi(m2, a2, b2, y2, _2, o2);
32576              b2 >= g2 && (d2 += Ji(a2, g2, b2) + S2, g2 = b2 + m2.length);
32577            }
32578            return d2 + Ji(a2, g2);
32579          }];
32580        }), !!u((function() {
32581          var t3 = /./;
32582          return t3.exec = function() {
32583            var t4 = [];
32584            return t4.groups = { a: "7" }, t4;
32585          }, "7" !== "".replace(t3, "$<a>");
32586        })) || !Qi || Zi);
32587        var io = vt("unscopables"), oo = Array.prototype;
32588        null == oo[io] && Ot.f(oo, io, { configurable: true, value: nn(null) });
32589        var ro, ao = de.includes;
32590        Pe({ target: "Array", proto: true }, { includes: function(t3) {
32591          return ao(this, t3, arguments.length > 1 ? arguments[1] : void 0);
32592        } }), ro = "includes", oo[io][ro] = true;
32593        var lo = Un("slice"), so = vt("species"), co = c.Array, uo = Math.max;
32594        Pe({ target: "Array", proto: true, forced: !lo }, { slice: function(t3, e2) {
32595          var n2, i2, o2, r2 = N(this), a2 = fe(r2), l2 = ce(t3, a2), s2 = ce(void 0 === e2 ? a2 : e2, a2);
32596          if (Nn(r2) && (n2 = r2.constructor, (Fn(n2) && (n2 === co || Nn(n2.prototype)) || P(n2) && null === (n2 = n2[so])) && (n2 = void 0), n2 === co || void 0 === n2)) return mi(r2, l2, s2);
32597          for (i2 = new (void 0 === n2 ? co : n2)(uo(s2 - l2, 0)), o2 = 0; l2 < s2; l2++, o2++) l2 in r2 && On(i2, o2, r2[l2]);
32598          return i2.length = o2, i2;
32599        } });
32600        var ho = c.TypeError, fo = function(t3) {
32601          if (pi(t3)) throw ho("The method doesn't accept regular expressions");
32602          return t3;
32603        }, po = vt("match"), go = x("".indexOf);
32604        Pe({ target: "String", proto: true, forced: !(function(t3) {
32605          var e2 = /./;
32606          try {
32607            "/./"[t3](e2);
32608          } catch (n2) {
32609            try {
32610              return e2[po] = false, "/./"[t3](e2);
32611            } catch (t4) {
32612            }
32613          }
32614          return false;
32615        })("includes") }, { includes: function(t3) {
32616          return !!~go(De(T(this)), De(fo(t3)), arguments.length > 1 ? arguments[1] : void 0);
32617        } });
32618        var vo = function(t3, e2) {
32619          var n2 = [][t3];
32620          return !!n2 && u((function() {
32621            n2.call(null, e2 || function() {
32622              throw 1;
32623            }, 1);
32624          }));
32625        }, mo = x([].join), bo = E != Object, yo = vo("join", ",");
32626        Pe({ target: "Array", proto: true, forced: bo || !yo }, { join: function(t3) {
32627          return mo(N(this), void 0 === t3 ? "," : t3);
32628        } });
32629        var wo = x(x.bind), _o = x([].push), xo = function(t3) {
32630          var e2 = 1 == t3, n2 = 2 == t3, i2 = 3 == t3, o2 = 4 == t3, r2 = 6 == t3, a2 = 7 == t3, l2 = 5 == t3 || r2;
32631          return function(s2, c2, u2, h2) {
32632            for (var f2, p2, d2 = rt(s2), g2 = E(d2), v2 = (function(t4, e3) {
32633              return X(t4), void 0 === e3 ? t4 : wo ? wo(t4, e3) : function() {
32634                return t4.apply(e3, arguments);
32635              };
32636            })(c2, u2), m2 = fe(g2), b2 = 0, y2 = h2 || zn, w2 = e2 ? y2(s2, m2) : n2 || a2 ? y2(s2, 0) : void 0; m2 > b2; b2++) if ((l2 || b2 in g2) && (p2 = v2(f2 = g2[b2], b2, d2), t3)) if (e2) w2[b2] = p2;
32637            else if (p2) switch (t3) {
32638              case 3:
32639                return true;
32640              case 5:
32641                return f2;
32642              case 6:
32643                return b2;
32644              case 2:
32645                _o(w2, f2);
32646            }
32647            else switch (t3) {
32648              case 4:
32649                return false;
32650              case 7:
32651                _o(w2, f2);
32652            }
32653            return r2 ? -1 : i2 || o2 ? o2 : w2;
32654          };
32655        }, So = { forEach: xo(0), map: xo(1), filter: xo(2), some: xo(3), every: xo(4), find: xo(5), findIndex: xo(6), filterReject: xo(7) }.filter;
32656        function jo(t3, e2, n2, i2, o2) {
32657          return t3.left + e2 + n2.width > i2.width ? (o2.style.left = "".concat(i2.width - n2.width - t3.left, "px"), false) : (o2.style.left = "".concat(e2, "px"), true);
32658        }
32659        function Co(t3, e2, n2, i2) {
32660          return t3.left + t3.width - e2 - n2.width < 0 ? (i2.style.left = "".concat(-t3.left, "px"), false) : (i2.style.right = "".concat(e2, "px"), true);
32661        }
32662        Pe({ target: "Array", proto: true, forced: !Un("filter") }, { filter: function(t3) {
32663          return So(this, t3, arguments.length > 1 ? arguments[1] : void 0);
32664        } });
32665        var ko = Un("splice"), Ao = c.TypeError, Eo = Math.max, Io = Math.min, To = 9007199254740991, No = "Maximum allowed length exceeded";
32666        function Oo(t3, e2) {
32667          t3.includes(e2) && t3.splice(t3.indexOf(e2), 1);
32668        }
32669        function Po(t3, e2, n2) {
32670          var i2 = this._options.positionPrecedence.slice(), o2 = Ii(), r2 = Bi(e2).height + 10, a2 = Bi(e2).width + 20, l2 = t3.getBoundingClientRect(), s2 = "floating";
32671          l2.bottom + r2 > o2.height && Oo(i2, "bottom"), l2.top - r2 < 0 && Oo(i2, "top"), l2.right + a2 > o2.width && Oo(i2, "right"), l2.left - a2 < 0 && Oo(i2, "left");
32672          var c2, u2, h2 = -1 !== (u2 = (c2 = n2 || "").indexOf("-")) ? c2.substr(u2) : "";
32673          return n2 && (n2 = n2.split("-")[0]), i2.length && (s2 = i2.includes(n2) ? n2 : i2[0]), ["top", "bottom"].includes(s2) && (s2 += (function(t4, e3, n3, i3) {
32674            var o3 = n3.width, r3 = e3 / 2, a3 = Math.min(o3, window.screen.width), l3 = ["-left-aligned", "-middle-aligned", "-right-aligned"];
32675            return a3 - t4 < e3 && Oo(l3, "-left-aligned"), (t4 < r3 || a3 - t4 < r3) && Oo(l3, "-middle-aligned"), t4 < e3 && Oo(l3, "-right-aligned"), l3.length ? l3.includes(i3) ? i3 : l3[0] : "-middle-aligned";
32676          })(l2.left, a2, o2, h2)), s2;
32677        }
32678        function Lo(t3, e2, n2, i2) {
32679          var o2, r2, a2, l2, s2, c2 = "";
32680          if (i2 = i2 || false, e2.style.top = null, e2.style.right = null, e2.style.bottom = null, e2.style.left = null, e2.style.marginLeft = null, e2.style.marginTop = null, n2.style.display = "inherit", this._introItems[this._currentStep]) switch (c2 = "string" == typeof (o2 = this._introItems[this._currentStep]).tooltipClass ? o2.tooltipClass : this._options.tooltipClass, e2.className = ["introjs-tooltip", c2].filter(
32680Boolean).join(" "), e2.setAttribute("role", "dialog"), "floating" !== (s2 = this._introItems[this._currentStep].position) && this._options.autoPosition && (s2 = Po.call(this, t3, e2, s2)), a2 = Bi(t3), r2 = Bi(e2), l2 = Ii(), ki(e2, "introjs-".concat(s2)), s2) {
32681            case "top-right-aligned":
32682              n2.className = "introjs-arrow bottom-right";
32683              var u2 = 0;
32684              Co(a2, u2, r2, e2), e2.style.bottom = "".concat(a2.height + 20, "px");
32685              break;
32686            case "top-middle-aligned":
32687              n2.className = "introjs-arrow bottom-middle";
32688              var h2 = a2.width / 2 - r2.width / 2;
32689              i2 && (h2 += 5), Co(a2, h2, r2, e2) && (e2.style.right = null, jo(a2, h2, r2, l2, e2)), e2.style.bottom = "".concat(a2.height + 20, "px");
32690              break;
32691            case "top-left-aligned":
32692            case "top":
32693              n2.className = "introjs-arrow bottom", jo(a2, i2 ? 0 : 15, r2, l2, e2), e2.style.bottom = "".concat(a2.height + 20, "px");
32694              break;
32695            case "right":
32696              e2.style.left = "".concat(a2.width + 20, "px"), a2.top + r2.height > l2.height ? (n2.className = "introjs-arrow left-bottom", e2.style.top = "-".concat(r2.height - a2.height - 20, "px")) : n2.className = "introjs-arrow left";
32697              break;
32698            case "left":
32699              i2 || true !== this._options.showStepNumbers || (e2.style.top = "15px"), a2.top + r2.height > l2.height ? (e2.style.top = "-".concat(r2.height - a2.height - 20, "px"), n2.className = "introjs-arrow right-bottom") : n2.className = "introjs-arrow right", e2.style.right = "".concat(a2.width + 20, "px");
32700              break;
32701            case "floating":
32702              n2.style.display = "none", e2.style.left = "50%", e2.style.top = "50%", e2.style.marginLeft = "-".concat(r2.width / 2, "px"), e2.style.marginTop = "-".concat(r2.height / 2, "px");
32703              break;
32704            case "bottom-right-aligned":
32705              n2.className = "introjs-arrow top-right", Co(a2, u2 = 0, r2, e2), e2.style.top = "".concat(a2.height + 20, "px");
32706              break;
32707            case "bottom-middle-aligned":
32708              n2.className = "introjs-arrow top-middle", h2 = a2.width / 2 - r2.width / 2, i2 && (h2 += 5), Co(a2, h2, r2, e2) && (e2.style.right = null, jo(a2, h2, r2, l2, e2)), e2.style.top = "".concat(a2.height + 20, "px");
32709              break;
32710            default:
32711              n2.className = "introjs-arrow top", jo(a2, 0, r2, l2, e2), e2.style.top = "".concat(a2.height + 20, "px");
32712          }
32713        }
32714        function Ro() {
32715          n(document.querySelectorAll(".introjs-showElement"), (function(t3) {
32716            to(t3, /introjs-[a-zA-Z]+/g);
32717          }));
32718        }
32719        function qo(t3, e2) {
32720          var n2 = document.createElement(t3);
32721          e2 = e2 || {};
32722          var i2 = /^(?:role|data-|aria-)/;
32723          for (var o2 in e2) {
32724            var r2 = e2[o2];
32725            "style" === o2 ? eo(n2, r2) : o2.match(i2) ? n2.setAttribute(o2, r2) : n2[o2] = r2;
32726          }
32727          return n2;
32728        }
32729        function Bo(t3, e2, n2) {
32730          if (n2) {
32731            var i2 = e2.style.opacity || "1";
32732            eo(e2, { opacity: "0" }), window.setTimeout((function() {
32733              eo(e2, { opacity: i2 });
32734            }), 10);
32735          }
32736          t3.appendChild(e2);
32737        }
32738        function Mo() {
32739          return parseInt(this._currentStep + 1, 10) / this._introItems.length * 100;
32740        }
32741        function Ho() {
32742          var t3 = document.querySelector(".introjs-disableInteraction");
32743          null === t3 && (t3 = qo("div", { className: "introjs-disableInteraction" }), this._targetElement.appendChild(t3)), no.call(this, t3);
32744        }
32745        function Fo(t3) {
32746          var e2 = this, i2 = qo("div", { className: "introjs-bullets" });
32747          false === this._options.showBullets && (i2.style.display = "none");
32748          var o2 = qo("ul");
32749          o2.setAttribute("role", "tablist");
32750          var r2 = function() {
32751            e2.goToStep(this.getAttribute("data-stepnumber"));
32752          };
32753          return n(this._introItems, (function(e3, n2) {
32754            var i3 = e3.step, a2 = qo("li"), l2 = qo("a");
32755            a2.setAttribute("role", "presentation"), l2.setAttribute("role", "tab"), l2.onclick = r2, n2 === t3.step - 1 && (l2.className = "active"), Ni(l2), l2.innerHTML = "&nbsp;", l2.setAttribute("data-stepnumber", i3), a2.appendChild(l2), o2.appendChild(a2);
32756          })), i2.appendChild(o2), i2;
32757        }
32758        function $o(t3, e2) {
32759          if (this._options.showBullets) {
32760            var n2 = document.querySelector(".introjs-bullets");
32761            n2.parentNode.replaceChild(Fo.call(this, e2), n2);
32762          }
32763        }
32764        function Do(t3, e2) {
32765          this._options.showBullets && (t3.querySelector(".introjs-bullets li > a.active").className = "", t3.querySelector('.introjs-bullets li > a[data-stepnumber="'.concat(e2.step, '"]')).className = "active");
32766        }
32767        function zo() {
32768          var t3 = qo("div");
32769          t3.className = "introjs-progress", false === this._options.showProgress && (t3.style.display = "none");
32770          var e2 = qo("div", { className: "introjs-progressbar" });
32771          return this._options.progressBarAdditionalClass && (e2.className += " " + this._options.progressBarAdditionalClass), e2.setAttribute("role", "progress"), e2.setAttribute("aria-valuemin", 0), e2.setAttribute("aria-valuemax", 100), e2.setAttribute("aria-valuenow", Mo.call(this)), e2.style.cssText = "width:".concat(Mo.call(this), "%;"), t3.appendChild(e2), t3;
32772        }
32773        function Go(t3) {
32774          t3.querySelector(".introjs-progress .introjs-progressbar").style.cssText = "width:".concat(Mo.call(this), "%;"), t3.querySelector(".introjs-progress .introjs-progressbar").setAttribute("aria-valuenow", Mo.call(this));
32775        }
32776        function Uo(t3) {
32777          var e2 = this;
32778          void 0 !== this._introChangeCallback && this._introChangeCallback.call(this, t3.element);
32779          var n2, i2, o2, r2 = this, a2 = document.querySelector(".introjs-helperLayer"), l2 = document.querySelector(".introjs-tooltipReferenceLayer"), s2 = "introjs-helperLayer";
32780          if ("string" == typeof t3.highlightClass && (s2 += " ".concat(t3.highlightClass)), "string" == typeof this._options.highlightClass && (s2 += " ".concat(this._options.highlightClass)), null !== a2 && null !== l2) {
32781            var c2 = l2.querySelector(".introjs-helperNumberLayer"), u2 = l2.querySelector(".introjs-tooltiptext"), h2 = l2.querySelector(".introjs-tooltip-title"), f2 = l2.querySelector(".introjs-arrow"), p2 = l2.querySelector(".introjs-tooltip");
32782            o2 = l2.querySelector(".introjs-skipbutton"), i2 = l2.querySelector(".introjs-prevbutton"), n2 = l2.querySelector(".introjs-nextbutton"), a2.className = s2, p2.style.opacity = 0, p2.style.display = "none", Ei.call(r2, t3), no.call(r2, a2), no.call(r2, l2), Ro(), r2._lastShowElementTimer && window.clearTimeout(r2._lastShowElementTimer), r2._lastShowElementTimer = window.setTimeout((function() {
32783              null !== c2 && (c2.innerHTML = "".concat(t3.step, " of ").concat(e2._introItems.length)), u2.innerHTML = t3.intro, h2.innerHTML = t3.title, p2.style.display = "block", Lo.call(r2, t3.element, p2, f2), Do.call(r2, l2, t3), Go.call(r2, l2), p2.style.opacity = 1, (null != n2 && /introjs-donebutton/gi.test(n2.className) || null != n2) && n2.focus(), Ti.call(r2, t3.scrollTo, t3, u2);
32784            }), 350);
32785          } else {
32786            var d2 = qo("div", { className: s2 }), g2 = qo("div", { className: "introjs-tooltipReferenceLayer" }), v2 = qo("div", { className: "introjs-arrow" }), m2 = qo("div", { className: "introjs-tooltip" }), b2 = qo("div", { className: "introjs-tooltiptext" }), y2 = qo("div", { className: "introjs-tooltip-header" }), w2 = qo("h1", { className: "introjs-tooltip-title" }), _2 = qo("div");
32787            eo(d2, { "box-shadow": "0 0 1px 2px rgba(33, 33, 33, 0.8), rgba(33, 33, 33, ".concat(r2._options.overlayOpacity.toString(), ") 0 0 0 5000px") }), Ei.call(r2, t3), no.call(r2, d2), no.call(r2, g2), Bo(this._targetElement, d2, true), Bo(this._targetElement, g2), b2.innerHTML = t3.intro, w2.innerHTML = t3.title, _2.className = "introjs-tooltipbuttons", false === this._options.showButtons && (_2.style.display = "none"), y2.appendChild(w2), m2.appendChild(y2), m2.appendChild(b2), m2.appendChild(Fo.call(this, t3)), m2.appendChild(zo.call(this));
32788            var x2 = qo("div");
32789            true === this._options.showStepNumbers && (x2.className = "introjs-helperNumberLayer", x2.innerHTML = "".concat(t3.step, " of ").concat(this._introItems.length), m2.appendChild(x2)), m2.appendChild(v2), g2.appendChild(m2), (n2 = qo("a")).onclick = function() {
32790              r2._introItems.length - 1 !== r2._currentStep ? Yo.call(r2) : /introjs-donebutton/gi.test(n2.className) && ("function" == typeof r2._introCompleteCallback && r2._introCompleteCallback.call(r2, r2._currentStep, "done"), Pr.call(r2, r2._targetElement));
32791            }
32791, Ni(n2), n2.innerHTML = this._options.nextLabel, (i2 = qo("a")).onclick = function() {
32792              0 !== r2._currentStep && Ko.call(r2);
32793            }, Ni(i2), i2.innerHTML = this._options.prevLabel, Ni(o2 = qo("a", { className: "introjs-skipbutton" })), o2.innerHTML = this._options.skipLabel, o2.onclick = function() {
32794              r2._introItems.length - 1 === r2._currentStep && "function" == typeof r2._introCompleteCallback && r2._introCompleteCallback.call(r2, r2._currentStep, "skip"), "function" == typeof r2._introSkipCallback && r2._introSkipCallback.call(r2), Pr.call(r2, r2._targetElement);
32795            }, y2.appendChild(o2), this._introItems.length > 1 && _2.appendChild(i2), _2.appendChild(n2), m2.appendChild(_2), Lo.call(r2, t3.element, m2, v2), Ti.call(this, t3.scrollTo, t3, m2);
32796          }
32797          var S2 = r2._targetElement.querySelector(".introjs-disableInteraction");
32798          S2 && S2.parentNode.removeChild(S2), t3.disableInteraction && Ho.call(r2), 0 === this._currentStep && this._introItems.length > 1 ? (null != n2 && (n2.className = "".concat(this._options.buttonClass, " introjs-nextbutton"), n2.innerHTML = this._options.nextLabel), true === this._options.hidePrev ? (null != i2 && (i2.className = "".concat(this._options.buttonClass, " introjs-prevbutton introjs-hidden")), null != n2 && ki(n2, "introjs-fullbutton")) : null != i2 && (i2.className = "".concat(this._options.buttonClass, " introjs-prevbutton introjs-disabled"))) : this._introItems.length - 1 === this._currentStep || 1 === this._introItems.length ? (null != i2 && (i2.className = "".concat(this._options.buttonClass, " introjs-prevbutton")), true === this._options.hideNext ? (null != n2 && (n2.className = "".concat(this._options.buttonClass, " introjs-nextbutton introjs-hidden")), null != i2 && ki(i2, "introjs-fullbutton")) : null != n2 && (true === this._options.nextToDone ? (n2.innerHTML = this._options.doneLabel, ki(n2, "".concat(this._options.buttonClass, " introjs-nextbutton introjs-donebutton"))) : n2.className = "".concat(this._options.buttonClass, " introjs-nextbutton introjs-disabled"))) : (null != i2 && (i2.className = "".concat(this._options.buttonClass, " introjs-prevbutton")), null != n2 && (n2.className = "".concat(this._options.buttonClass, " introjs-nextbutton"), n2.innerHTML = this._options.nextLabel)), null != i2 && i2.setAttribute("role", "button"), null != n2 && n2.setAttribute("role", "button"), null != o2 && o2.setAttribute("role", "button"), null != n2 && n2.focus(), (function(t4) {
32799            var e3 = t4.element;
32800            ki(e3, "introjs-showElement");
32801            var n3 = Ai(e3, "position");
32802            "absolute" !== n3 && "relative" !== n3 && "sticky" !== n3 && "fixed" !== n3 && ki(e3, "introjs-relativePosition");
32803          })(t3), void 0 !== this._introAfterChangeCallback && this._introAfterChangeCallback.call(this, t3.element);
32804        }
32805        function Wo(t3) {
32806          this._currentStep = t3 - 2, void 0 !== this._introItems && Yo.call(this);
32807        }
32808        function Vo(t3) {
32809          this._currentStepNumber = t3, void 0 !== this._introItems && Yo.call(this);
32810        }
32811        function Yo() {
32812          var t3 = this;
32813          this._direction = "forward", void 0 !== this._currentStepNumber && n(this._introItems, (function(e3, n2) {
32814            e3.step === t3._currentStepNumber && (t3._currentStep = n2 - 1, t3._currentStepNumber = void 0);
32815          })), void 0 === this._currentStep ? this._currentStep = 0 : ++this._currentStep;
32816          var e2 = this._introItems[this._currentStep], i2 = true;
32817          return void 0 !== this._introBeforeChangeCallback && (i2 = this._introBeforeChangeCallback.call(this, e2 && e2.element)), false === i2 ? (--this._currentStep, false) : this._introItems.length <= this._currentStep ? ("function" == typeof this._introCompleteCallback && this._introCompleteCallback.call(this, this._currentStep, "end"), void Pr.call(this, this._targetElement)) : void Uo.call(this, e2);
32818        }
32819        function Ko() {
32820          if (this._direction = "backward", 0 === this._currentStep) return false;
32821          --this._currentStep;
32822          var t3 = this._introItems[this._currentStep], e2 = true;
32823          if (void 0 !== this._introBeforeChangeCallback && (e2 = this._introBeforeChangeCallback.call(this, t3 && t3.element)), false === e2) return ++this._currentStep, false;
32824          Uo.call(this, t3);
32825        }
32826        function Xo() {
32827          return this._currentStep;
32828        }
32829        function Jo(t3) {
32830          var e2 = void 0 === t3.code ? t3.which : t3.code;
32831          if (null === e2 && (e2 = null === t3.charCode ? t3.keyCode : t3.charCode), "Escape" !== e2 && 27 !== e2 || true !== this._options.exitOnEsc) {
32832            if ("ArrowLeft" === e2 || 37 === e2) Ko.call(this);
32833            else if ("ArrowRight" === e2 || 39 === e2) Yo.call(this);
32834            else if ("Enter" === e2 || "NumpadEnter" === e2 || 13 === e2) {
32835              var n2 = t3.target || t3.srcElement;
32836              n2 && n2.className.match("introjs-prevbutton") ? Ko.call(this) : n2 && n2.className.match("introjs-skipbutton") ? (this._introItems.length - 1 === this._currentStep && "function" == typeof this._introCompleteCallback && this._introCompleteCallback.call(this, this._currentStep, "skip"), Pr.call(this, this._targetElement)) : n2 && n2.getAttribute("data-stepnumber") ? n2.click() : Yo.call(this), t3.preventDefault ? t3.preventDefault() : t3.returnValue = false;
32837            }
32838          } else Pr.call(this, this._targetElement);
32839        }
32840        function Qo(e2) {
32841          if (null === e2 || "object" !== t2(e2) || void 0 !== e2.nodeType) return e2;
32842          var n2 = {};
32843          for (var i2 in e2) void 0 !== window.jQuery && e2[i2] instanceof window.jQuery ? n2[i2] = e2[i2] : n2[i2] = Qo(e2[i2]);
32844          return n2;
32845        }
32846        function Zo(t3) {
32847          var e2 = document.querySelector(".introjs-hints");
32848          return e2 ? e2.querySelectorAll(t3) : [];
32849        }
32850        function tr(t3) {
32851          var e2 = Zo('.introjs-hint[data-step="'.concat(t3, '"]'))[0];
32852          cr.call(this), e2 && ki(e2, "introjs-hidehint"), void 0 !== this._hintCloseCallback && this._hintCloseCallback.call(this, t3);
32853        }
32854        function er() {
32855          var t3 = this;
32856          n(Zo(".introjs-hint"), (function(e2) {
32857            tr.call(t3, e2.getAttribute("data-step"));
32858          }));
32859        }
32860        function nr() {
32861          var t3 = this, e2 = Zo(".introjs-hint");
32862          e2 && e2.length ? n(e2, (function(e3) {
32863            ir.call(t3, e3.getAttribute("data-step"));
32864          })) : ur.call(this, this._targetElement);
32865        }
32866        function ir(t3) {
32867          var e2 = Zo('.introjs-hint[data-step="'.concat(t3, '"]'))[0];
32868          e2 && to(e2, /introjs-hidehint/g);
32869        }
32870        function or() {
32871          var t3 = this;
32872          n(Zo(".introjs-hint"), (function(e2) {
32873            rr.call(t3, e2.getAttribute("data-step"));
32874          })), i.off(document, "click", cr, this, false), i.off(window, "resize", hr, this, true), this._hintsAutoRefreshFunction && i.off(window, "scroll", this._hintsAutoRefreshFunction, this, true);
32875        }
32876        function rr(t3) {
32877          var e2 = Zo('.introjs-hint[data-step="'.concat(t3, '"]'))[0];
32878          e2 && e2.parentNode.removeChild(e2);
32879        }
32880        function ar() {
32881          var t3 = this, e2 = this, o2 = document.querySelector(".introjs-hints");
32882          null === o2 && (o2 = qo("div", { className: "introjs-hints" }));
32883          n(this._introItems, (function(n2, i2) {
32884            if (!document.querySelector('.introjs-hint[data-step="'.concat(i2, '"]'))) {
32885              var r2 = qo("a", { className: "introjs-hint" });
32886              Ni(r2), r2.onclick = /* @__PURE__ */ (function(t4) {
32887                return function(n3) {
32888                  var i3 = n3 || window.event;
32889                  i3.stopPropagation && i3.stopPropagation(), null !== i3.cancelBubble && (i3.cancelBubble = true), sr.call(e2, t4);
32890                };
32891              })(i2), n2.hintAnimation || ki(r2, "introjs-hint-no-anim"), qi(n2.element) && ki(r2, "introjs-fixedhint");
32892              var a2 = qo("div", { className: "introjs-hint-dot" }), l2 = qo("div", { className: "introjs-hint-pulse" });
32893              r2.appendChild(a2), r2.appendChild(l2), r2.setAttribute("data-step", i2), n2.targetElement = n2.element, n2.element = r2, lr.call(t3, n2.hintPosition, r2, n2.targetElement), o2.appendChild(r2);
32894            }
32895          })), document.body.appendChild(o2), void 0 !== this._hintsAddedCallback && this._hintsAddedCallback.call(this), this._options.hintAutoRefreshInterval >= 0 && (this._hintsAutoRefreshFunction = /* @__PURE__ */ (function(t4, e3) {
32896            var n2, i2 = this;
32897            return function() {
32898              for (var o3 = arguments.length, r2 = new Array(o3), a2 = 0; a2 < o3; a2++) r2[a2] = arguments[a2];
32899              clearTimeout(n2), n2 = setTimeout((function() {
32900                t4.apply(i2, r2);
32901              }), e3);
32902            };
32903          })((function() {
32904            return hr.call(t3);
32905          }), this._options.hintAutoRefreshInterval), i.on(window, "scroll", this._hintsAutoRefreshFunction, this, true));
32906        }
32907        function lr(t3, e2, n2) {
32908          var i2 = e2.style, o2 = Bi.call(this, n2), r2 = 20, a2 = 20;
32909          switch (t3) {
32910            default:
32911              i2.left = "".concat(o2.left, "px"), i2.top = "".concat(o2.top, "px");
32912              break;
32913            case "top-right":
32914              i2.left = "".concat(o2.left + o2.width - r2, "px"), i2.top = "".concat(o2.top, "px");
32915              break;
32916            case "bottom-left":
32917              i2.left = "".concat(o2.left, "px"), i2.top = "".concat(o2.top + o2.height - a2, "px");
32918              break;
32919            case "bottom-right":
32920              i2.left = "".concat(o2.left + o2.width - r2, "px"), i2.top = "".concat(o2.top + o2.height - a2, "px");
32921              break;
32922            case "middle-left":
32923              i2.left = "".concat(o2.left, "px"), i2.top = "".concat(o2.top + (o2.height - a2) / 2, "px");
32924              break;
32925            case "middle-right":
32926              i2.left = "".concat(o2.left + o2.width - r2, "px"), i2.top = "".concat(o2.top + (o2.height - a2) / 2, "px");
32927              break;
32928            case "middle-middle":
32929              i2.left = "".concat(o2.left + (o2.width - r2) / 2, "px"), i2.top = "".concat(o2.top + (o2.height - a2) / 2, "px");
32930              break;
32931            case "bottom-middle":
32932              i2.left = "".concat(o2.left + (o2.width - r2) / 2, "px"), i2.top = "".concat(o2.top + o2.height - a2, "px");
32933              break;
32934            case "top-middle":
32935              i2.left = "".concat(o2.left + (o2.width - r2) / 2, "px"), i2.top = "".concat(o2.top, "px");
32936          }
32937        }
32938        function sr(t3) {
32939          var e2 = document.querySelector('.introjs-hint[data-step="'.concat(t3, '"]')), n2 = this._introItems[t3];
32940          void 0 !== this._hintClickCallback && this._hintClickCallback.call(this, e2, n2, t3);
32941          var i2 = cr.call(this);
32942          if (parseInt(i2, 10) !== t3) {
32943            var o2 = qo("div", { className: "introjs-tooltip" }), r2 = qo("div"), a2 = qo("div"), l2 = qo("div");
32944            o2.onclick = function(t4) {
32945              t4.stopPropagation ? t4.stopPropagation() : t4.cancelBubble = true;
32946            }, r2.className = "introjs-tooltiptext";
32947            var s2 = qo("p");
32948            if (s2.innerHTML = n2.hint, r2.appendChild(s2), this._options.hintShowButton) {
32949              var c2 = qo("a");
32950              c2.className = this._options.buttonClass, c2.setAttribute("role", "button"), c2.innerHTML = this._options.hintButtonLabel, c2.onclick = tr.bind(this, t3), r2.appendChild(c2);
32951            }
32952            a2.className = "introjs-arrow", o2.appendChild(a2), o2.appendChild(r2), this._currentStep = e2.getAttribute("data-step"), l2.className = "introjs-tooltipReferenceLayer introjs-hintReference", l2.setAttribute("data-step", e2.getAttribute("data-step")), no.call(this, l2), l2.appendChild(o2), document.body.appendChild(l2), Lo.call(this, e2, o2, a2, true);
32953          }
32954        }
32955        function cr() {
32956          var t3 = document.querySelector(".introjs-hintReference");
32957          if (t3) {
32958            var e2 = t3.getAttribute("data-step");
32959            return t3.parentNode.removeChild(t3), e2;
32960          }
32961        }
32962        function ur(t3) {
32963          var e2 = this;
32964          if (this._introItems = [], this._options.hints) n(this._options.hints, (function(t4) {
32965            var n2 = Qo(t4);
32966            "string" == typeof n2.element && (n2.element = document.querySelector(n2.element)), n2.hintPosition = n2.hintPosition || e2._options.hintPosition, n2.hintAnimation = n2.hintAnimation || e2._options.hintAnimation, null !== n2.element && e2._introItems.push(n2);
32967          }));
32968          else {
32969            var o2 = t3.querySelectorAll("*[data-hint]");
32970            if (!o2 || !o2.length) return false;
32971            n(o2, (function(t4) {
32972              var n2 = t4.getAttribute("data-hintanimation");
32973              n2 = n2 ? "true" === n2 : e2._options.hintAnimation, e2._introItems.push({ element: t4, hint: t4.getAttribute("data-hint"), hintPosition: t4.getAttribute("data-hintposition") || e2._options.hintPosition, hintAnimation: n2, tooltipClass: t4.getAttribute("data-tooltipclass"), position: t4.getAttribute("data-position") || e2._options.tooltipPosition });
32974            }));
32975          }
32976          ar.call(this), i.on(document, "click", cr, this, false), i.on(window, "resize", hr, this, true);
32977        }
32978        function hr() {
32979          var t3 = this;
32980          n(this._introItems, (function(e2) {
32981            var n2 = e2.targetElement, i2 = e2.hintPosition, o2 = e2.element;
32982            void 0 !== n2 && lr.call(t3, i2, o2, n2);
32983          }));
32984        }
32985        Pe({ target: "Array", proto: true, forced: !ko }, { splice: function(t3, e2) {
32986          var n2, i2, o2, r2, a2, l2, s2 = rt(this), c2 = fe(s2), u2 = ce(t3, c2), h2 = arguments.length;
32987          if (0 === h2 ? n2 = i2 = 0 : 1 === h2 ? (n2 = 0, i2 = c2 - u2) : (n2 = h2 - 2, i2 = Io(Eo(ae(e2), 0), c2 - u2)), c2 + n2 - i2 > To) throw Ao(No);
32988          for (o2 = zn(s2, i2), r2 = 0; r2 < i2; r2++) (a2 = u2 + r2) in s2 && On(o2, r2, s2[a2]);
32989          if (o2.length = i2, n2 < i2) {
32990            for (r2 = u2; r2 < c2 - i2; r2++) l2 = r2 + n2, (a2 = r2 + i2) in s2 ? s2[l2] = s2[a2] : delete s2[l2];
32991            for (r2 = c2; r2 > c2 - i2 + n2; r2--) delete s2[r2 - 1];
32992          } else if (n2 > i2) for (r2 = c2 - i2; r2 > u2; r2--) l2 = r2 + n2 - 1, (a2 = r2 + i2 - 1) in s2 ? s2[l2] = s2[a2] : delete s2[l2];
32993          for (r2 = 0; r2 < n2; r2++) s2[r2 + u2] = arguments[r2 + 2];
32994          return s2.length = c2 - i2 + n2, o2;
32995        } });
32996        var fr = Math.floor, pr = function(t3, e2) {
32997          var n2 = t3.length, i2 = fr(n2 / 2);
32998          return n2 < 8 ? dr(t3, e2) : gr(t3, pr(mi(t3, 0, i2), e2), pr(mi(t3, i2), e2), e2);
32999        }, dr = function(t3, e2) {
33000          for (var n2, i2, o2 = t3.length, r2 = 1; r2 < o2; ) {
33001            for (i2 = r2, n2 = t3[r2]; i2 && e2(t3[i2 - 1], n2) > 0; ) t3[i2] = t3[--i2];
33002            i2 !== r2++ && (t3[i2] = n2);
33003          }
33004          return t3;
33005        }, gr = function(t3, e2, n2, i2) {
33006          for (var o2 = e2.length, r2 = n2.length, a2 = 0, l2 = 0; a2 < o2 || l2 < r2; ) t3[a2 + l2] = a2 < o2 && l2 < r2 ? i2(e2[a2], n2[l2]) <= 0 ? e2[a2++] : n2[l2++] : a2 < o2 ? e2[a2++] : n2[l2++];
33007          return t3;
33008        }, vr = pr, mr = B.match(/firefox\/(\d+)/i), br = !!mr && +mr[1], yr = /MSIE|Trident/.test(B), wr = B.match(/AppleWebKit\/(\d+)\./), _r = !!wr && +wr[1], xr = [], Sr = x(xr.sort), jr = x(xr.push), Cr = u((function() {
33009          xr.sort(void 0);
33010        })), kr = u((function() {
33011          xr.sort(null);
33012        })), Ar = vo("sort"), Er = !u((function() {
33013          if (D) return D < 70;
33014          if (!(br && br > 3)) {
33015            if (yr) return true;
33016            if (_r) return _r < 603;
33017            var t3, e2, n2, i2, o2 = "";
33018            for (t3 = 65; t3 < 76; t3++) {
33019              switch (e2 = String.fromCharCode(t3), t3) {
33020                case 66:
33021                case 69:
33022                case 70:
33023                case 72:
33024                  n2 = 3;
33025                  break;
33026                case 68:
33027                case 71:
33028                  n2 = 4;
33029                  break;
33030                default:
33031                  n2 = 2;
33032              }
33033              for (i2 = 0; i2 < 47; i2++) xr.push({ k: e2 + i2, v: n2 });
33034            }
33035            for (xr.sort((function(t4, e3) {
33036              return e3.v - t4.v;
33037            })), i2 = 0; i2 < xr.length; i2++) e2 = xr[i2].k.charAt(0), o2.charAt(o2.length - 1) !== e2 && (o2 += e2);
33038            return "DGBEFHACIJK" !== o2;
33039          }
33040        }));
33041        function Ir(t3) {
33042          var e2 = this, i2 = t3.querySelectorAll("*[data-intro]"), o2 = [];
33043          if (this._options.steps) n(this._options.steps, (function(t4) {
33044            var n2 = Qo(t4);
33045            if (n2.step = o2.length + 1, n2.title = n2.title || "", "string" == typeof n2.element && (n2.element = document.querySelector(n2.element)), void 0 === n2.element || null === n2.element) {
33046              var i3 = document.querySelector(".introjsFloatingElement");
33047              null === i3 && (i3 = qo("div", { className: "introjsFloatingElement" }), document.body.appendChild(i3)), n2.element = i3, n2.position = "floating";
33048            }
33049            n2.position = n2.position || e2._options.tooltipPosition, n2.
33049scrollTo = n2.scrollTo || e2._options.scrollTo, void 0 === n2.disableInteraction && (n2.disableInteraction = e2._options.disableInteraction), null !== n2.element && o2.push(n2);
33050          }));
33051          else {
33052            var r2;
33053            if (i2.length < 1) return [];
33054            n(i2, (function(t4) {
33055              if ((!e2._options.group || t4.getAttribute("data-intro-group") === e2._options.group) && "none" !== t4.style.display) {
33056                var n2 = parseInt(t4.getAttribute("data-step"), 10);
33057                r2 = t4.hasAttribute("data-disable-interaction") ? !!t4.getAttribute("data-disable-interaction") : e2._options.disableInteraction, n2 > 0 && (o2[n2 - 1] = { element: t4, title: t4.getAttribute("data-title") || "", intro: t4.getAttribute("data-intro"), step: parseInt(t4.getAttribute("data-step"), 10), tooltipClass: t4.getAttribute("data-tooltipclass"), highlightClass: t4.getAttribute("data-highlightclass"), position: t4.getAttribute("data-position") || e2._options.tooltipPosition, scrollTo: t4.getAttribute("data-scrollto") || e2._options.scrollTo, disableInteraction: r2 });
33058              }
33059            }));
33060            var a2 = 0;
33061            n(i2, (function(t4) {
33062              if ((!e2._options.group || t4.getAttribute("data-intro-group") === e2._options.group) && null === t4.getAttribute("data-step")) {
33063                for (; void 0 !== o2[a2]; ) a2++;
33064                r2 = t4.hasAttribute("data-disable-interaction") ? !!t4.getAttribute("data-disable-interaction") : e2._options.disableInteraction, o2[a2] = { element: t4, title: t4.getAttribute("data-title") || "", intro: t4.getAttribute("data-intro"), step: a2 + 1, tooltipClass: t4.getAttribute("data-tooltipclass"), highlightClass: t4.getAttribute("data-highlightclass"), position: t4.getAttribute("data-position") || e2._options.tooltipPosition, scrollTo: t4.getAttribute("data-scrollto") || e2._options.scrollTo, disableInteraction: r2 };
33065              }
33066            }));
33067          }
33068          for (var l2 = [], s2 = 0; s2 < o2.length; s2++) o2[s2] && l2.push(o2[s2]);
33069          return (o2 = l2).sort((function(t4, e3) {
33070            return t4.step - e3.step;
33071          })), o2;
33072        }
33073        function Tr(t3) {
33074          var e2 = document.querySelector(".introjs-tooltipReferenceLayer"), n2 = document.querySelector(".introjs-helperLayer"), i2 = document.querySelector(".introjs-disableInteraction");
33075          if (no.call(this, n2), no.call(this, e2), no.call(this, i2), t3 && (this._introItems = Ir.call(this, this._targetElement), $o.call(this, e2, this._introItems[this._currentStep]), Go.call(this, e2)), void 0 !== this._currentStep && null !== this._currentStep) {
33076            var o2 = document.querySelector(".introjs-arrow"), r2 = document.querySelector(".introjs-tooltip");
33077            r2 && o2 && Lo.call(this, this._introItems[this._currentStep].element, r2, o2);
33078          }
33079          return hr.call(this), this;
33080        }
33081        function Nr() {
33082          Tr.call(this);
33083        }
33084        function Or(t3, e2) {
33085          if (t3 && t3.parentElement) {
33086            var n2 = t3.parentElement;
33087            e2 ? (eo(t3, { opacity: "0" }), window.setTimeout((function() {
33088              try {
33089                n2.removeChild(t3);
33090              } catch (t4) {
33091              }
33092            }), 500)) : n2.removeChild(t3);
33093          }
33094        }
33095        function Pr(t3, e2) {
33096          var o2 = true;
33097          if (void 0 !== this._introBeforeExitCallback && (o2 = this._introBeforeExitCallback.call(this)), e2 || false !== o2) {
33098            var r2 = t3.querySelectorAll(".introjs-overlay");
33099            r2 && r2.length && n(r2, (function(t4) {
33100              return Or(t4);
33101            })), Or(t3.querySelector(".introjs-helperLayer"), true), Or(t3.querySelector(".introjs-tooltipReferenceLayer")), Or(t3.querySelector(".introjs-disableInteraction")), Or(document.querySelector(".introjsFloatingElement")), Ro(), i.off(window, "keydown", Jo, this, true), i.off(window, "resize", Nr, this, true), void 0 !== this._introExitCallback && this._introExitCallback.call(this), this._currentStep = void 0;
33102          }
33103        }
33104        function Lr(t3) {
33105          var e2 = this, n2 = qo("div", { className: "introjs-overlay" });
33106          return eo(n2, { top: 0, bottom: 0, left: 0, right: 0, position: "fixed" }), t3.appendChild(n2), true === this._options.exitOnOverlayClick && (eo(n2, { cursor: "pointer" }), n2.onclick = function() {
33107            Pr.call(e2, t3);
33108          }), true;
33109        }
33110        function Rr(t3) {
33111          void 0 !== this._introStartCallback && this._introStartCallback.call(this, t3);
33112          var e2 = Ir.call(this, t3);
33113          return 0 === e2.length || (this._introItems = e2, Lr.call(this, t3) && (Yo.call(this), this._options.keyboardNavigation && i.on(window, "keydown", Jo, this, true), i.on(window, "resize", Nr, this, true))), false;
33114        }
33115        Pe({ target: "Array", proto: true, forced: Cr || !kr || !Ar || !Er }, { sort: function(t3) {
33116          void 0 !== t3 && X(t3);
33117          var e2 = rt(this);
33118          if (Er) return void 0 === t3 ? Sr(e2) : Sr(e2, t3);
33119          var n2, i2, o2 = [], r2 = fe(e2);
33120          for (i2 = 0; i2 < r2; i2++) i2 in e2 && jr(o2, e2[i2]);
33121          for (vr(o2, /* @__PURE__ */ (function(t4) {
33122            return function(e3, n3) {
33123              return void 0 === n3 ? -1 : void 0 === e3 ? 1 : void 0 !== t4 ? +t4(e3, n3) || 0 : De(e3) > De(n3) ? 1 : -1;
33124            };
33125          })(t3)), n2 = o2.length, i2 = 0; i2 < n2; ) e2[i2] = o2[i2++];
33126          for (; i2 < r2; ) delete e2[i2++];
33127          return e2;
33128        } });
33129        function qr(t3) {
33130          this._targetElement = t3, this._introItems = [], this._options = { nextLabel: "Next", prevLabel: "Back", skipLabel: "\xD7", doneLabel: "Done", hidePrev: false, hideNext: false, nextToDone: true, tooltipPosition: "bottom", tooltipClass: "", group: "", highlightClass: "", exitOnEsc: true, exitOnOverlayClick: true, showStepNumbers: false, keyboardNavigation: true, showButtons: true, showBullets: true, showProgress: false, scrollToElement: true, scrollTo: "element", scrollPadding: 30, overlayOpacity: 0.5, autoPosition: true, positionPrecedence: ["bottom", "top", "right", "left"], disableInteraction: false, helperElementPadding: 10, hintPosition: "top-middle", hintButtonLabel: "Got it", hintShowButton: true, hintAutoRefreshInterval: 10, hintAnimation: true, buttonClass: "introjs-button", progressBarAdditionalClass: false };
33131        }
33132        var Br = function n2(i2) {
33133          var o2;
33134          if ("object" === t2(i2)) o2 = new qr(i2);
33135          else if ("string" == typeof i2) {
33136            var r2 = document.querySelector(i2);
33137            if (!r2) throw new Error("There is no element with given selector.");
33138            o2 = new qr(r2);
33139          } else o2 = new qr(document.body);
33140          return n2.instances[e(o2, "introjs-instance")] = o2, o2;
33141        };
33142        return Br.version = "4.3.0", Br.instances = {}, Br.fn = qr.prototype = { clone: function() {
33143          return new qr(this);
33144        }, setOption: function(t3, e2) {
33145          return this._options[t3] = e2, this;
33146        }, setOptions: function(t3) {
33147          return this._options = (function(t4, e2) {
33148            var n2, i2 = {};
33149            for (n2 in t4) i2[n2] = t4[n2];
33150            for (n2 in e2) i2[n2] = e2[n2];
33151            return i2;
33152          })(this._options, t3), this;
33153        }, start: function() {
33154          return Rr.call(this, this._targetElement), this;
33155        }, goToStep: function(t3) {
33156          return Wo.call(this, t3), this;
33157        }, addStep: function(t3) {
33158          return this._options.steps || (this._options.steps = []), this._options.steps.push(t3), this;
33159        }, addSteps: function(t3) {
33160          if (t3.length) {
33161            for (var e2 = 0; e2 < t3.length; e2++) this.addStep(t3[e2]);
33162            return this;
33163          }
33164        }, goToStepNumber: function(t3) {
33165          return Vo.call(this, t3), this;
33166        }, nextStep: function() {
33167          return Yo.call(this), this;
33168        }, previousStep: function() {
33169          return Ko.call(this), this;
33170        }, currentStep: function() {
33171          return Xo.call(this);
33172        }, exit: function(t3) {
33173          return Pr.call(this, this._targetElement, t3), this;
33174        }, refresh: function(t3) {
33175          return Tr.call(this, t3), this;
33176        }, onbeforechange: function(t3) {
33177          if ("function" != typeof t3) throw new Error("Provided callback for onbeforechange was not a function");
33178          return this._introBeforeChangeCallback = t3, this;
33179        }, onchange: function(t3) {
33180          if ("function" != typeof t3) throw new Error("Provided callback for onchange was not a function.");
33181          return this._introChangeCallback = t3, this;
33182        }, onafterchange: function(t3) {
33183          if ("function" != typeof t3) throw new Error("Provided callback for onafterchange was not a function");
33184          return this._introAfterChangeCallback = t3, this;
33185        }, oncomplete: function(t3) {
33186          if ("function" != typeof t3) throw new Error("Provided callback for oncomplete was not a function.");
33187          return this._introCompleteCallback = t3, this;
33188        }, onhintsadded: function(t3) {
33189          if ("function" != typeof t3) throw new Error("Provided callback for onhintsadded was not a function.");
33190          return this._hintsAddedCallback = t3, this;
33191        }, onhintclick: function(t3) {
33192          if ("function" != typeof t3) throw new Error("Provided callback for onhintclick was not a function.");
33193          return this._hintClickCallback = t3, this;
33194        }, onhintclose: function(t3) {
33195          if ("function" != typeof t3) throw new Error("Provided callback for onhintclose was not a function.");
33196          return this._hintCloseCallback = t3, this;
33197        }, onstart: function(t3) {
33198          if ("function" != typeof t3) throw new Error("Provided callback for onstart was not a function.");
33199          return this._introStartCallback = t3, this;
33200        }, onexit: function(t3) {
33201          if ("function" != typeof t3) throw new Error("Provided callback for onexit was not a function.");
33202          return this._introExitCallback = t3, this;
33203        }, onskip: function(t3) {
33204          if ("function" != typeof t3) throw new Error("Provided callback for onskip was not a function.");
33205          return this._introSkipCallback = t3, this;
33206        }, onbeforeexit: function(t3) {
33207          if ("function" != typeof t3) throw new Error("Provided callback for onbeforeexit was not a function.");
33208          return this._introBeforeExitCallback = t3, this;
33209        }, addHints: function() {
33210          return ur.call(this, this._targetElement), this;
33211        }, hideHint: function(t3) {
33212          return tr.call(this, t3), this;
33213        }, hideHints: function() {
33214          return er.call(this), this;
33215        }, showHint: function(t3) {
33216          return ir.call(this, t3), this;
33217        }, showHints: function() {
33218          return nr.call(this), this;
33219        }, removeHints: function() {
33220          return or.call(this), this;
33221        }, removeHint: function(t3) {
33222          return rr().call(this, t3), this;
33223        }, showHintDialog: function(t3) {
33224          return sr.call(this, t3), this;
33225        } }, Br;
33226      }));
33227    }
33228  });
33229
33230  
33230// apps/base/assets/javascripts/vendor/underscore.js
33231  var require_underscore = __commonJS({
33232    "apps/base/assets/javascripts/vendor/underscore.js"(exports, module) {
33233      "use strict";
33234      init_esbuild_shims();
33235      (function() {
33236        var root = this;
33237        var previousUnderscore = root._;
33238        var breaker = {};
33239        var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;
33240        var push = ArrayProto.push, slice = ArrayProto.slice, concat = ArrayProto.concat, toString = ObjProto.toString, hasOwnProperty = ObjProto.hasOwnProperty;
33241        var nativeForEach = ArrayProto.forEach, nativeMap = ArrayProto.map, nativeReduce = ArrayProto.reduce, nativeReduceRight = ArrayProto.reduceRight, nativeFilter = ArrayProto.filter, nativeEvery = ArrayProto.every, nativeSome = ArrayProto.some, nativeIndexOf = ArrayProto.indexOf, nativeLastIndexOf = ArrayProto.lastIndexOf, nativeIsArray = Array.isArray, nativeKeys = Object.keys, nativeBind = FuncProto.bind;
33242        var _ = function(obj) {
33243          if (obj instanceof _) return obj;
33244          if (!(this instanceof _)) return new _(obj);
33245          this._wrapped = obj;
33246        };
33247        if (typeof exports !== "undefined") {
33248          if (typeof module !== "undefined" && module.exports) {
33249            exports = module.exports = _;
33250          }
33251          exports._ = _;
33252        } else {
33253          root._ = _;
33254        }
33255        _.VERSION = "1.6.0";
33256        var each = _.each = _.forEach = function(obj, iterator, context) {
33257          if (obj == null) return obj;
33258          if (nativeForEach && obj.forEach === nativeForEach) {
33259            obj.forEach(iterator, context);
33260          } else if (obj.length === +obj.length) {
33261            for (var i = 0, length = obj.length; i < length; i++) {
33262              if (iterator.call(context, obj[i], i, obj) === breaker) return;
33263            }
33264          } else {
33265            var keys = _.keys(obj);
33266            for (var i = 0, length = keys.length; i < length; i++) {
33267              if (iterator.call(context, obj[keys[i]], keys[i], obj) === breaker) return;
33268            }
33269          }
33270          return obj;
33271        };
33272        _.map = _.collect = function(obj, iterator, context) {
33273          var results = [];
33274          if (obj == null) return results;
33275          if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);
33276          each(obj, function(value, index, list) {
33277            results.push(iterator.call(context, value, index, list));
33278          });
33279          return results;
33280        };
33281        var reduceError = "Reduce of empty array with no initial value";
33282        _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) {
33283          var initial = arguments.length > 2;
33284          if (obj == null) obj = [];
33285          if (nativeReduce && obj.reduce === nativeReduce) {
33286            if (context) iterator = _.bind(iterator, context);
33287            return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator);
33288          }
33289          each(obj, function(value, index, list) {
33290            if (!initial) {
33291              memo = value;
33292              initial = true;
33293            } else {
33294              memo = iterator.call(context, memo, value, index, list);
33295            }
33296          });
33297          if (!initial) throw new TypeError(reduceError);
33298          return memo;
33299        };
33300        _.reduceRight = _.foldr = function(obj, iterator, memo, context) {
33301          var initial = arguments.length > 2;
33302          if (obj == null) obj = [];
33303          if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {
33304            if (context) iterator = _.bind(iterator, context);
33305            return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator);
33306          }
33307          var length = obj.length;
33308          if (length !== +length) {
33309            var keys = _.keys(obj);
33310            length = keys.length;
33311          }
33312          each(obj, function(value, index, list) {
33313            index = keys ? keys[--length] : --length;
33314            if (!initial) {
33315              memo = obj[index];
33316              initial = true;
33317            } else {
33318              memo = iterator.call(context, memo, obj[index], index, list);
33319            }
33320          });
33321          if (!initial) throw new TypeError(reduceError);
33322          return memo;
33323        };
33324        _.find = _.detect = function(obj, predicate, context) {
33325          var result2;
33326          any(obj, function(value, index, list) {
33327            if (predicate.call(context, value, index, list)) {
33328              result2 = value;
33329              return true;
33330            }
33331          });
33332          return result2;
33333        };
33334        _.filter = _.select = function(obj, predicate, context) {
33335          var results = [];
33336          if (obj == null) return results;
33337          if (nativeFilter && obj.filter === nativeFilter) return obj.filter(predicate, context);
33338          each(obj, function(value, index, list) {
33339            if (predicate.call(context, value, index, list)) results.push(value);
33340          });
33341          return results;
33342        };
33343        _.reject = function(obj, predicate, context) {
33344          return _.filter(obj, _.negate(predicate), context);
33345        };
33346        _.every = _.all = function(obj, predicate, context) {
33347          predicate || (predicate = _.identity);
33348          var result2 = true;
33349          if (obj == null) return result2;
33350          if (nativeEvery && obj.every === nativeEvery) return obj.every(predicate, context);
33351          each(obj, function(value, index, list) {
33352            if (!(result2 = result2 && predicate.call(context, value, index, list))) return breaker;
33353          });
33354          return !!result2;
33355        };
33356        var any = _.some = _.any = function(obj, predicate, context) {
33357          predicate || (predicate = _.identity);
33358          var result2 = false;
33359          if (obj == null) return result2;
33360          if (nativeSome && obj.some === nativeSome) return obj.some(predicate, context);
33361          each(obj, function(value, index, list) {
33362            if (result2 || (result2 = predicate.call(context, value, index, list))) return breaker;
33363          });
33364          return !!result2;
33365        };
33366        _.contains = _.include = function(obj, target) {
33367          if (obj == null) return false;
33368          if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;
33369          return any(obj, function(value) {
33370            return value === target;
33371          });
33372        };
33373        _.invoke = function(obj, method) {
33374          var args = slice.call(arguments, 2);
33375          var isFunc = _.isFunction(method);
33376          return _.map(obj, function(value) {
33377            return (isFunc ? method : value[method]).apply(value, args);
33378          });
33379        };
33380        _.pluck = function(obj, key) {
33381          return _.map(obj, _.property(key));
33382        };
33383        _.where = function(obj, attrs) {
33384          return _.filter(obj, _.matches(attrs));
33385        };
33386        _.findWhere = function(obj, attrs) {
33387          return _.find(obj, _.matches(attrs));
33388        };
33389        _.max = function(obj, iterator, context) {
33390          var result2 = -Infinity, lastComputed = -Infinity, value, computed;
33391          if (!iterator && _.isArray(obj)) {
33392            for (var i = 0, length = obj.length; i < length; i++) {
33393              value = obj[i];
33394              if (value > result2) {
33395                result2 = value;
33396              }
33397            }
33398          } else {
33399            each(obj, function(value2, index, list) {
33400              computed = iterator ? iterator.call(context, value2, index, list) : value2;
33401              if (computed > lastComputed) {
33402                result2 = value2;
33403                lastComputed = computed;
33404              }
33405            });
33406          }
33407          return result2;
33408        };
33409        _.min = function(obj, iterator, context) {
33410          var result2 = Infinity, lastComputed = Infinity, value, computed;
33411          if (!iterator && _.isArray(obj)) {
33412            for (var i = 0, length = obj.length; i < length; i++) {
33413              value = obj[i];
33414              if (value < result2) {
33415                result2 = value;
33416              }
33417            }
33418          } else {
33419            each(obj, function(value2, index, list) {
33420              computed = iterator ? iterator.call(context, value2, index, list) : value2;
33421              if (computed < lastComputed) {
33422                result2 = value2;
33423                lastComputed = computed;
33424              }
33425            });
33426          }
33427          return result2;
33428        };
33429        _.shuffle = function(obj) {
33430          var rand;
33431          var index = 0;
33432          var shuffled = [];
33433          each(obj, function(value) {
33434            rand = _.random(index++);
33435            shuffled[index - 1] = shuffled[rand];
33436            shuffled[rand] = value;
33437          });
33438          return shuffled;
33439        };
33440        _.sample = function(obj, n, guard) {
33441          if (n == null || guard) {
33442            if (obj.length !== +obj.length) obj = _.values(obj);
33443            return obj[_.random(obj.length - 1)];
33444          }
33445          return _.shuffle(obj).slice(0, Math.max(0, n));
33446        };
33447        var lookupIterator = function(value) {
33448          if (value == null) return _.identity;
33449          if (_.isFunction(value)) return value;
33450          return _.property(value);
33451        };
33452        _.sortBy = function(obj, iterator, context) {
33453          iterator = lookupIterator(iterator);
33454          return _.pluck(_.map(obj, function(value, index, list) {
33455            return {
33456              value,
33457              index,
33458              criteria: iterator.call(context, value, index, list)
33459            };
33460          }).sort(function(left, right) {
33461            var a = left.criteria;
33462            var b = right.criteria;
33463            if (a !== b) {
33464              if (a > b || a === void 0) return 1;
33465              if (a < b || b === void 0) return -1;
33466            }
33467            return left.index - right.index;
33468          }), "value");
33469        };
33470        var group = function(behavior) {
33471          return function(obj, iterator, context) {
33472            var result2 = {};
33473            iterator = lookupIterator(iterator);
33474            each(obj, function(value, index) {
33475              var key = iterator.call(context, value, index, obj);
33476              behavior(result2, key, value);
33477            });
33478            return result2;
33479          };
33480        };
33481        _.groupBy = group(function(result2, key, value) {
33482          _.has(result2, key) ? result2[key].push(value) : result2[key] = [value];
33483        });
33484        _.indexBy = group(function(result2, key, value) {
33485          result2[key] = value;
33486        });
33487        _.countBy = group(function(result2, key) {
33488          _.has(result2, key) ? result2[key]++ : result2[key] = 1;
33489        });
33490        _.sortedIndex = function(array, obj, iterator, context) {
33491          iterator = lookupIterator(iterator);
33492          var value = iterator.call(context, obj);
33493          var low = 0, high = array.length;
33494          while (low < high) {
33495            var mid = low + high >>> 1;
33496            iterator.call(context, array[mid]) < value ? low = mid + 1 : high = mid;
33497          }
33498          return low;
33499        };
33500        _.toArray = function(obj) {
33501          if (!obj) return [];
33502          if (_.isArray(obj)) return slice.call(obj);
33503          if (obj.length === +obj.length) return _.map(obj, _.identity);
33504          return _.values(obj);
33505        };
33506        _.size = function(obj) {
33507          if (obj == null) return 0;
33508          return obj.length === +obj.length ? obj.length : _.keys(obj).length;
33509        };
33510        _.first = _.head = _.take = function(array, n, guard) {
33511          if (array == null) return void 0;
33512          if (n == null || guard) return array[0];
33513          if (n < 0) return [];
33514          return slice.call(array, 0, n);
33515        };
33516        _.initial = function(array, n, guard) {
33517          return slice.call(array, 0, array.length - (n == null || guard ? 1 : n));
33518        };
33519        _.last = function(array, n, guard) {
33520          if (array == null) return void 0;
33521          if (n == null || guard) return array[array.length - 1];
33522          return slice.call(array, Math.max(array.length - n, 0));
33523        };
33524        _.rest = _.tail = _.drop = function(array, n, guard) {
33525          return slice.call(array, n == null || guard ? 1 : n);
33526        };
33527        _.compact = function(array) {
33528          return _.filter(array, _.identity);
33529        };
33530        var flatten = function(input, shallow, strict, output) {
33531          if (shallow && _.every(input, _.isArray)) {
33532            return concat.apply(output, input);
33533          }
33534          for (var i = 0, length = input.length; i < length; i++) {
33535            var value = input[i];
33536            if (!_.isArray(value) && !_.isArguments(value)) {
33537              if (!strict) output.push(value);
33538            } else if (shallow) {
33539              push.apply(output, value);
33540            } else {
33541              flatten(value, shallow, strict, output);
33542            }
33543          }
33544          return output;
33545        };
33546        _.flatten = function(array, shallow) {
33547          return flatten(array, shallow, false, []);
33548        };
33549        _.without = function(array) {
33550          return _.difference(array, slice.call(arguments, 1));
33551        };
33552        _.partition = function(obj, predicate, context) {
33553          predicate = lookupIterator(predicate);
33554          var pass = [], fail = [];
33555          each(obj, function(elem) {
33556            (predicate.call(context, elem) ? pass : fail).push(elem);
33557          });
33558          return [pass, fail];
33559        };
33560        _.uniq = _.unique = function(array, isSorted, iterator, context) {
33561          if (array == null) return [];
33562          if (_.isFunction(isSorted)) {
33563            context = iterator;
33564            iterator = isSorted;
33565            isSorted = false;
33566          }
33567          var result2 = [];
33568          var seen = [];
33569          for (var i = 0, length = array.length; i < length; i++) {
33570            var value = array[i];
33571            if (iterator) value = iterator.call(context, value, i, array);
33572            if (isSorted ? !i || seen !== value : !_.contains(seen, value)) {
33573              if (isSorted) seen = value;
33574              else seen.push(value);
33575              result2.push(array[i]);
33576            }
33577          }
33578          return result2;
33579        };
33580        _.union = function() {
33581          return _.uniq(flatten(arguments, true, true, []));
33582        };
33583        _.intersection = function(array) {
33584          var rest = slice.call(arguments, 1);
33585          return _.filter(_.uniq(array), function(item) {
33586            return _.every(rest, function(other) {
33587              return _.contains(other, item);
33588            });
33589          });
33590        };
33591        _.difference = function(array) {
33592          var rest = flatten(slice.call(arguments, 1), true, true, []);
33593          return _.filter(array, function(value) {
33594            return !_.contains(rest, value);
33595          });
33596        };
33597        _.zip = function() {
33598          var length = _.max(_.pluck(arguments, "length").concat(0));
33599          var results = new Array(length);
33600          for (var i = 0; i < length; i++) {
33601            results[i] = _.pluck(arguments, "" + i);
33602          }
33603          return results;
33604        };
33605        _.object = function(list, values) {
33606          if (list == null) return {};
33607          var result2 = {};
33608          for (var i = 0, length = list.length; i < length; i++) {
33609            if (values) {
33610              result2[list[i]] = values[i];
33611            } else {
33612              result2[list[i][0]] = list[i][1];
33613            }
33614          }
33615          return result2;
33616        };
33617        _.indexOf = function(array, item, isSorted) {
33618          if (array == null) return -1;
33619          var i = 0, length = array.length;
33620          if (isSorted) {
33621            if (typeof isSorted == "number") {
33622              i = isSorted < 0 ? Math.max(0, length + isSorted) : isSorted;
33623            } else {
33624              i = _.sortedIndex(array, item);
33625              return array[i] === item ? i : -1;
33626            }
33627          }
33628          if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item, isSorted);
33629          for (; i < length; i++) if (array[i] === item) return i;
33630          return -1;
33631        };
33632        _.lastIndexOf = function(array, item, from) {
33633          if (array == null) return -1;
33634          var hasIndex = from != null;
33635          if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) {
33636            return hasIndex ? array.lastIndexOf(item, from) : array.lastIndexOf(item);
33637          }
33638          var i = hasIndex ? from : array.length;
33639          while (i--) if (array[i] === item) return i;
33640          return -1;
33641        };
33642        _.range = function(start, stop, step) {
33643          if (arguments.length <= 1) {
33644            stop = start || 0;
33645            start = 0;
33646          }
33647          step = arguments[2] || 1;
33648          var length = Math.max(Math.ceil((stop - start) / step), 0);
33649          var idx = 0;
33650          var range = new Array(length);
33651          while (idx < length) {
33652            range[idx++] = start;
33653            start += step;
33654          }
33655          return range;
33656        };
33657        var ctor = function() {
33658        };
33659        _.bind = function(func, context) {
33660          var args, bound;
33661          if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
33662          if (!_.isFunction(func)) throw new TypeError();
33663          args = slice.call(arguments, 2);
33664          return bound = function() {
33665            if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments)));
33666            ctor.prototype = func.prototype;
33667            var self2 = new ctor();
33668            ctor.prototype = null;
33669            var result2 = func.apply(self2, args.concat(slice.call(arguments)));
33670            if (Object(result2) === result2) return result2;
33671            return self2;
33672          };
33673        };
33674        _.partial = function(func) {
33675          var boundArgs = slice.call(arguments, 1);
33676          return function() {
33677            var position = 0;
33678            var args = boundArgs.slice();
33679            for (var i = 0, length = args.length; i < length; i++) {
33680              if (args[i] === _) args[i] = arguments[position++];
33681            }
33682            while (position < arguments.length) args.push(arguments[position++]);
33683            return func.apply(this, args);
33684          };
33685        };
33686        _.bindAll = function(obj) {
33687          var funcs = slice.call(arguments, 1);
33688          if (funcs.length === 0) throw new Error("bindAll must be passed function names");
33689          each(funcs, function(f) {
33690            obj[f] = _.bind(obj[f], obj);
33691          });
33692          return obj;
33693        };
33694        _.memoize = function(func, hasher) {
33695          var memo = {};
33696          hasher || (hasher = _.identity);
33697          return function() {
33698            var key = hasher.apply(this, arguments);
33699            return _.has(memo, key) ? memo[key] : memo[key] = func.apply(this, arguments);
33700          };
33701        };
33702        _.delay = function(func, wait) {
33703          var args = slice.call(arguments, 2);
33704          return setTimeout(function() {
33705            return func.apply(null, args);
33706          }, wait);
33707        };
33708        _.defer = function(func) {
33709          return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));
33710        };
33711        _.throttle = function(func, wait, options) {
33712          var context, args, result2;
33713          var timeout = null;
33714          var previous = 0;
33715          options || (options = {});
33716          var later = function() {
33717            previous = options.leading === false ? 0 : _.now();
33718            timeout = null;
33719            result2 = func.apply(context, args);
33720            context = args = null;
33721          };
33722          return function() {
33723            var now = _.now();
33724            if (!previous && options.leading === false) previous = now;
33725            var remaining = wait - (now - previous);
33726            context = this;
33727            args = arguments;
33728            if (remaining <= 0 || remaining > wait) {
33729              clearTimeout(timeout);
33730              timeout = null;
33731              previous = now;
33732              result2 = func.apply(context, args);
33733              context = args = null;
33734            } else if (!timeout && options.trailing !== false) {
33735              timeout = setTimeout(later, remaining);
33736            }
33737            return result2;
33738          };
33739        };
33740        _.debounce = function(func, wait, immediate) {
33741          var timeout, args, context, timestamp, result2;
33742          var later = function() {
33743            var last = _.now() - timestamp;
33744            if (last < wait && last > 0) {
33745              timeout = setTimeout(later, wait - last);
33746            } else {
33747              timeout = null;
33748              if (!immediate) {
33749                result2 = func.apply(context, args);
33750                context = args = null;
33751              }
33752            }
33753          };
33754          return function() {
33755            context = this;
33756            args = arguments;
33757            timestamp = _.now();
33758            var callNow = immediate && !timeout;
33759            if (!timeout) {
33760              timeout = setTimeout(later, wait);
33761            }
33762            if (callNow) {
33763              result2 = func.apply(context, args);
33764              context = args = null;
33765            }
33766            return result2;
33767          };
33768        };
33769        _.once = function(func) {
33770          var ran = false, memo;
33771          return function() {
33772            if (ran) return memo;
33773            ran = true;
33774            memo = func.apply(this, arguments);
33775            func = null;
33776            return memo;
33777          };
33778        };
33779        _.wrap = function(func, wrapper) {
33780          return _.partial(wrapper, func);
33781        };
33782        _.negate = function(predicate) {
33783          return function() {
33784            return !predicate.apply(this, arguments);
33785          };
33786        };
33787        _.compose = function() {
33788          var funcs = arguments;
33789          return function() {
33790            var args = arguments;
33791            for (var i = funcs.length - 1; i >= 0; i--) {
33792              args = [funcs[i].apply(this, args)];
33793            }
33794            return args[0];
33795          };
33796        };
33797        _.after = function(times, func) {
33798          return function() {
33799            if (--times < 1) {
33800              return func.apply(this, arguments);
33801            }
33802          };
33803        };
33804        _.keys = function(obj) {
33805          if (!_.isObject(obj)) return [];
33806          if (nativeKeys) return nativeKeys(obj);
33807          var keys = [];
33808          for (var key in obj) if (_.has(obj, key)) keys.push(key);
33809          return keys;
33810        };
33811        _.values = function(obj) {
33812          var keys = _.keys(obj);
33813          var length = keys.length;
33814          var values = new Array(length);
33815          for (var i = 0; i < length; i++) {
33816            values[i] = obj[keys[i]];
33817          }
33818          return values;
33819        };
33820        _.pairs = function(obj) {
33821          var keys = _.keys(obj);
33822          var length = keys.length;
33823          var pairs = new Array(length);
33824          for (var i = 0; i < length; i++) {
33825            pairs[i] = [keys[i], obj[keys[i]]];
33826          }
33827          return pairs;
33828        };
33829        _.invert = function(obj) {
33830          var result2 = {};
33831          var keys = _.keys(obj);
33832          for (var i = 0, length = keys.length; i < length; i++) {
33833            result2[obj[keys[i]]] = keys[i];
33834          }
33835          return result2;
33836        };
33837        _.functions = _.methods = function(obj) {
33838          var names = [];
33839          for (var key in obj) {
33840            if (_.isFunction(obj[key])) names.push(key);
33841          }
33842          return names.sort();
33843        };
33844        _.extend = function(obj) {
33845          each(slice.call(arguments, 1), function(source) {
33846            if (source) {
33847              for (var prop in source) {
33848                obj[prop] = source[prop];
33849              }
33850            }
33851          });
33852          return obj;
33853        };
33854        _.pick = function(obj, iterator, context) {
33855          var result2 = {};
33856          if (_.isFunction(iterator)) {
33857            for (var key in obj) {
33858              var value = obj[key];
33859              if (iterator.call(context, value, key, obj)) result2[key] = value;
33860            }
33861          } else {
33862            var keys = concat.apply(ArrayProto, slice.call(arguments, 1));
33863            for (var i = 0, length = keys.length; i < length; i++) {
33864              var key = keys[i];
33865              if (key in obj) result2[key] = obj[key];
33866            }
33867          }
33868          return result2;
33869        };
33870        _.omit = function(obj, iterator, context) {
33871          var keys;
33872          if (_.isFunction(iterator)) {
33873            iterator = _.negate(iterator);
33874          } else {
33875            keys = concat.apply(ArrayProto, slice.call(arguments, 1));
33876            iterator = function(value, key) {
33877              return !_.contains(keys, key);
33878            };
33879          }
33880          return _.pick(obj, iterator, context);
33881        };
33882        _.defaults = function(obj) {
33883          each(slice.call(arguments, 1), function(source) {
33884            if (source) {
33885              for (var prop in source) {
33886                if (obj[prop] === void 0) obj[prop] = source[prop];
33887              }
33888            }
33889          });
33890          return obj;
33891        };
33892        _.clone = function(obj) {
33893          if (!_.isObject(obj)) return obj;
33894          return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
33895        };
33896        _.tap = function(obj, interceptor) {
33897          interceptor(obj);
33898          return obj;
33899        };
33900        var eq = function(a, b, aStack, bStack) {
33901          if (a === b) return a !== 0 || 1 / a == 1 / b;
33902          if (a == null || b == null) return a === b;
33903          if (a instanceof _) a = a._wrapped;
33904          if (b instanceof _) b = b._wrapped;
33905          var className = toString.call(a);
33906          if (className != toString.call(b)) return false;
33907          switch (className) {
33908            // Strings, numbers, dates, and booleans are compared by value.
33909            case "[object String]":
33910              return a == String(b);
33911            case "[object Number]":
33912              return a != +a ? b != +b : a == 0 ? 1 / a == 1 / b : a == +b;
33913            case "[object Date]":
33914            case "[object Boolean]":
33915              return +a == +b;
33916            // RegExps are compared by their source patterns and flags.
33917            case "[object RegExp]":
33918              return a.source == b.source && a.global == b.global && a.multiline == b.multiline && a.ignoreCase == b.ignoreCase;
33919          }
33920          if (typeof a != "object" || typeof b != "object") return false;
33921          var length = aStack.length;
33922          while (length--) {
33923            if (aStack[length] == a) return bStack[length] == b;
33924          }
33925          var aCtor = a.constructor, bCtor = b.constructor;
33926          if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor && _.isFunction(bCtor) && bCtor instanceof bCtor) && ("constructor" in a && "constructor" in b)) {
33927            return false;
33928          }
33929          aStack.push(a);
33930          bStack.push(b);
33931          var size = 0, result2 = true;
33932          if (className == "[object Array]") {
33933            size = a.length;
33934            result2 = size == b.length;
33935            if (result2) {
33936              while (size--) {
33937                if (!(result2 = eq(a[size], b[size], aStack, bStack))) break;
33938              }
33939            }
33940          } else {
33941            for (var key in a) {
33942              if (_.has(a, key)) {
33943                size++;
33944                if (!(result2 = _.has(b, key) && eq(a[key], b[key], aStack, bStack))) break;
33945              }
33946            }
33947            if (result2) {
33948              for (key in b) {
33949                if (_.has(b, key) && !size--) break;
33950              }
33951              result2 = !size;
33952            }
33953          }
33954          aStack.pop();
33955          bStack.pop();
33956          return result2;
33957        };
33958        _.isEqual = function(a, b) {
33959          return eq(a, b, [], []);
33960        };
33961        _.isEmpty = function(obj) {
33962          if (obj == null) return true;
33963          if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;
33964          for (var key in obj) if (_.has(obj, key)) return false;
33965          return true;
33966        };
33967        _.isElement = function(obj) {
33968          return !!(obj && obj.nodeType === 1);
33969        };
33970        _.isArray = nativeIsArray || function(obj) {
33971          return toString.call(obj) == "[object Array]";
33972        };
33973        _.isObject = function(obj) {
33974          return obj === Object(obj);
33975        };
33976        each(["Arguments", "Function", "String", "Number", "Date", "RegExp"], function(name) {
33977          _["is" + name] = function(obj) {
33978            return toString.call(obj) == "[object " + name + "]";
33979          };
33980        });
33981        if (!_.isArguments(arguments)) {
33982          _.isArguments = function(obj) {
33983            return !!(obj && _.has(obj, "callee"));
33984          };
33985        }
33986        if (typeof /./ !== "function") {
33987          _.isFunction = function(obj) {
33988            return typeof obj === "function";
33989          };
33990        }
33991        _.isFinite = function(obj) {
33992          return isFinite(obj) && !isNaN(parseFloat(obj));
33993        };
33994        _.isNaN = function(obj) {
33995          return _.isNumber(obj) && obj != +obj;
33996        };
33997        _.isBoolean = function(obj) {
33998          return obj === true || obj === false || toString.call(obj) == "[object Boolean]";
33999        };
34000        _.isNull = function(obj) {
34001          return obj === null;
34002        };
34003        _.isUndefined = function(obj) {
34004          return obj === void 0;
34005        };
34006        _.has = function(obj, key) {
34007          return hasOwnProperty.call(obj, key);
34008        };
34009        _.noConflict = function() {
34010          root._ = previousUnderscore;
34011          return this;
34012        };
34013        _.identity = function(value) {
34014          return value;
34015        };
34016        _.constant = function(value) {
34017          return function() {
34018            return value;
34019          };
34020        };
34021        _.noop = function() {
34022        };
34023        _.property = function(key) {
34024          return function(obj) {
34025            return obj[key];
34026          };
34027        };
34028        _.matches = function(attrs) {
34029          return function(obj) {
34030            if (obj === attrs) return true;
34031            for (var key in attrs) {
34032              if (attrs[key] !== obj[key])
34033                return false;
34034            }
34035            return true;
34036          };
34037        };
34038        _.times = function(n, iterator, context) {
34039          var accum = Array(Math.max(0, n));
34040          for (var i = 0; i < n; i++) accum[i] = iterator.call(context, i);
34041          return accum;
34042        };
34043        _.random = function(min, max) {
34044          if (max == null) {
34045            max = min;
34046            min = 0;
34047          }
34048          return min + Math.floor(Math.random() * (max - min + 1));
34049        };
34050        _.now = Date.now || function() {
34051          return (/* @__PURE__ */ new Date()).getTime();
34052        };
34053        var entityMap = {
34054          escape: {
34055            "&": "&amp;",
34056            "<": "&lt;",
34057            ">": "&gt;",
34058            '"': "&quot;",
34059            "'": "&#x27;"
34060          }
34061        };
34062        entityMap.unescape = _.invert(entityMap.escape);
34063        var entityRegexes = {
34064          escape: new RegExp("[" + _.keys(entityMap.escape).join("") + "]", "g"),
34065          unescape: new RegExp("(" + _.keys(entityMap.unescape).join("|") + ")", "g")
34066        };
34067        _.each(["escape", "unescape"], function(method) {
34068          _[method] = function(string) {
34069            if (string == null) return "";
34070            return ("" + string).replace(entityRegexes[method], function(match) {
34071              return entityMap[method][match];
34072            });
34073          };
34074        });
34075        _.result = function(object, property) {
34076          if (object == null) return void 0;
34077          var value = object[property];
34078          return _.isFunction(value) ? value.call(object) : value;
34079        };
34080        _.mixin = function(obj) {
34081          each(_.functions(obj), function(name) {
34082            var func = _[name] = obj[name];
34083            _.prototype[name] = function() {
34084              var args = [this._wrapped];
34085              push.apply(args, arguments);
34086              return result.call(this, func.apply(_, args));
34087            };
34088          });
34089        };
34090        var idCounter = 0;
34091        _.uniqueId = function(prefix) {
34092          var id = ++idCounter + "";
34093          return prefix ? prefix + id : id;
34094        };
34095        _.templateSettings = {
34096          evaluate: /<%([\s\S]+?)%>/g,
34097          interpolate: /<%=([\s\S]+?)%>/g,
34098          escape: /<%-([\s\S]+?)%>/g
34099        };
34100        var noMatch = /(.)^/;
34101        var escapes = {
34102          "'": "'",
34103          "\\": "\\",
34104          "\r": "r",
34105          "\n": "n",
34106          "	": "t",
34107          "\u2028": "u2028",
34108          "\u2029": "u2029"
34109        };
34110        var escaper = /\\|'|\r|\n|\t|\u2028|\u2029/g;
34111        _.template = function(text, data, settings) {
34112          var render;
34113          settings = _.defaults({}, settings, _.templateSettings);
34114          var matcher = new RegExp([
34115            (settings.escape || noMatch).source,
34116            (settings.interpolate || noMatch).source,
34117            (settings.evaluate || noMatch).source
34118          ].join("|") + "|$", "g");
34119          var index = 0;
34120          var source = "__p+='";
34121          text.replace(matcher, function(match, escape2, interpolate, evaluate, offset) {
34122            source += text.slice(index, offset).replace(escaper, function(match2) {
34123              return "\\" + escapes[match2];
34124            });
34125            if (escape2) {
34126              source += "'+\n((__t=(" + escape2 + "))==null?'':_.escape(__t))+\n'";
34127            }
34128            if (interpolate) {
34129              source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
34130            }
34131            if (evaluate) {
34132              source += "';\n" + evaluate + "\n__p+='";
34133            }
34134            index = offset + match.length;
34135            return match;
34136          });
34137          source += "';\n";
34138          if (!settings.variable) source = "with(obj||{}){\n" + source + "}\n";
34139          source = "var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n" + source + "return __p;\n";
34140          try {
34141            render = new Function(settings.variable || "obj", "_", source);
34142          } catch (e) {
34143            e.source = source;
34144            throw e;
34145          }
34146          if (data) return render(data, _);
34147          var template = function(data2) {
34148            return render.call(this, data2, _);
34149          };
34150          template.source = "function(" + (settings.variable || "obj") + "){\n" + source + "}";
34151          return template;
34152        };
34153        _.chain = function(obj) {
34154          return _(obj).chain();
34155        };
34156        var result = function(obj) {
34157          return this._chain ? _(obj).chain() : obj;
34158        };
34159        _.mixin(_);
34160        each(["pop", "push", "reverse", "shift", "sort", "splice", "unshift"], function(name) {
34161          var method = ArrayProto[name];
34162          _.prototype[name] = function() {
34163            var obj = this._wrapped;
34164            method.apply(obj, arguments);
34165            if ((name == "shift" || name == "splice") && obj.length === 0) delete obj[0];
34166            return result.call(this, obj);
34167          };
34168        });
34169        each(["concat", "join", "slice"], function(name) {
34170          var method = ArrayProto[name];
34171          _.prototype[name] = function() {
34172            return result.call(this, method.apply(this._wrapped, arguments));
34173          };
34174        });
34175        _.extend(_.prototype, {
34176          // Start chaining a wrapped Underscore object.
34177          chain: function() {
34178            this._chain = true;
34179            return this;
34180          },
34181          // Extracts the result from a wrapped and chained object.
34182          value: function() {
34183            return this._wrapped;
34184          }
34185        });
34186        if (typeof define === "function" && define.amd) {
34187          define("underscore", [], function() {
34188            return _;
34189          });
34190        }
34191      }).call(exports);
34192    }
34193  });
34194
34195  
vendor: 2,256 bytes, lines 34195-34258
34195// apps/base/assets/javascripts/vendor/array.from.polyfill.js
34196  var require_array_from_polyfill = __commonJS({
34197    "apps/base/assets/javascripts/vendor/array.from.polyfill.js"() {
34198      "use strict";
34199      init_esbuild_shims();
34200      if (!Array.from) {
34201        Array.from = (function() {
34202          var toStr = Object.prototype.toString;
34203          var isCallable = function(fn) {
34204            return typeof fn === "function" || toStr.call(fn) === "[object Function]";
34205          };
34206          var toInteger = function(value) {
34207            var number = Number(value);
34208            if (isNaN(number)) {
34209              return 0;
34210            }
34211            if (number === 0 || !isFinite(number)) {
34212              return number;
34213            }
34214            return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number));
34215          };
34216          var maxSafeInteger = Math.pow(2, 53) - 1;
34217          var toLength = function(value) {
34218            var len = toInteger(value);
34219            return Math.min(Math.max(len, 0), maxSafeInteger);
34220          };
34221          return function from(arrayLike) {
34222            var C = this;
34223            var items = Object(arrayLike);
34224            if (arrayLike == null) {
34225              throw new TypeError("Array.from requires an array-like object - not null or undefined");
34226            }
34227            var mapFn = arguments.length > 1 ? arguments[1] : void 0;
34228            var T;
34229            if (typeof mapFn !== "undefined") {
34230              if (!isCallable(mapFn)) {
34231                throw new TypeError("Array.from: when provided, the second argument must be a function");
34232              }
34233              if (arguments.length > 2) {
34234                T = arguments[2];
34235              }
34236            }
34237            var len = toLength(items.length);
34238            var A = isCallable(C) ? Object(new C(len)) : new Array(len);
34239            var k = 0;
34240            var kValue;
34241            while (k < len) {
34242              kValue = items[k];
34243              if (mapFn) {
34244                A[k] = typeof T === "undefined" ? mapFn(kValue, k) : mapFn.call(T, kValue, k);
34245              } else {
34246                A[k] = kValue;
34247              }
34248              k += 1;
34249            }
34250            A.length = len;
34251            return A;
34252          };
34253        })();
34254      }
34255    }
34256  });
34257
34258  
vendor: 69,251 bytes, lines 34258-35933
34258// apps/base/assets/javascripts/vendor/bootstrap-datepicker.js
34259  var require_bootstrap_datepicker = __commonJS({
34260    "apps/base/assets/javascripts/vendor/bootstrap-datepicker.js"(exports) {
34261      "use strict";
34262      init_esbuild_shims();
34263      (function(factory) {
34264        if (typeof define === "function" && define.amd) {
34265          define(["jquery"], factory);
34266        } else if (typeof exports === "object") {
34267          factory(require_jquery());
34268        } else {
34269          factory(jQuery);
34270        }
34271      })(function($3, undefined2) {
34272        function UTCDate() {
34273          return new Date(Date.UTC.apply(Date, arguments));
34274        }
34275        function UTCToday() {
34276          var today = /* @__PURE__ */ new Date();
34277          return UTCDate(today.getFullYear(), today.getMonth(), today.getDate());
34278        }
34279        function isUTCEquals(date1, date2) {
34280          return date1.getUTCFullYear() === date2.getUTCFullYear() && date1.getUTCMonth() === date2.getUTCMonth() && date1.getUTCDate() === date2.getUTCDate();
34281        }
34282        function alias(method, deprecationMsg) {
34283          return function() {
34284            if (deprecationMsg !== undefined2) {
34285              $3.fn.datepicker.deprecated(deprecationMsg);
34286            }
34287            return this[method].apply(this, arguments);
34288          };
34289        }
34290        function isValidDate(d) {
34291          return d && !isNaN(d.getTime());
34292        }
34293        var DateArray = /* @__PURE__ */ (function() {
34294          var extras = {
34295            get: function(i) {
34296              return this.slice(i)[0];
34297            },
34298            contains: function(d) {
34299              var val = d && d.valueOf();
34300              for (var i = 0, l = this.length; i < l; i++)
34301                if (0 <= this[i].valueOf() - val && this[i].valueOf() - val < 1e3 * 60 * 60 * 24)
34302                  return i;
34303              return -1;
34304            },
34305            remove: function(i) {
34306              this.splice(i, 1);
34307            },
34308            replace: function(new_array) {
34309              if (!new_array) return;
34310              if (!Array.isArray(new_array)) new_array = [new_array];
34311              this.clear();
34312              this.push.apply(this, new_array);
34313            },
34314            clear: function() {
34315              this.length = 0;
34316            },
34317            copy: function() {
34318              var a = new DateArray();
34319              a.replace(this);
34320              return a;
34321            }
34322          };
34323          return function() {
34324            var a = [];
34325            a.push.apply(a, arguments);
34326            $3.extend(a, extras);
34327            return a;
34328          };
34329        })();
34330        var Datepicker = function(element, options) {
34331          $3.data(element, "datepicker", this);
34332          this._events = [];
34333          this._secondaryEvents = [];
34334          this._process_options(options);
34335          this.dates = new DateArray();
34336          this.viewDate = this.o.defaultViewDate;
34337          this.focusDate = null;
34338          this.element = $3(element);
34339          this.isInput = this.element.is("input");
34340          this.inputField = this.isInput ? this.element : this.element.find("input");
34341          this.component = this.element.hasClass("date") ? this.element.find(
34342            ".add-on, .input-group-addon, .input-group-append, .input-group-prepend, .btn"
34343          ) : false;
34344          if (this.component && this.component.length === 0) {
34345            this.component = false;
34346          }
34347          if (this.o.isInline === null) {
34348            this.isInline = !this.component && !this.isInput;
34349          } else {
34350            this.isInline = this.o.isInline;
34351          }
34352          this.picker = $3(DPGlobal.template);
34353          if (this._check_template(this.o.templates.leftArrow)) {
34354            this.picker.find(".prev").html(this.o.templates.leftArrow);
34355          }
34356          if (this._check_template(this.o.templates.rightArrow)) {
34357            this.picker.find(".next").html(this.o.templates.rightArrow);
34358          }
34359          this._buildEvents();
34360          this._attachEvents();
34361          if (this.isInline) {
34362            this.picker.addClass("datepicker-inline").appendTo(this.element);
34363          } else {
34364            this.picker.addClass("datepicker-dropdown dropdown-menu");
34365          }
34366          if (this.o.rtl) {
34367            this.picker.addClass("datepicker-rtl");
34368          }
34369          if (this.o.calendarWeeks) {
34370            this.picker.find(
34371              ".datepicker-days .datepicker-switch, thead .datepicker-title, tfoot .today, tfoot .clear"
34372            ).attr("colspan", function(i, val) {
34373              return Number(val) + 1;
34374            });
34375          }
34376          this._process_options({
34377            startDate: this._o.startDate,
34378            endDate: this._o.endDate,
34379            daysOfWeekDisabled: this.o.daysOfWeekDisabled,
34380            daysOfWeekHighlighted: this.o.daysOfWeekHighlighted,
34381            datesDisabled: this.o.datesDisabled
34382          });
34383          this._allow_update = false;
34384          this.setViewMode(this.o.startView);
34385          this._allow_update = true;
34386          this.fillDow();
34387          this.fillMonths();
34388          this.update();
34389          if (this.isInline) {
34390            this.show();
34391          }
34392        };
34393        Datepicker.prototype = {
34394          constructor: Datepicker,
34395          _resolveViewName: function(view) {
34396            $3.each(DPGlobal.viewModes, function(i, viewMode) {
34397              if (view === i || $3.inArray(view, viewMode.names) !== -1) {
34398                view = i;
34399                return false;
34400              }
34401            });
34402            return view;
34403          },
34404          _resolveDaysOfWeek: function(daysOfWeek) {
34405            if (!Array.isArray(daysOfWeek)) daysOfWeek = daysOfWeek.split(/[,\s]*/);
34406            return $3.map(daysOfWeek, Number);
34407          },
34408          _check_template: function(tmp) {
34409            try {
34410              if (tmp === undefined2 || tmp === "") {
34411                return false;
34412              }
34413              if ((tmp.match(/[<>]/g) || []).length <= 0) {
34414                return true;
34415              }
34416              var jDom = $3(tmp);
34417              return jDom.length > 0;
34418            } catch (ex) {
34419              return false;
34420            }
34421          },
34422          _process_options: function(opts) {
34423            this._o = $3.extend({}, this._o, opts);
34424            var o = this.o = $3.extend({}, this._o);
34425            var lang = o.language;
34426            if (!dates[lang]) {
34427              lang = lang.split("-")[0];
34428              if (!dates[lang]) lang = defaults.language;
34429            }
34430            o.language = lang;
34431            o.startView = this._resolveViewName(o.startView);
34432            o.minViewMode = this._resolveViewName(o.minViewMode);
34433            o.maxViewMode = this._resolveViewName(o.maxViewMode);
34434            o.startView = Math.max(
34435              this.o.minViewMode,
34436              Math.min(this.o.maxViewMode, o.startView)
34437            );
34438            if (o.multidate !== true) {
34439              o.multidate = Number(o.multidate) || false;
34440              if (o.multidate !== false) o.multidate = Math.max(0, o.multidate);
34441            }
34442            o.multidateSeparator = String(o.multidateSeparator);
34443            o.weekStart %= 7;
34444            o.weekEnd = (o.weekStart + 6) % 7;
34445            var format = DPGlobal.parseFormat(o.format);
34446            if (o.startDate !== -Infinity) {
34447              if (!!o.startDate) {
34448                if (o.startDate instanceof Date)
34449                  o.startDate = this._local_to_utc(this._zero_time(o.startDate));
34450                else
34451                  o.startDate = DPGlobal.parseDate(
34452                    o.startDate,
34453                    format,
34454                    o.language,
34455                    o.assumeNearbyYear
34456                  );
34457              } else {
34458                o.startDate = -Infinity;
34459              }
34460            }
34461            if (o.endDate !== Infinity) {
34462              if (!!o.endDate) {
34463                if (o.endDate instanceof Date)
34464                  o.endDate = this._local_to_utc(this._zero_time(o.endDate));
34465                else
34466                  o.endDate = DPGlobal.parseDate(
34467                    o.endDate,
34468                    format,
34469                    o.language,
34470                    o.assumeNearbyYear
34471                  );
34472              } else {
34473                o.endDate = Infinity;
34474              }
34475            }
34476            o.daysOfWeekDisabled = this._resolveDaysOfWeek(o.daysOfWeekDisabled || []);
34477            o.daysOfWeekHighlighted = this._resolveDaysOfWeek(
34478              o.daysOfWeekHighlighted || []
34479            );
34480            o.datesDisabled = o.datesDisabled || [];
34481            if (!Array.isArray(o.datesDisabled)) {
34482              o.datesDisabled = o.datesDisabled.split(",");
34483            }
34484            o.datesDisabled = $3.map(o.datesDisabled, function(d) {
34485              return DPGlobal.parseDate(d, format, o.language, o.assumeNearbyYear);
34486            });
34487            var plc = String(o.orientation).toLowerCase().split(/\s+/g), _plc = o.orientation.toLowerCase();
34488            plc = $3.grep(plc, function(word) {
34489              return /^auto|left|right|top|bottom$/.test(word);
34490            });
34491            o.orientation = { x: "auto", y: "auto" };
34492            if (!_plc || _plc === "auto") ;
34493            else if (plc.length === 1) {
34494              switch (plc[0]) {
34495                case "top":
34496                case "bottom":
34497                  o.orientation.y = plc[0];
34498                  break;
34499                case "left":
34500                case "right":
34501                  o.orientation.x = plc[0];
34502                  break;
34503              }
34504            } else {
34505              _plc = $3.grep(plc, function(word) {
34506                return /^left|right$/.test(word);
34507              });
34508              o.orientation.x = _plc[0] || "auto";
34509              _plc = $3.grep(plc, function(word) {
34510                return /^top|bottom$/.test(word);
34511              });
34512              o.orientation.y = _plc[0] || "auto";
34513            }
34514            if (o.defaultViewDate instanceof Date || typeof o.defaultViewDate === "string") {
34515              o.defaultViewDate = DPGlobal.parseDate(
34516                o.defaultViewDate,
34517                format,
34518                o.language,
34519                o.assumeNearbyYear
34520              );
34521            } else if (o.defaultViewDate) {
34522              var year = o.defaultViewDate.year || (/* @__PURE__ */ new Date()).getFullYear();
34523              var month = o.defaultViewDate.month || 0;
34524              var day = o.defaultViewDate.day || 1;
34525              o.defaultViewDate = UTCDate(year, month, day);
34526            } else {
34527              o.defaultViewDate = UTCToday();
34528            }
34529          },
34530          _applyEvents: function(evs) {
34531            for (var i = 0, el, ch, ev; i < evs.length; i++) {
34532              el = evs[i][0];
34533              if (evs[i].length === 2) {
34534                ch = undefined2;
34535                ev = evs[i][1];
34536              } else if (evs[i].length === 3) {
34537                ch = evs[i][1];
34538                ev = evs[i][2];
34539              }
34540              el.on(ev, ch);
34541            }
34542          },
34543          _unapplyEvents: function(evs) {
34544            for (var i = 0, el, ev, ch; i < evs.length; i++) {
34545              el = evs[i][0];
34546              if (evs[i].length === 2) {
34547                ch = undefined2;
34548                ev = evs[i][1];
34549              } else if (evs[i].length === 3) {
34550                ch = evs[i][1];
34551                ev = evs[i][2];
34552              }
34553              el.off(ev, ch);
34554            }
34555          },
34556          _buildEvents: function() {
34557            var events = {
34558              keyup: $3.proxy(function(e) {
34559                if ($3.inArray(e.keyCode, [27, 37, 39, 38, 40, 32, 13, 9]) === -1)
34560                  this.update();
34561              }, this),
34562              keydown: $3.proxy(this.keydown, this),
34563              paste: $3.proxy(this.paste, this)
34564            };
34565            if (this.o.showOnFocus === true) {
34566              events.focus = $3.proxy(this.show, this);
34567            }
34568            if (this.isInput) {
34569              this._events = [[this.element, events]];
34570            } else if (this.component && this.inputField.length) {
34571              this._events = [
34572                // For components that are not readonly, allow keyboard nav
34573                [this.inputField, events],
34574                [
34575                  this.component,
34576                  {
34577                    click: $3.proxy(this.show, this)
34578                  }
34579                ]
34580              ];
34581            } else {
34582              this._events = [
34583                [
34584                  this.element,
34585                  {
34586                    click: $3.proxy(this.show, this),
34587                    keydown: $3.proxy(this.keydown, this)
34588                  }
34589                ]
34590              ];
34591            }
34592            this._events.push(
34593              // Component: listen for blur on element descendants
34594              [
34595                this.element,
34596                "*",
34597                {
34598                  blur: $3.proxy(function(e) {
34599                    this._focused_from = e.target;
34600                  }, this)
34601                }
34602              ],
34603              // Input: listen for blur on element
34604              [
34605                this.element,
34606                {
34607                  blur: $3.proxy(function(e) {
34608                    this._focused_from = e.target;
34609                  }, this)
34610                }
34611              ]
34612            );
34613            if (this.o.immediateUpdates) {
34614              this._events.push([
34615                this.element,
34616                {
34617                  "changeYear changeMonth": $3.proxy(function(e) {
34618                    this.update(e.date);
34619                  }, this)
34620                }
34621              ]);
34622            }
34623            this._secondaryEvents = [
34624              [
34625                this.picker,
34626                {
34627                  click: $3.proxy(this.click, this)
34628                }
34629              ],
34630              [
34631                this.picker,
34632                ".prev, .next",
34633                {
34634                  click: $3.proxy(this.navArrowsClick, this)
34635                }
34636              ],
34637              [
34638                this.picker,
34639                ".day:not(.disabled)",
34640                {
34641                  click: $3.proxy(this.dayCellClick, this)
34642                }
34643              ],
34644              [
34645                $3(window),
34646                {
34647                  resize: $3.proxy(this.place, this)
34648                }
34649              ],
34650              [
34651                $3(document),
34652                {
34653                  "mousedown touchstart": $3.proxy(function(e) {
34654                    if (!(this.element.is(e.target) || this.element.find(e.target).length || this.picker.is(e.target) || this.picker.find(e.target).length || this.isInline)) {
34655                      this.hide();
34656                    }
34657                  }, this)
34658                }
34659              ]
34660            ];
34661          },
34662          _attachEvents: function() {
34663            this._detachEvents();
34664            this._applyEvents(this._events);
34665          },
34666          _detachEvents: function() {
34667            this._unapplyEvents(this._events);
34668          },
34669          _attachSecondaryEvents: function() {
34670            this._detachSecondaryEvents();
34671            this._applyEvents(this._secondaryEvents);
34672          },
34673          _detachSecondaryEvents: function() {
34674            this._unapplyEvents(this._secondaryEvents);
34675          },
34676          _trigger: function(event2, altdate) {
34677            var date = altdate || this.dates.get(-1), local_date = this._utc_to_local(date);
34678            this.element.trigger({
34679              type: event2,
34680              date: local_date,
34681              viewMode: this.viewMode,
34682              dates: $3.map(this.dates, this._utc_to_local),
34683              format: $3.proxy(function(ix, format) {
34684                if (arguments.length === 0) {
34685                  ix = this.dates.length - 1;
34686                  format = this.o.format;
34687                } else if (typeof ix === "string") {
34688                  format = ix;
34689                  ix = this.dates.length - 1;
34690                }
34691                format = format || this.o.format;
34692                var date2 = this.dates.get(ix);
34693                return DPGlobal.formatDate(date2, format, this.o.language);
34694              }, this)
34695            });
34696          },
34697          show: function() {
34698            if (this.inputField.is(":disabled") || this.inputField.prop("readonly") && this.o.enableOnReadonly === false)
34699              return;
34700            if (!this.isInline) this.picker.appendTo(this.o.container);
34701            this.place();
34702            this.picker.show();
34703            this._attachSecondaryEvents();
34704            this._trigger("show");
34705            if ((window.navigator.msMaxTouchPoints || "ontouchstart" in document) && this.o.disableTouchKeyboard) {
34706              $3(this.element).blur();
34707            }
34708            return this;
34709          },
34710          hide: function() {
34711            if (this.isInline || !this.picker.is(":visible")) return this;
34712            this.focusDate = null;
34713            this.picker.hide().detach();
34714            this._detachSecondaryEvents();
34715            this.setViewMode(this.o.startView);
34716            if (this.o.forceParse && this.inputField.val()) this.setValue();
34717            this._trigger("hide");
34718            return this;
34719          },
34720          destroy: function() {
34721            this.hide();
34722            this._detachEvents();
34723            this._detachSecondaryEvents();
34724            this.picker.remove();
34725            delete this.element.data().datepicker;
34726            if (!this.isInput) {
34727              delete this.element.data().date;
34728            }
34729            return this;
34730          },
34731          paste: function(e) {
34732            var dateString;
34733            if (e.originalEvent.clipboardData && e.originalEvent.clipboardData.types && $3.inArray("text/plain", e.originalEvent.clipboardData.types) !== -1) {
34734              dateString = e.originalEvent.clipboardData.getData("text/plain");
34735            } else if (window.clipboardData) {
34736              dateString = window.clipboardData.getData("Text");
34737            } else {
34738              return;
34739            }
34740            this.setDate(dateString);
34741            this.update();
34742            e.preventDefault();
34743          },
34744          _utc_to_local: function(utc) {
34745            if (!utc) {
34746              return utc;
34747            }
34748            var local = new Date(utc.getTime() + utc.getTimezoneOffset() * 6e4);
34749            if (local.getTimezoneOffset() !== utc.getTimezoneOffset()) {
34750              local = new Date(utc.getTime() + local.getTimezoneOffset() * 6e4);
34751            }
34752            return local;
34753          },
34754          _local_to_utc: function(local) {
34755            return local && new Date(local.getTime() - local.getTimezoneOffset() * 6e4);
34756          },
34757          _zero_time: function(local) {
34758            return local && new Date(local.getFullYear(), local.getMonth(), local.getDate());
34759          },
34760          _zero_utc_time: function(utc) {
34761            return utc && UTCDate(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate());
34762          },
34763          getDates: function() {
34764            return $3.map(this.dates, this._utc_to_local);
34765          },
34766          getUTCDates: function() {
34767            return $3.map(this.dates, function(d) {
34768              return new Date(d);
34769            });
34770          },
34771          getDate: function() {
34772            return this._utc_to_local(this.getUTCDate());
34773          },
34774          getUTCDate: function() {
34775            var selected_date = this.dates.get(-1);
34776            if (selected_date !== undefined2) {
34777              return new Date(selected_date);
34778            } else {
34779              return null;
34780            }
34781          },
34782          clearDates: function() {
34783            this.inputField.val("");
34784            this._trigger("changeDate");
34785            this.update();
34786            if (this.o.autoclose) {
34787              this.hide();
34788            }
34789          },
34790          setDates: function() {
34791            var args = Array.isArray(arguments[0]) ? arguments[0] : arguments;
34792            this.update.apply(this, args);
34793            this._trigger("changeDate");
34794            this.setValue();
34795            return this;
34796          },
34797          setUTCDates: function() {
34798            var args = Array.isArray(arguments[0]) ? arguments[0] : arguments;
34799            this.setDates.apply(this, $3.map(args, this._utc_to_local));
34800            return this;
34801          },
34802          setDate: alias("setDates"),
34803          setUTCDate: alias("setUTCDates"),
34804          remove: alias(
34805            "destroy",
34806            "Method `remove` is deprecated and will be removed in version 2.0. Use `destroy` instead"
34807          ),
34808          setValue: function() {
34809            var formatted = this.getFormattedDate();
34810            this.inputField.val(formatted);
34811            return this;
34812          },
34813          getFormattedDate: function(format) {
34814            if (format === undefined2) format = this.o.format;
34815            var lang = this.o.language;
34816            return $3.map(this.dates, function(d) {
34817              return DPGlobal.formatDate(d, format, lang);
34818            }).join(this.o.multidateSeparator);
34819          },
34820          getStartDate: function() {
34821            return this.o.startDate;
34822          },
34823          setStartDate: function(startDate) {
34824            this._process_options({ startDate });
34825            this.update();
34826            this.updateNavArrows();
34827            return this;
34828          },
34829          getEndDate: function() {
34830            return this.o.endDate;
34831          },
34832          setEndDate: function(endDate) {
34833            this._process_options({ endDate });
34834            this.update();
34835            this.updateNavArrows();
34836            return this;
34837          },
34838          setDaysOfWeekDisabled: function(daysOfWeekDisabled) {
34839            this._process_options({ daysOfWeekDisabled });
34840            this.update();
34841            return this;
34842          },
34843          setDaysOfWeekHighlighted: function(daysOfWeekHighlighted) {
34844            this._process_options({ daysOfWeekHighlighted });
34845            this.update();
34846            return this;
34847          },
34848          setDatesDisabled: function(datesDisabled) {
34849            this._process_options({ datesDisabled });
34850            this.update();
34851            return this;
34852          },
34853          place: function() {
34854            if (this.isInline) return this;
34855            var calendarWidth = this.picker.outerWidth(), calendarHeight = this.picker.outerHeight(), visualPadding = 10, container = $3(this.o.container), windowWidth = container.width(), scrollTop = this.o.container === "body" ? $3(document).scrollTop() : container.scrollTop(), appendOffset = container.offset();
34856            var parentsZindex = [0];
34857            this.element.parents().each(function() {
34858              var itemZIndex = $3(this).css("z-index");
34859              if (itemZIndex !== "auto" && Number(itemZIndex) !== 0)
34860                parentsZindex.push(Number(itemZIndex));
34861            });
34862            var zIndex = Math.max.apply(Math, parentsZindex) + this.o.zIndexOffset;
34863            var offset = this.component ? this.component.parent().offset() : this.element.offset();
34864            var height = this.component ? this.component.outerHeight(true) : this.element.outerHeight(false);
34865            var width = this.component ? this.component.outerWidth(true) : this.element.outerWidth(false);
34866            var left = offset.left - appendOffset.left;
34867            var top = offset.top - appendOffset.top;
34868            if (this.o.container !== "body") {
34869              top += scrollTop;
34870            }
34871            this.picker.removeClass(
34872              "datepicker-orient-top datepicker-orient-bottom datepicker-orient-right datepicker-orient-left"
34873            );
34874            if (this.o.orientation.x !== "auto") {
34875              this.picker.addClass("datepicker-orient-" + this.o.orientation.x);
34876              if (this.o.orientation.x === "right") left -= calendarWidth - width;
34877            } else {
34878              if (offset.left < 0) {
34879                this.picker.addClass("datepicker-orient-left");
34880                left -= offset.left - visualPadding;
34881              } else if (left + calendarWidth > windowWidth) {
34882                this.picker.addClass("datepicker-orient-right");
34883                left += width - calendarWidth;
34884              } else {
34885                if (this.o.rtl) {
34886                  this.picker.addClass("datepicker-orient-right");
34887                } else {
34888                  this.picker.addClass("datepicker-orient-left");
34889                }
34890              }
34891            }
34892            var yorient = this.o.orientation.y, top_overflow;
34893            if (yorient === "auto") {
34894              top_overflow = -scrollTop + top - calendarHeight;
34895              yorient = top_overflow < 0 ? "bottom" : "top";
34896            }
34897            this.picker.addClass("datepicker-orient-" + yorient);
34898            if (yorient === "top")
34899              top -= calendarHeight + parseInt(this.picker.css("padding-top"));
34900            else top += height;
34901            if (this.o.rtl) {
34902              var right = windowWidth - (left + width);
34903              this.picker.css({
34904                top,
34905                right,
34906                zIndex
34907              });
34908            } else {
34909              this.picker.css({
34910                top,
34911                left,
34912                zIndex
34913              });
34914            }
34915            return this;
34916          },
34917          _allow_update: true,
34918          update: function() {
34919            if (!this._allow_update) return this;
34920            var oldDates = this.dates.copy(), dates2 = [], fromArgs = false;
34921            if (arguments.length) {
34922              $3.each(
34923                arguments,
34924                $3.proxy(function(i, date) {
34925                  if (date instanceof Date) date = this._local_to_utc(date);
34926                  dates2.push(date);
34927                }, this)
34928              );
34929              fromArgs = true;
34930            } else {
34931              dates2 = this.isInput ? this.element.val() : this.element.data("date") || this.inputField.val();
34932              if (dates2 && this.o.multidate)
34933                dates2 = dates2.split(this.o.multidateSeparator);
34934              else dates2 = [dates2];
34935              delete this.element.data().date;
34936            }
34937            dates2 = $3.map(
34938              dates2,
34939              $3.proxy(function(date) {
34940                return DPGlobal.parseDate(
34941                  date,
34942                  this.o.format,
34943                  this.o.language,
34944                  this.o.assumeNearbyYear
34945                );
34946              }, this)
34947            );
34948            dates2 = $3.grep(
34949              dates2,
34950              $3.proxy(function(date) {
34951                return !this.dateWithinRange(date) || !date;
34952              }, this),
34953              true
34954            );
34955            this.dates.replace(dates2);
34956            if (this.o.updateViewDate) {
34957              if (this.dates.length) this.viewDate = new Date(this.dates.get(-1));
34958              else if (this.viewDate < this.o.startDate)
34959                this.viewDate = new Date(this.o.startDate);
34960              else if (this.viewDate > this.o.endDate)
34961                this.viewDate = new Date(this.o.endDate);
34962              else this.viewDate = this.o.defaultViewDate;
34963            }
34964            if (fromArgs) {
34965              this.setValue();
34966              this.element.change();
34967            } else if (this.dates.length) {
34968              if (String(oldDates) !== String(this.dates) && fromArgs) {
34969                this._trigger("changeDate");
34970                this.element.change();
34971              }
34972            }
34973            if (!this.dates.length && oldDates.length) {
34974              this._trigger("clearDate");
34975              this.element.change();
34976            }
34977            this.fill();
34978            return this;
34979          },
34980          fillDow: function() {
34981            if (this.o.showWeekDays) {
34982              var dowCnt = this.o.weekStart, html = "<tr>";
34983              if (this.o.calendarWeeks) {
34984                html += '<th class="cw">&#160;</th>';
34985              }
34986              while (dowCnt < this.o.weekStart + 7) {
34987                html += '<th class="dow';
34988                if ($3.inArray(dowCnt, this.o.daysOfWeekDisabled) !== -1)
34989                  html += " disabled";
34990                html += '">' + dates[this.o.language].daysMin[dowCnt++ % 7] + "</th>";
34991              }
34992              html += "</tr>";
34993              this.picker.find(".datepicker-days thead").append(html);
34994            }
34995          },
34996          fillMonths: function() {
34997            var localDate = this._utc_to_local(this.viewDate);
34998            var html = "";
34999            var focused;
35000            for (var i = 0; i < 12; i++) {
35001              focused = localDate && localDate.getMonth() === i ? " focused" : "";
35002              html += '<span class="month' + focused + '">' + dates[this.o.language].monthsShort[i] + "</span>";
35003            }
35004            this.picker.find(".datepicker-months td").html(html);
35005          },
35006          setRange: function(range) {
35007            if (!range || !range.length) delete this.range;
35008            else
35009              this.range = $3.map(range, function(d) {
35010                return d.valueOf();
35011              });
35012            this.fill();
35013          },
35014          getClassNames: function(date) {
35015            var cls = [], year = this.viewDate.getUTCFullYear(), month = this.viewDate.getUTCMonth(), today = UTCToday();
35016            if (date.getUTCFullYear() < year || date.getUTCFullYear() === year && date.getUTCMonth() < month) {
35017              cls.push("old");
35018            } else if (date.getUTCFullYear() > year || date.getUTCFullYear() === year && date.getUTCMonth() > month) {
35019              cls.push("new");
35020            }
35021            if (this.focusDate && date.valueOf() === this.focusDate.valueOf())
35022              cls.push("focused");
35023            if (this.o.todayHighlight && isUTCEquals(date, today)) {
35024              cls.push("today");
35025            }
35026            if (this.dates.contains(date) !== -1) cls.push("active");
35027            if (!this.dateWithinRange(date)) {
35028              cls.push("disabled");
35029            }
35030            if (this.dateIsDisabled(date)) {
35031              cls.push("disabled", "disabled-date");
35032            }
35033            if ($3.inArray(date.getUTCDay(), this.o.daysOfWeekHighlighted) !== -1) {
35034              cls.push("highlighted");
35035            }
35036            if (this.range) {
35037              if (date > this.range[0] && date < this.range[this.range.length - 1]) {
35038                cls.push("range");
35039              }
35040              if ($3.inArray(date.valueOf(), this.range) !== -1) {
35041                cls.push("selected");
35042              }
35043              if (date.valueOf() === this.range[0]) {
35044                cls.push("range-start");
35045              }
35046              if (date.valueOf() === this.range[this.range.length - 1]) {
35047                cls.push("range-end");
35048              }
35049            }
35050            return cls;
35051          },
35052          _fill_yearsView: function(selector, cssClass, factor, year, startYear, endYear, beforeFn) {
35053            var html = "";
35054            var step = factor / 10;
35055            var view = this.picker.find(selector);
35056            var startVal = Math.floor(year / factor) * factor;
35057            var endVal = startVal + step * 9;
35058            var focusedVal = Math.floor(this.viewDate.getFullYear() / step) * step;
35059            var selected = $3.map(this.dates, function(d) {
35060              return Math.floor(d.getUTCFullYear() / step) * step;
35061            });
35062            var classes, tooltip, before;
35063            for (var currVal = startVal - step; currVal <= endVal + step; currVal += step) {
35064              classes = [cssClass];
35065              tooltip = null;
35066              if (currVal === startVal - step) {
35067                classes.push("old");
35068              } else if (currVal === endVal + step) {
35069                classes.push("new");
35070              }
35071              if ($3.inArray(currVal, selected) !== -1) {
35072                classes.push("active");
35073              }
35074              if (currVal < startYear || currVal > endYear) {
35075                classes.push("disabled");
35076              }
35077              if (currVal === focusedVal) {
35078                classes.push("focused");
35079              }
35080              if (beforeFn !== $3.noop) {
35081                before = beforeFn(new Date(currVal, 0, 1));
35082                if (before === undefined2) {
35083                  before = {};
35084                } else if (typeof before === "boolean") {
35085                  before = { enabled: before };
35086                } else if (typeof before === "string") {
35087                  before = { classes: before };
35088                }
35089                if (before.enabled === false) {
35090                  classes.push("disabled");
35091                }
35092                if (before.classes) {
35093                  classes = classes.concat(before.classes.split(/\s+/));
35094                }
35095                if (before.tooltip) {
35096                  tooltip = before.tooltip;
35097                }
35098              }
35099              html += '<span class="' + classes.join(" ") + '"' + (tooltip ? ' title="' + tooltip + '"' : "") + ">" + currVal + "</span>";
35100            }
35101            view.find(".datepicker-switch").text(startVal + "-" + endVal);
35102            view.find("td").html(html);
35103          },
35104          fill: function() {
35105            var d = new Date(this.viewDate), year = d.getUTCFullYear(), month = d.getUTCMonth(), startYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity, startMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity, endYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity, endMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity, todaytxt = dates[this.o.language].today || dates["en"].today || "", cleartxt = dates[this.o.language].clear || dates["en"].clear || "", titleFormat = dates[this.o.language].titleFormat || dates["en"].titleFormat, todayDate = UTCToday(), titleBtnVisible = (this.o.todayBtn === true || this.o.todayBtn === "linked") && todayDate >= this.o.startDate && todayDate <= this.o.endDate && !this.weekOfDateIsDisabled(todayDate), tooltip, before;
35106            if (isNaN(year) || isNaN(month)) return;
35107            this.picker.find(".datepicker-days .datepicker-switch").text(DPGlobal.formatDate(d, titleFormat, this.o.language));
35108            this.picker.find("tfoot .today").text(todaytxt).css("display", titleBtnVisible ? "table-cell" : "none");
35109            this.picker.find("tfoot .clear").text(cleartxt).css("display", this.o.clearBtn === true ? "table-cell" : "none");
35110            this.picker.find("thead .datepicker-title").text(this.o.title).css(
35111              "display",
35112              typeof this.o.title === "string" && this.o.title !== "" ? "table-cell" : "none"
35113            );
35114            this.updateNavArrows();
35115            this.fillMonths();
35116            var prevMonth = UTCDate(year, month, 0), day = prevMonth.getUTCDate();
35117            prevMonth.setUTCDate(
35118              day - (prevMonth.getUTCDay() - this.o.weekStart + 7) % 7
35119            );
35120            var nextMonth = new Date(prevMonth);
35121            if (prevMonth.getUTCFullYear() < 100) {
35122              nextMonth.setUTCFullYear(prevMonth.getUTCFullYear());
35123            }
35124            nextMonth.setUTCDate(nextMonth.getUTCDate() + 42);
35125            nextMonth = nextMonth.valueOf();
35126            var html = [];
35127            var weekDay, clsName;
35128            while (prevMonth.valueOf() < nextMonth) {
35129              weekDay = prevMonth.getUTCDay();
35130              if (weekDay === this.o.weekStart) {
35131                html.push("<tr>");
35132                if (this.o.calendarWeeks) {
35133                  var ws = new Date(
35134                    +prevMonth + (this.o.weekStart - weekDay - 7) % 7 * 864e5
35135                  ), th = new Date(
35136                    Number(ws) + (7 + 4 - ws.getUTCDay()) % 7 * 864e5
35137                  ), yth = new Date(
35138                    Number(yth = UTCDate(th.getUTCFullYear(), 0, 1)) + (7 + 4 - yth.getUTCDay()) % 7 * 864e5
35139                  ), calWeek = (th - yth) / 864e5 / 7 + 1;
35140                  html.push('<td class="cw">' + calWeek + "</td>");
35141                }
35142              }
35143              clsName = this.getClassNames(prevMonth);
35144              clsName.push("day");
35145              var content = prevMonth.getUTCDate();
35146              if (this.o.beforeShowDay !== $3.noop) {
35147                before = this.o.beforeShowDay(this._utc_to_local(prevMonth));
35148                if (before === undefined2) before = {};
35149                else if (typeof before === "boolean") before = { enabled: before };
35150                else if (typeof before === "string") before = { classes: before };
35151                if (before.enabled === false) clsName.push("disabled");
35152                if (before.classes)
35153                  clsName = clsName.concat(before.classes.split(/\s+/));
35154                if (before.tooltip) tooltip = before.tooltip;
35155                if (before.content) content = before.content;
35156              }
35157              if (typeof $3.uniqueSort === "function") {
35158                clsName = $3.uniqueSort(clsName);
35159              } else {
35160                clsName = $3.unique(clsName);
35161              }
35162              html.push(
35163                '<td class="' + clsName.join(" ") + '"' + (tooltip ? ' title="' + tooltip + '"' : "") + ' data-date="' + prevMonth.getTime().toString() + '">' + content + "</td>"
35164              );
35165              tooltip = null;
35166              if (weekDay === this.o.weekEnd) {
35167                html.push("</tr>");
35168              }
35169              prevMonth.setUTCDate(prevMonth.getUTCDate() + 1);
35170            }
35171            this.picker.find(".datepicker-days tbody").html(html.join(""));
35172            var monthsTitle = dates[this.o.language].monthsTitle || dates["en"].monthsTitle || "Months";
35173            var months = this.picker.find(".datepicker-months").find(".datepicker-switch").text(this.o.maxViewMode < 2 ? monthsTitle : year).end().find("tbody span").removeClass("active");
35174            $3.each(this.dates, function(i, d2) {
35175              if (d2.getUTCFullYear() === year)
35176                months.eq(d2.getUTCMonth()).addClass("active");
35177            });
35178            if (year < startYear || year > endYear) {
35179              months.addClass("disabled");
35180            }
35181            if (year === startYear) {
35182              months.slice(0, startMonth).addClass("disabled");
35183            }
35184            if (year === endYear) {
35185              months.slice(endMonth + 1).addClass("disabled");
35186            }
35187            if (this.o.beforeShowMonth !== $3.noop) {
35188              var that = this;
35189              $3.each(months, function(i, month2) {
35190                var moDate = new Date(year, i, 1);
35191                var before2 = that.o.beforeShowMonth(moDate);
35192                if (before2 === undefined2) before2 = {};
35193                else if (typeof before2 === "boolean") before2 = { enabled: before2 };
35194                else if (typeof before2 === "string") before2 = { classes: before2 };
35195                if (before2.enabled === false && !$3(month2).hasClass("disabled"))
35196                  $3(month2).addClass("disabled");
35197                if (before2.classes) $3(month2).addClass(before2.classes);
35198                if (before2.tooltip) $3(month2).prop("title", before2.tooltip);
35199              });
35200            }
35201            this._fill_yearsView(
35202              ".datepicker-years",
35203              "year",
35204              10,
35205              year,
35206              startYear,
35207              endYear,
35208              this.o.beforeShowYear
35209            );
35210            this._fill_yearsView(
35211              ".datepicker-decades",
35212              "decade",
35213              100,
35214              year,
35215              startYear,
35216              endYear,
35217              this.o.beforeShowDecade
35218            );
35219            this._fill_yearsView(
35220              ".datepicker-centuries",
35221              "century",
35222              1e3,
35223              year,
35224              startYear,
35225              endYear,
35226              this.o.beforeShowCentury
35227            );
35228          },
35229          updateNavArrows: function() {
35230            if (!this._allow_update) return;
35231            var d = new Date(this.viewDate), year = d.getUTCFullYear(), month = d.getUTCMonth(), startYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity, startMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity, endYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity, endMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity, prevIsDisabled, nextIsDisabled, factor = 1;
35232            switch (this.viewMode) {
35233              case 4:
35234                factor *= 10;
35235              /* falls through */
35236              case 3:
35237                factor *= 10;
35238              /* falls through */
35239              case 2:
35240                factor *= 10;
35241              /* falls through */
35242              case 1:
35243                prevIsDisabled = Math.floor(year / factor) * factor <= startYear;
35244                nextIsDisabled = Math.floor(year / factor) * factor + factor > endYear;
35245                break;
35246              case 0:
35247                prevIsDisabled = year <= startYear && month <= startMonth;
35248                nextIsDisabled = year >= endYear && month >= endMonth;
35249                break;
35250            }
35251            this.picker.find(".prev").toggleClass("disabled", prevIsDisabled);
35252            this.picker.find(".next").toggleClass("disabled", nextIsDisabled);
35253          },
35254          click: function(e) {
35255            e.preventDefault();
35256            e.stopPropagation();
35257            var target, dir, day, year, month;
35258            target = $3(e.target);
35259            if (target.hasClass("datepicker-switch") && this.viewMode !== this.o.maxViewMode) {
35260              this.setViewMode(this.viewMode + 1);
35261            }
35262            if (target.hasClass("today") && !target.hasClass("day")) {
35263              this.setViewMode(0);
35264              this._setDate(UTCToday(), this.o.todayBtn === "linked" ? null : "view");
35265            }
35266            if (target.hasClass("clear")) {
35267              this.clearDates();
35268            }
35269            if (!target.hasClass("disabled")) {
35270              if (target.hasClass("month") || target.hasClass("year") || target.hasClass("decade") || target.hasClass("century")) {
35271                this.viewDate.setUTCDate(1);
35272                day = 1;
35273                if (this.viewMode === 1) {
35274                  month = target.parent().find("span").index(target);
35275                  year = this.viewDate.getUTCFullYear();
35276                  this.viewDate.setUTCMonth(month);
35277                } else {
35278                  month = 0;
35279                  year = Number(target.text());
35280                  this.viewDate.setUTCFullYear(year);
35281                }
35282                this._trigger(DPGlobal.viewModes[this.viewMode - 1].e, this.viewDate);
35283                if (this.viewMode === this.o.minViewMode) {
35284                  this._setDate(UTCDate(year, month, day));
35285                } else {
35286                  this.setViewMode(this.viewMode - 1);
35287                  this.fill();
35288                }
35289              }
35290            }
35291            if (this.picker.is(":visible") && this._focused_from) {
35292              this._focused_from.focus();
35293            }
35294            delete this._focused_from;
35295          },
35296          dayCellClick: function(e) {
35297            var $target = $3(e.currentTarget);
35298            var timestamp = $target.data("date");
35299            var date = new Date(timestamp);
35300            if (this.o.updateViewDate) {
35301              if (date.getUTCFullYear() !== this.viewDate.getUTCFullYear()) {
35302                this._trigger("changeYear", this.viewDate);
35303              }
35304              if (date.getUTCMonth() !== this.viewDate.getUTCMonth()) {
35305                this._trigger("changeMonth", this.viewDate);
35306              }
35307            }
35308            this._setDate(date);
35309          },
35310          // Clicked on prev or next
35311          navArrowsClick: function(e) {
35312            var $target = $3(e.currentTarget);
35313            var dir = $target.hasClass("prev") ? -1 : 1;
35314            if (this.viewMode !== 0) {
35315              dir *= DPGlobal.viewModes[this.viewMode].navStep * 12;
35316            }
35317            this.viewDate = this.moveMonth(this.viewDate, dir);
35318            this._trigger(DPGlobal.viewModes[this.viewMode].e, this.viewDate);
35319            this.fill();
35320          },
35321          _toggle_multidate: function(date) {
35322            var ix = this.dates.contains(date);
35323            if (!date) {
35324              this.dates.clear();
35325            }
35326            if (ix !== -1) {
35327              if (this.o.multidate === true || this.o.multidate > 1 || this.o.toggleActive) {
35328                this.dates.remove(ix);
35329              }
35330            } else if (this.o.multidate === false) {
35331              this.dates.clear();
35332              this.dates.push(date);
35333            } else {
35334              this.dates.push(date);
35335            }
35336            if (typeof this.o.multidate === "number")
35337              while (this.dates.length > this.o.multidate) this.dates.remove(0);
35338          },
35339          _setDate: function(date, which) {
35340            if (!which || which === "date")
35341              this._toggle_multidate(date && new Date(date));
35342            if (!which && this.o.updateViewDate || which === "view")
35343              this.viewDate = date && new Date(date);
35344            this.fill();
35345            this.setValue();
35346            if (!which || which !== "view") {
35347              this._trigger("changeDate");
35348            }
35349            this.inputField.trigger("change");
35350            if (this.o.autoclose && (!which || which === "date")) {
35351              this.hide();
35352            }
35353          },
35354          moveDay: function(date, dir) {
35355            var newDate = new Date(date);
35356            newDate.setUTCDate(date.getUTCDate() + dir);
35357            return newDate;
35358          },
35359          moveWeek: function(date, dir) {
35360            return this.moveDay(date, dir * 7);
35361          },
35362          moveMonth: function(date, dir) {
35363            if (!isValidDate(date)) return this.o.defaultViewDate;
35364            if (!dir) return date;
35365            var new_date = new Date(date.valueOf()), day = new_date.getUTCDate(), month = new_date.getUTCMonth(), mag = Math.abs(dir), new_month, test;
35366            dir = dir > 0 ? 1 : -1;
35367            if (mag === 1) {
35368              test = dir === -1 ? (
35369                // If going back one month, make sure month is not current month
35370                // (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02)
35371                function() {
35372                  return new_date.getUTCMonth() === month;
35373                }
35374              ) : (
35375                // If going forward one month, make sure month is as expected
35376                // (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02)
35377                function() {
35378                  return new_date.getUTCMonth() !== new_month;
35379                }
35380              );
35381              new_month = month + dir;
35382              new_date.setUTCMonth(new_month);
35383              new_month = (new_month + 12) % 12;
35384            } else {
35385              for (var i = 0; i < mag; i++)
35386                new_date = this.moveMonth(new_date, dir);
35387              new_month = new_date.getUTCMonth();
35388              new_date.setUTCDate(day);
35389              test = function() {
35390                return new_month !== new_date.getUTCMonth();
35391              };
35392            }
35393            while (test()) {
35394              new_date.setUTCDate(--day);
35395              new_date.setUTCMonth(new_month);
35396            }
35397            return new_date;
35398          },
35399          moveYear: function(date, dir) {
35400            return this.moveMonth(date, dir * 12);
35401          },
35402          moveAvailableDate: function(date, dir, fn) {
35403            do {
35404              date = this[fn](date, dir);
35405              if (!this.dateWithinRange(date)) return false;
35406              fn = "moveDay";
35407            } while (this.dateIsDisabled(date));
35408            return date;
35409          },
35410          weekOfDateIsDisabled: function(date) {
35411            return $3.inArray(date.getUTCDay(), this.o.daysOfWeekDisabled) !== -1;
35412          },
35413          dateIsDisabled: function(date) {
35414            return this.weekOfDateIsDisabled(date) || $3.grep(this.o.datesDisabled, function(d) {
35415              return isUTCEquals(date, d);
35416            }).length > 0;
35417          },
35418          dateWithinRange: function(date) {
35419            return date >= this.o.startDate && date <= this.o.endDate;
35420          },
35421          keydown: function(e) {
35422            if (!this.picker.is(":visible")) {
35423              if (e.keyCode === 40 || e.keyCode === 27) {
35424                this.show();
35425                e.stopPropagation();
35426              }
35427              return;
35428            }
35429            var dateChanged = false, dir, newViewDate, focusDate = this.focusDate || this.viewDate;
35430            switch (e.keyCode) {
35431              case 27:
35432                if (this.focusDate) {
35433                  this.focusDate = null;
35434                  this.viewDate = this.dates.get(-1) || this.viewDate;
35435                  this.fill();
35436                } else this.hide();
35437                e.preventDefault();
35438                e.stopPropagation();
35439                break;
35440              case 37:
35441              // left
35442              case 38:
35443              // up
35444              case 39:
35445              // right
35446              case 40:
35447                if (!this.o.keyboardNavigation || this.o.daysOfWeekDisabled.length === 7)
35448                  break;
35449                dir = e.keyCode === 37 || e.keyCode === 38 ? -1 : 1;
35450                if (this.viewMode === 0) {
35451                  if (e.ctrlKey) {
35452                    newViewDate = this.moveAvailableDate(focusDate, dir, "moveYear");
35453                    if (newViewDate) this._trigger("changeYear", this.viewDate);
35454                  } else if (e.shiftKey) {
35455                    newViewDate = this.moveAvailableDate(focusDate, dir, "moveMonth");
35456                    if (newViewDate) this._trigger("changeMonth", this.viewDate);
35457                  } else if (e.keyCode === 37 || e.keyCode === 39) {
35458                    newViewDate = this.moveAvailableDate(focusDate, dir, "moveDay");
35459                  } else if (!this.weekOfDateIsDisabled(focusDate)) {
35460                    newViewDate = this.moveAvailableDate(focusDate, dir, "moveWeek");
35461                  }
35462                } else if (this.viewMode === 1) {
35463                  if (e.keyCode === 38 || e.keyCode === 40) {
35464                    dir = dir * 4;
35465                  }
35466                  newViewDate = this.moveAvailableDate(focusDate, dir, "moveMonth");
35467                } else if (this.viewMode === 2) {
35468                  if (e.keyCode === 38 || e.keyCode === 40) {
35469                    dir = dir * 4;
35470                  }
35471                  newViewDate = this.moveAvailableDate(focusDate, dir, "moveYear");
35472                }
35473                if (newViewDate) {
35474                  this.focusDate = this.viewDate = newViewDate;
35475                  this.setValue();
35476                  this.fill();
35477                  e.preventDefault();
35478                }
35479                break;
35480              case 13:
35481                if (!this.o.forceParse) break;
35482                focusDate = this.focusDate || this.dates.get(-1) || this.viewDate;
35483                if (this.o.keyboardNavigation) {
35484                  this._toggle_multidate(focusDate);
35485                  dateChanged = true;
35486                }
35487                this.focusDate = null;
35488                this.viewDate = this.dates.get(-1) || this.viewDate;
35489                this.setValue();
35490                this.fill();
35491                if (this.picker.is(":visible")) {
35492                  e.preventDefault();
35493                  e.stopPropagation();
35494                  if (this.o.autoclose) this.hide();
35495                }
35496                break;
35497              case 9:
35498                this.focusDate = null;
35499                this.viewDate = this.dates.get(-1) || this.viewDate;
35500                this.fill();
35501                this.hide();
35502                break;
35503            }
35504            if (dateChanged) {
35505              if (this.dates.length) this._trigger("changeDate");
35506              else this._trigger("clearDate");
35507              this.inputField.trigger("change");
35508            }
35509          },
35510          setViewMode: function(viewMode) {
35511            this.viewMode = viewMode;
35512            this.picker.children("div").hide().filter(".datepicker-" + DPGlobal.viewModes[this.viewMode].clsName).show();
35513            this.updateNavArrows();
35514            this._trigger("changeViewMode", new Date(this.viewDate));
35515          }
35516        };
35517        var DateRangePicker = function(element, options) {
35518          $3.data(element, "datepicker", this);
35519          this.element = $3(element);
35520          this.inputs = $3.map(options.inputs, function(i) {
35521            return i.jquery ? i[0] : i;
35522          });
35523          delete options.inputs;
35524          this.keepEmptyValues = options.keepEmptyValues;
35525          delete options.keepEmptyValues;
35526          datepickerPlugin.call($3(this.inputs), options).on("changeDate", $3.proxy(this.dateUpdated, this));
35527          this.pickers = $3.map(this.inputs, function(i) {
35528            return $3.data(i, "datepicker");
35529          });
35530          this.updateDates();
35531        };
35532        DateRangePicker.prototype = {
35533          updateDates: function() {
35534            this.dates = $3.map(this.pickers, function(i) {
35535              return i.getUTCDate();
35536            });
35537            this.updateRanges();
35538          },
35539          updateRanges: function() {
35540            var range = $3.map(this.dates, function(d) {
35541              return d.valueOf();
35542            });
35543            $3.each(this.pickers, function(i, p) {
35544              p.setRange(range);
35545            });
35546          },
35547          clearDates: function() {
35548            $3.each(this.pickers, function(i, p) {
35549              p.clearDates();
35550            });
35551          },
35552          dateUpdated: function(e) {
35553            if (this.updating) return;
35554            this.updating = true;
35555            var dp = $3.data(e.target, "datepicker");
35556            if (dp === undefined2) {
35557              return;
35558            }
35559            var new_date = dp.getUTCDate(), keep_empty_values = this.keepEmptyValues, i = $3.inArray(e.target, this.inputs), j = i - 1, k = i + 1, l = this.inputs.length;
35560            if (i === -1) return;
35561            $3.each(this.pickers, function(i2, p) {
35562              if (!p.getUTCDate() && (p === dp || !keep_empty_values))
35563                p.setUTCDate(new_date);
35564            });
35565            if (new_date < this.dates[j]) {
35566              while (j >= 0 && new_date < this.dates[j] && (this.pickers[j].element.val() || "").length > 0) {
35567                this.pickers[j--].setUTCDate(new_date);
35568              }
35569            } else if (new_date > this.dates[k]) {
35570              while (k < l && new_date > this.dates[k] && (this.pickers[k].element.val() || "").length > 0) {
35571                this.pickers[k++].setUTCDate(new_date);
35572              }
35573            }
35574            this.updateDates();
35575            delete this.updating;
35576          },
35577          destroy: function() {
35578            $3.map(this.pickers, function(p) {
35579              p.destroy();
35580            });
35581            $3(this.inputs).off("changeDate", this.dateUpdated);
35582            delete this.element.data().datepicker;
35583          },
35584          remove: alias(
35585            "destroy",
35586            "Method `remove` is deprecated and will be removed in version 2.0. Use `destroy` instead"
35587          )
35588        };
35589        function opts_from_el(el, prefix) {
35590          var data = $3(el).data(), out = {}, inkey, replace = new RegExp("^" + prefix.toLowerCase() + "([A-Z])");
35591          prefix = new RegExp("^" + prefix.toLowerCase());
35592          function re_lower(_, a) {
35593            return a.toLowerCase();
35594          }
35595          for (var key in data)
35596            if (prefix.test(key)) {
35597              inkey = key.replace(replace, re_lower);
35598              out[inkey] = data[key];
35599            }
35600          return out;
35601        }
35602        function opts_from_locale(lang) {
35603          var out = {};
35604          if (!dates[lang]) {
35605            lang = lang.split("-")[0];
35606            if (!dates[lang]) return;
35607          }
35608          var d = dates[lang];
35609          $3.each(locale_opts, function(i, k) {
35610            if (k in d) out[k] = d[k];
35611          });
35612          return out;
35613        }
35614        var old = $3.fn.datepicker;
35615        var datepickerPlugin = function(option) {
35616          var args = Array.apply(null, arguments);
35617          args.shift();
35618          var internal_return;
35619          this.each(function() {
35620            var $this = $3(this), data = $this.data("datepicker"), options = typeof option === "object" && option;
35621            if (!data) {
35622              var elopts = opts_from_el(this, "date"), xopts = $3.extend({}, defaults, elopts, options), locopts = opts_from_locale(xopts.language), opts = $3.extend({}, defaults, locopts, elopts, options);
35623              if ($this.hasClass("input-daterange") || opts.inputs) {
35624                $3.extend(opts, {
35625                  inputs: opts.inputs || $this.find("input").toArray()
35626                });
35627                data = new DateRangePicker(this, opts);
35628              } else {
35629                data = new Datepicker(this, opts);
35630              }
35631              $this.data("datepicker", data);
35632            }
35633            if (typeof option === "string" && typeof data[option] === "function") {
35634              internal_return = data[option].apply(data, args);
35635            }
35636          });
35637          if (internal_return === undefined2 || internal_return instanceof Datepicker || internal_return instanceof DateRangePicker)
35638            return this;
35639          if (this.length > 1)
35640            throw new Error(
35641              "Using only allowed for the collection of a single element (" + option + " function)"
35642            );
35643          else return internal_return;
35644        };
35645        $3.fn.datepicker = datepickerPlugin;
35646        var defaults = $3.fn.datepicker.defaults = {
35647          assumeNearbyYear: false,
35648          autoclose: false,
35649          beforeShowDay: $3.noop,
35650          beforeShowMonth: $3.noop,
35651          beforeShowYear: $3.noop,
35652          beforeShowDecade: $3.noop,
35653          beforeShowCentury: $3.noop,
35654          calendarWeeks: false,
35655          clearBtn: false,
35656          toggleActive: false,
35657          daysOfWeekDisabled: [],
35658          daysOfWeekHighlighted: [],
35659          datesDisabled: [],
35660          endDate: Infinity,
35661          forceParse: true,
35662          format: "mm/dd/yyyy",
35663          isInline: null,
35664          keepEmptyValues: false,
35665          keyboardNavigation: true,
35666          language: "en",
35667          minViewMode: 0,
35668          maxViewMode: 4,
35669          multidate: false,
35670          multidateSeparator: ",",
35671          orientation: "auto",
35672          rtl: false,
35673          startDate: -Infinity,
35674          startView: 0,
35675          todayBtn: false,
35676          todayHighlight: false,
35677          updateViewDate: true,
35678          weekStart: 0,
35679          disableTouchKeyboard: false,
35680          enableOnReadonly: true,
35681          showOnFocus: true,
35682          zIndexOffset: 10,
35683          container: "body",
35684          immediateUpdates: false,
35685          title: "",
35686          templates: {
35687            leftArrow: "&#x00AB;",
35688            rightArrow: "&#x00BB;"
35689          },
35690          showWeekDays: true
35691        };
35692        var locale_opts = $3.fn.datepicker.locale_opts = [
35693          "format",
35694          "rtl",
35695          "weekStart"
35696        ];
35697        $3.fn.datepicker.Constructor = Datepicker;
35698        var dates = $3.fn.datepicker.dates = {
35699          en: {
35700            days: [
35701              "Sunday",
35702              "Monday",
35703              "Tuesday",
35704              "Wednesday",
35705              "Thursday",
35706              "Friday",
35707              "Saturday"
35708            ],
35709            daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
35710            daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
35711            months: [
35712              "January",
35713              "February",
35714              "March",
35715              "April",
35716              "May",
35717              "June",
35718              "July",
35719              "August",
35720              "September",
35721              "October",
35722              "November",
35723              "December"
35724            ],
35725            monthsShort: [
35726              "Jan",
35727              "Feb",
35728              "Mar",
35729              "Apr",
35730              "May",
35731              "Jun",
35732              "Jul",
35733              "Aug",
35734              "Sep",
35735              "Oct",
35736              "Nov",
35737              "Dec"
35738            ],
35739            today: "Today",
35740            clear: "Clear",
35741            titleFormat: "MM yyyy"
35742          }
35743        };
35744        var DPGlobal = {
35745          viewModes: [
35746            {
35747              names: ["days", "month"],
35748              clsName: "days",
35749              e: "changeMonth"
35750            },
35751            {
35752              names: ["months", "year"],
35753              clsName: "months",
35754              e: "changeYear",
35755              navStep: 1
35756            },
35757            {
35758              names: ["years", "decade"],
35759              clsName: "years",
35760              e: "changeDecade",
35761              navStep: 10
35762            },
35763            {
35764              names: ["decades", "century"],
35765              clsName: "decades",
35766              e: "changeCentury",
35767              navStep: 100
35768            },
35769            {
35770              names: ["centuries", "millennium"],
35771              clsName: "centuries",
35772              e: "changeMillennium",
35773              navStep: 1e3
35774            }
35775          ],
35776          validParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g,
35777          nonpunctuation: /[^ -\/:-@\u5e74\u6708\u65e5\[-`{-~\t\n\r]+/g,
35778          parseFormat: function(format) {
35779            if (typeof format.toValue === "function" && typeof format.toDisplay === "function")
35780              return format;
35781            var separators = format.replace(this.validParts, "\0").split("\0"), parts = format.match(this.validParts);
35782            if (!separators || !separators.length || !parts || parts.length === 0) {
35783              throw new Error("Invalid date format.");
35784            }
35785            return { separators, parts };
35786          },
35787          parseDate: function(date, format, language, assumeNearby) {
35788            if (!date) return undefined2;
35789            if (date instanceof Date) return date;
35790            if (typeof format === "string") format = DPGlobal.parseFormat(format);
35791            if (format.toValue) return format.toValue(date, format, language);
35792            var fn_map = {
35793              d: "moveDay",
35794              m: "moveMonth",
35795              w: "moveWeek",
35796              y: "moveYear"
35797            }, dateAliases = {
35798              yesterday: "-1d",
35799              today: "+0d",
35800              tomorrow: "+1d"
35801            }, parts, part, dir, i, fn;
35802            if (date in dateAliases) {
35803              date = dateAliases[date];
35804            }
35805            if (/^[\-+]\d+[dmwy]([\s,]+[\-+]\d+[dmwy])*$/i.test(date)) {
35806              parts = date.match(/([\-+]\d+)([dmwy])/gi);
35807              date = /* @__PURE__ */ new Date();
35808              for (i = 0; i < parts.length; i++) {
35809                part = parts[i].match(/([\-+]\d+)([dmwy])/i);
35810                dir = Number(part[1]);
35811                fn = fn_map[part[2].toLowerCase()];
35812                date = Datepicker.prototype[fn](date, dir);
35813              }
35814              return Datepicker.prototype._zero_utc_time(date);
35815            }
35816            parts = date && date.match(this.nonpunctuation) || [];
35817            function applyNearbyYear(year, threshold) {
35818              if (threshold === true) threshold = 10;
35819              if (year < 100) {
35820                year += 2e3;
35821                if (year > (/* @__PURE__ */ new Date()).getFullYear() + threshold) {
35822                  year -= 100;
35823                }
35824              }
35825              return year;
35826            }
35827            var parsed = {}, setters_order = ["yyyy", "yy", "M", "MM", "m", "mm", "d", "dd"], setters_map = {
35828              yyyy: function(d, v) {
35829                return d.setUTCFullYear(
35830                  assumeNearby ? applyNearbyYear(v, assumeNearby) : v
35831                );
35832              },
35833              m: function(d, v) {
35834                if (isNaN(d)) return d;
35835                v -= 1;
35836                while (v < 0) v += 12;
35837                v %= 12;
35838                d.setUTCMonth(v);
35839                while (d.getUTCMonth() !== v) d.setUTCDate(d.getUTCDate() - 1);
35840                return d;
35841              },
35842              d: function(d, v) {
35843                return d.setUTCDate(v);
35844              }
35845            }, val, filtered;
35846            setters_map["yy"] = setters_map["yyyy"];
35847            setters_map["M"] = setters_map["MM"] = setters_map["mm"] = setters_map["m"];
35848            setters_map["dd"] = setters_map["d"];
35849            date = UTCToday();
35850            var fparts = format.parts.slice();
35851            if (parts.length !== fparts.length) {
35852              fparts = $3(fparts).filter(function(i2, p) {
35853                return $3.inArray(p, setters_order) !== -1;
35854              }).toArray();
35855            }
35856            function match_part() {
35857              var m = this.slice(0, parts[i].length), p = parts[i].slice(0, m.length);
35858              return m.toLowerCase() === p.toLowerCase();
35859            }
35860            if (parts.length === fparts.length) {
35861              var cnt;
35862              for (i = 0, cnt = fparts.length; i < cnt; i++) {
35863                val = parseInt(parts[i], 10);
35864                part = fparts[i];
35865                if (isNaN(val)) {
35866                  switch (part) {
35867                    case "MM":
35868                      filtered = $3(dates[language].months).filter(match_part);
35869                      val = $3.inArray(filtered[0], dates[language].months) + 1;
35870                      break;
35871                    case "M":
35872                      filtered = $3(dates[language].monthsShort).filter(match_part);
35873                      val = $3.inArray(filtered[0], dates[language].monthsShort) + 1;
35874                      break;
35875                  }
35876                }
35877                parsed[part] = val;
35878              }
35879              var _date, s;
35880              for (i = 0; i < setters_order.length; i++) {
35881                s = setters_order[i];
35882                if (s in parsed && !isNaN(parsed[s])) {
35883                  _date = new Date(date);
35884                  setters_map[s](_date, parsed[s]);
35885                  if (!isNaN(_date)) date = _date;
35886                }
35887              }
35888            }
35889            return date;
35890          },
35891          formatDate: function(date, format, language) {
35892            if (!date) return "";
35893            if (typeof format === "string") format = DPGlobal.parseFormat(format);
35894            if (format.toDisplay) return format.toDisplay(date, format, language);
35895            var val = {
35896              d: date.getUTCDate(),
35897              D: dates[language].daysShort[date.getUTCDay()],
35898              DD: dates[language].days[date.getUTCDay()],
35899              m: date.getUTCMonth() + 1,
35900              M: dates[language].monthsShort[date.getUTCMonth()],
35901              MM: dates[language].months[date.getUTCMonth()],
35902              yy: date.getUTCFullYear().toString().substring(2),
35903              yyyy: date.getUTCFullYear()
35904            };
35905            val.dd = (val.d < 10 ? "0" : "") + val.d;
35906            val.mm = (val.m < 10 ? "0" : "") + val.m;
35907            date = [];
35908            var seps = $3.extend([], format.separators);
35909            for (var i = 0, cnt = format.parts.length; i <= cnt; i++) {
35910              if (seps.length) date.push(seps.shift());
35911              date.push(val[format.parts[i]]);
35912            }
35913            return date.join("");
35914          },
35915          headTemplate: '<thead><tr><th colspan="7" class="datepicker-title"></th></tr><tr><th class="prev">' + defaults.templates.leftArrow + '</th><th colspan="5" class="datepicker-switch"></th><th class="next">' + defaults.templates.rightArrow + "</th></tr></thead>",
35916          contTemplate: '<tbody><tr><td colspan="7"></td></tr></tbody>',
35917          footTemplate: '<tfoot><tr><th colspan="7" class="today"></th></tr><tr><th colspan="7" class="clear"></th></tr></tfoot>'
35918        };
35919        DPGlobal.template = '<div class="datepicker"><div class="datepicker-days"><table class="table-condensed">' + DPGlobal.headTemplate + "<tbody></tbody>" + DPGlobal.footTemplate + '</table></div><div class="datepicker-months"><table class="table-condensed">' + DPGlobal.headTemplate + DPGlobal.contTemplate + DPGlobal.footTemplate + '</table></div><div class="datepicker-years"><table class="table-condensed">' + DPGlobal.headTemplate + DPGlobal.contTemplate + DPGlobal.footTemplate + '</table></div><div class="datepicker-decades"><table class="table-condensed">' + DPGlobal.headTemplate + DPGlobal.contTemplate + DPGlobal.footTemplate + '</table></div><div class="datepicker-centuries"><table class="table-condensed">' + DPGlobal.headTemplate + DPGlobal.contTemplate + DPGlobal.footTemplate + "</table></div></div>";
35920        $3.fn.datepicker.DPGlobal = DPGlobal;
35921        $3.fn.datepicker.noConflict = function() {
35922          $3.fn.datepicker = old;
35923          return this;
35924        };
35925        $3.fn.datepicker.version = "1.10.0";
35926        $3.fn.datepicker.deprecated = function(msg) {
35927          var console2 = window.console;
35928          if (console2 && console2.warn) {
35929            console2.warn("DEPRECATED: " + msg);
35930          }
35931        };
35932        $3(document).on(
35933          "focus.datepicker.data-api click.datepicker.data-api",
35934          '[data-provide="datepicker"]',
35935          function(e) {
35936            var $this = $3(this);
35937            if ($this.data("datepicker")) return;
35938            e.preventDefault();
35939            datepickerPlugin.call($this, "show");
35940          }
35941        );
35942        $3(function() {
35943          datepickerPlugin.call($3('[data-provide="datepicker-inline"]'));
35944        });
35945      });
35946    }
35947  });
35948
35949  
vendor: 4,230 bytes, lines 35949-36065
35949// apps/base/assets/javascripts/vendor/balancetext.js
35950  var require_balancetext = __commonJS({
35951    "apps/base/assets/javascripts/vendor/balancetext.js"(exports, module) {
35952      "use strict";
35953      init_esbuild_shims();
35954      (function(root, factory) {
35955        if (typeof define === "function" && define.amd) {
35956          define([], factory);
35957        } else if (typeof module === "object" && module.exports) {
35958          module.exports = factory();
35959        } else {
35960          root.balanceText = factory();
35961        }
35962      })(exports, () => {
35963        let breakMatches, wsnwMatches, wsnwOffset;
35964        const watching = {
35965          sel: [],
35966          // default class to watch
35967          el: []
35968        };
35969        let handlersInitialized = false;
35970        let polyfilled = false;
35971        function noop() {
35972        }
35973        function forEach(elements, callback) {
35974          Array.prototype.forEach.call(elements, callback);
35975        }
35976        function ready(fn) {
35977          if (document.readyState !== "loading") {
35978            fn();
35979          } else if (document.addEventListener) {
35980            document.addEventListener("DOMContentLoaded", fn);
35981          } else {
35982            document.attachEvent("onreadystatechange", () => {
35983              if (document.readyState !== "loading") {
35984                fn();
35985              }
35986            });
35987          }
35988        }
35989        function debounce(func, threshold, execAsap, ...args) {
35990          let timeout;
35991          return function() {
35992            const obj = this;
35993            function delayed() {
35994              if (!execAsap) {
35995                func.apply(obj, args);
35996              }
35997              timeout = null;
35998            }
35999            if (timeout) {
36000              clearTimeout(timeout);
36001            } else if (execAsap) {
36002              func.apply(obj, args);
36003            }
36004            timeout = setTimeout(delayed, threshold || 100);
36005          };
36006        }
36007        function hasTextWrap() {
36008          if (typeof window === "undefined") {
36009            return false;
36010          }
36011          const { style } = document.documentElement;
36012          return style.textWrap || style.WebkitTextWrap || style.MozTextWrap || style.MsTextWrap;
36013        }
36014        function NextWS_params() {
36015          this.reset();
36016        }
36017        NextWS_params.prototype.reset = function() {
36018          this.index = 0;
36019          this.width = 0;
36020        };
36021        function isWhiteSpaceNoWrap(index) {
36022          return wsnwMatches.some((range) => range.start < index && index < range.end);
36023        }
36024        function recursiveCalcNoWrapOffsetsForLine(el, includeTag) {
36025          if (el.nodeType === el.ELEMENT_NODE) {
36026            const style = window.getComputedStyle(el);
36027            if (style.whiteSpace === "nowrap") {
36028              const len = el.outerHTML.length;
36029              wsnwMatches.push({ start: wsnwOffset, end: wsnwOffset + len });
36030              wsnwOffset += len;
36031            } else {
36032              forEach(el.childNodes, (child) => {
36033                recursiveCalcNoWrapOffsetsForLine(child, true);
36034              });
36035              if (includeTag) {
36036                wsnwOffset += el.outerHTML.length - el.innerHTML.length;
36037              }
36038            }
36039          } else if (el.nodeType === el.COMMENT_NODE) {
36040            wsnwOffset += el.length + 7;
36041          } else if (el.nodeType === el.PROCESSING_INSTRUCTION_NODE) {
36042            wsnwOffset += el.length + 2;
36043          } else {
36044            wsnwOffset += el.length;
36045          }
36046        }
36047        function calcNoWrapOffsetsForLine(el, oldWS, lineCharOffset) {
36048          if (lineCharOffset === 0) {
36049            el.style.whiteSpace = oldWS;
36050            wsnwOffset = 0;
36051            wsnwMatches = [];
36052            recursiveCalcNoWrapOffsetsForLine(el, false);
36053            el.style.whiteSpace = "nowrap";
36054          } else {
36055            const newMatches = [];
36056            wsnwMatches.forEach((match) => {
36057              if (match.start > lineCharOffset) {
36058                newMatches.push({ start: match.start - lineCharOffset, end: match.end - lineCharOffset });
36059              }
36060            });
36061            wsnwMatches = newMatches;
36062          }
36063        }
36064        function removeTags(el) {
36065          let brs = el.querySelectorAll('br[data-owner="balance-text-hyphen"]');
36066          forEach(brs, (br) => {
36067            br.outerHTML = "";
36068          });
36069          brs = el.querySelectorAll('br[data-owner="balance-text"]');
36070          forEach(brs, (br) => {
36071            br.outerHTML = " ";
36072          });
36073          let spans = el.querySelectorAll('span[data-owner="balance-text-softhyphen"]');
36074          if (spans.length > 0) {
36075            forEach(spans, (span) => {
36076              const textNode = document.createTextNode("\xAD");
36077              span.parentNode.insertBefore(textNode, span);
36078              span.parentNode.removeChild(span);
36079            });
36080          }
36081          spans = el.querySelectorAll('span[data-owner="balance-text-justify"]');
36082          if (spans.length > 0) {
36083            let txt = "";
36084            forEach(spans, (span) => {
36085              txt += span.textContent;
36086              span.parentNode.removeChild(span);
36087            });
36088            el.innerHTML = txt;
36089          }
36090        }
36091        const isJustified = function(el) {
36092          const style = el.currentStyle || window.getComputedStyle(el, null);
36093          return style.textAlign === "justify";
36094        };
36095        function justify(el, txt, conWidth) {
36096          txt = txt.trim();
36097          const words = txt.split(" ").length;
36098          txt = `${txt} `;
36099          if (words < 2) {
36100            return txt;
36101          }
36102          const tmp = document.createElement("span");
36103          tmp.innerHTML = txt;
36104          el.appendChild(tmp);
36105          const size = tmp.offsetWidth;
36106          tmp.parentNode.removeChild(tmp);
36107          const wordSpacing = Math.floor((conWidth - size) / (words - 1));
36108          tmp.style.wordSpacing = `${wordSpacing}px`;
36109          tmp.setAttribute("data-owner", "balance-text-justify");
36110          const div = document.createElement("div");
36111          div.appendChild(tmp);
36112          return div.innerHTML;
36113        }
36114        function isBreakChar(txt, index) {
36115          const re = /([^\S\u00a0]|-|\u2014|\u2013|\u00ad)(?![^<]*>)/g;
36116          let match;
36117          if (!breakMatches) {
36118            breakMatches = [];
36119            match = re.exec(txt);
36120            while (match !== null) {
36121              if (!isWhiteSpaceNoWrap(match.index)) {
36122                breakMatches.push(match.index);
36123              }
36124              match = re.exec(txt);
36125            }
36126          }
36127          return breakMatches.indexOf(index) !== -1;
36128        }
36129        function isBreakOpportunity(txt, index) {
36130          return index === 0 || index === txt.length || isBreakChar(txt, index - 1) && !isBreakChar(txt, index);
36131        }
36132        function findBreakOpportunity(el, txt, conWidth, desWidth, dir, c, ret) {
36133          let w;
36134          if (txt && typeof txt === "string") {
36135            for (; ; ) {
36136              while (!isBreakOpportunity(txt, c)) {
36137                c += dir;
36138              }
36139              el.innerHTML = txt.substr(0, c);
36140              w = el.offsetWidth;
36141              if (dir < 0) {
36142                if (w <= desWidth || w <= 0 || c === 0) {
36143                  break;
36144                }
36145              } else if (desWidth <= w || conWidth <= w || c === txt.length) {
36146                break;
36147              }
36148              c += dir;
36149            }
36150          }
36151          ret.index = c;
36152          ret.width = w;
36153        }
36154        function getSpaceWidth(el, h) {
36155          const container = document.createElement("div");
36156          container.style.display = "block";
36157          container.style.position = "absolute";
36158          container.style.bottom = 0;
36159          container.style.right = 0;
36160          container.style.width = 0;
36161          container.style.height = 0;
36162          container.style.margin = 0;
36163          container.style.padding = 0;
36164          container.style.visibility = "hidden";
36165          container.style.overflow = "hidden";
36166          const space = document.createElement("span");
36167          space.style.fontSize = "2000px";
36168          space.innerHTML = "&nbsp;";
36169          container.appendChild(space);
36170          el.appendChild(container);
36171          const dims = space.getBoundingClientRect();
36172          container.parentNode.removeChild(container);
36173          const spaceRatio = dims.height / dims.width;
36174          return h / spaceRatio;
36175        }
36176        function getElementsList(elements) {
36177          if (!elements) {
36178            return [];
36179          }
36180          if (typeof elements === "string") {
36181            return document.querySelectorAll(elements);
36182          }
36183          if (elements.tagName && elements.querySelectorAll) {
36184            return [elements];
36185          }
36186          return elements;
36187        }
36188        function balanceText(elements) {
vendor: 1,914 bytes, lines 36189-36224
36189          forEach(getElementsList(elements), (el) => {
36190            const maxTextWidth = 5e3;
36191            removeTags(el);
36192            const oldWS = el.style.whiteSpace;
36193            const oldFloat = el.style.float;
36194            const oldDisplay = el.style.display;
36195            const oldPosition = el.style.position;
36196            const oldLH = el.style.lineHeight;
36197            el.style.lineHeight = "normal";
36198            const containerWidth = el.offsetWidth;
36199            const containerHeight = el.offsetHeight;
36200            el.style.whiteSpace = "nowrap";
36201            el.style.float = "none";
36202            el.style.display = "inline";
36203            el.style.position = "static";
36204            let nowrapWidth = el.offsetWidth;
36205            const nowrapHeight = el.offsetHeight;
36206            const spaceWidth = oldWS === "pre-wrap" ? 0 : getSpaceWidth(el, nowrapHeight);
36207            if (containerWidth > 0 && // prevent divide by zero
36208            nowrapWidth > containerWidth && // text is more than 1 line
36209            nowrapWidth < maxTextWidth) {
36210              let remainingText = el.innerHTML;
36211              let newText = "";
36212              let lineText = "";
36213              const shouldJustify = isJustified(el);
36214              const totLines = Math.round(containerHeight / nowrapHeight);
36215              let remLines = totLines;
36216              let lineCharOffset = 0;
36217              let desiredWidth, guessIndex, le, ge, splitIndex, isHyphen, isSoftHyphen;
36218              while (remLines > 1) {
36219                breakMatches = null;
36220                calcNoWrapOffsetsForLine(el, oldWS, lineCharOffset);
36221                desiredWidth = Math.round((nowrapWidth + spaceWidth) / remLines - spaceWidth);
36222                guessIndex = Math.round((remainingText.length + 1) / remLines) - 1;
36223                le = new NextWS_params();
36224                findBreakOpportunity(el, remainingText, containerWidth, desiredWidth, -1, guessIndex, le);
36225                ge = new NextWS_params();
36226                guessIndex = le.index;
36227                findBreakOpportunity(el, remainingText, containerWidth, desiredWidth, 1, guessIndex, ge);
36228                le.reset();
36229                guessIndex = ge.index;
36230                findBreakOpportunity(el, remainingText, containerWidth, desiredWidth, -1, guessIndex, le);
36231                if (le.index === 0) {
36232                  splitIndex = ge.index;
36233                } else if (containerWidth < ge.width || le.index === ge.index) {
36234                  splitIndex = le.index;
36235                } else {
36236                  splitIndex = Math.abs(desiredWidth - le.width) < Math.abs(ge.width - desiredWidth) ? le.index : ge.index;
36237                }
36238                lineText = remainingText.substr(0, splitIndex).replace(/\s$/, "");
36239                isSoftHyphen = Boolean(lineText.match(/\u00ad$/));
36240                if (isSoftHyphen) {
36241                  lineText = lineText.replace(/\u00ad$/, '<span data-owner="balance-text-softhyphen">-</span>');
36242                }
36243                if (shouldJustify) {
36244                  newText += justify(el, lineText, containerWidth);
36245                } else {
36246                  newText += lineText;
36247                  isHyphen = isSoftHyphen || Boolean(lineText.match(/(-|\u2014|\u2013)$/));
36248                  newText += isHyphen ? '<br data-owner="balance-text-hyphen" />' : '<br data-owner="balance-text" aria-hidden="true" />';
36249                }
36250                remainingText = remainingText.substr(splitIndex);
36251                lineCharOffset = splitIndex;
36252                remLines--;
36253                el.innerHTML = remainingText;
36254                nowrapWidth = el.offsetWidth;
36255              }
36256              if (shouldJustify) {
36257                el.innerHTML = newText + justify(el, remainingText, containerWidth);
36258              } else {
36259                el.innerHTML = newText + remainingText;
36260              }
36261            }
36262            el.style.whiteSpace = oldWS;
36263            el.style.float = oldFloat;
36264            el.style.display = oldDisplay;
36265            el.style.position = oldPosition;
36266            el.style.lineHeight = oldLH;
36267          });
36268        }
36269        function updateWatched() {
36270          const selectors = watching.sel.join(",");
36271          const selectedElements = getElementsList(selectors);
36272          const elements = Array.prototype.concat.apply(watching.el, selectedElements);
36273          balanceText(elements);
36274        }
36275        function initHandlers() {
36276          if (handlersInitialized) {
36277            return;
36278          }
36279          ready(updateWatched);
36280          window.addEventListener("load", updateWatched);
36281          window.addEventListener("resize", debounce(updateWatched));
36282          handlersInitialized = true;
36283        }
36284        function balanceTextAndWatch(elements) {
36285          if (typeof elements === "string") {
36286            watching.sel.push(elements);
36287          } else {
36288            forEach(getElementsList(elements), (el) => {
36289              watching.el.push(el);
36290            });
36291          }
36292          initHandlers();
36293          updateWatched();
36294        }
36295        function unwatch(elements) {
36296          if (typeof elements === "string") {
36297            watching.sel = watching.sel.filter((el) => el !== elements);
36298          } else {
36299            elements = getElementsList(elements);
36300            watching.el = watching.el.filter((el) => elements.indexOf(el) === -1);
36301          }
36302        }
36303        function polyfill() {
36304          if (polyfilled) {
36305            return;
36306          }
36307          watching.sel.push(".balance-text");
36308          initHandlers();
36309          polyfilled = true;
36310        }
36311        function publicInterface(elements, options) {
36312          if (!elements) {
36313            polyfill();
36314          } else if (options && options.watch === true) {
36315            balanceTextAndWatch(elements);
36316          } else if (options && options.watch === false) {
36317            unwatch(elements);
36318          } else {
36319            balanceText(elements);
36320          }
36321        }
36322        publicInterface.updateWatched = updateWatched;
36323        if (hasTextWrap()) {
36324          noop.updateWatched = noop;
36325          return noop;
36326        }
36327        return publicInterface;
36328      });
36329    }
36330  });
36331
36332  
36332// apps/base/assets/javascripts/vendor/email_address_decoder.js
36333  var require_email_address_decoder = __commonJS({
36334    "apps/base/assets/javascripts/vendor/email_address_decoder.js"() {
36335      "use strict";
36336      init_esbuild_shims();
36337      jQuery(window).on("load", function() {
36338        jQuery(":contains('(at)'), [href*='(at)']").each(function(index, element) {
36339          var $element = jQuery(element);
36340          var dup = $element.clone();
36341          dup.children().remove();
36342          if (dup.text().search(/\(at\)/g) != -1) {
36343            $element.html($element.html().replace(/\(at\)/g, "@"));
36344          }
36345          if ($element.attr("href") && $element.attr("href").search(/\(at\)/g) != -1) {
36346            $element.attr("href", $element.attr("href").replace(/\(at\)/g, "@"));
36347          }
36348        });
36349      });
36350    }
36351  });
36352
36353  
36353// apps/base/assets/javascripts/vendor/hamlcoffee.js
36354  var require_hamlcoffee = __commonJS({
36355    "apps/base/assets/javascripts/vendor/hamlcoffee.js"() {
36356      "use strict";
36357      init_esbuild_shims();
36358      var require2 = function(file, cwd) {
36359        var resolved = require2.resolve(file, cwd || "/");
36360        var mod = require2.modules[resolved];
36361        if (!mod) throw new Error(
36362          "Failed to resolve module " + file + ", tried " + resolved
36363        );
36364        var cached = require2.cache[resolved];
36365        var res = cached ? cached.exports : mod();
36366        return res;
36367      };
36368      require2.paths = [];
36369      require2.modules = {};
36370      require2.cache = {};
36371      require2.extensions = [".js", ".coffee", ".json"];
36372      require2._core = {
36373        "assert": true,
36374        "events": true,
36375        "fs": true,
36376        "path": true,
36377        "vm": true
36378      };
36379      require2.resolve = /* @__PURE__ */ (function() {
36380        return function(x, cwd) {
36381          if (!cwd) cwd = "/";
36382          if (require2._core[x]) return x;
36383          var path = require2.modules.path();
36384          cwd = path.resolve("/", cwd);
36385          var y = cwd || "/";
36386          if (x.match(/^(?:\.\.?\/|\/)/)) {
36387            var m = loadAsFileSync(path.resolve(y, x)) || loadAsDirectorySync(path.resolve(y, x));
36388            if (m) return m;
36389          }
36390          var n = loadNodeModulesSync(x, y);
36391          if (n) return n;
36392          throw new Error("Cannot find module '" + x + "'");
36393          function loadAsFileSync(x2) {
36394            x2 = path.normalize(x2);
36395            if (require2.modules[x2]) {
36396              return x2;
36397            }
36398            for (var i = 0; i < require2.extensions.length; i++) {
36399              var ext = require2.extensions[i];
36400              if (require2.modules[x2 + ext]) return x2 + ext;
36401            }
36402          }
36403          function loadAsDirectorySync(x2) {
36404            x2 = x2.replace(/\/+$/, "");
36405            var pkgfile = path.normalize(x2 + "/package.json");
36406            if (require2.modules[pkgfile]) {
36407              var pkg = require2.modules[pkgfile]();
36408              var b = pkg.browserify;
36409              if (typeof b === "object" && b.main) {
36410                var m2 = loadAsFileSync(path.resolve(x2, b.main));
36411                if (m2) return m2;
36412              } else if (typeof b === "string") {
36413                var m2 = loadAsFileSync(path.resolve(x2, b));
36414                if (m2) return m2;
36415              } else if (pkg.main) {
36416                var m2 = loadAsFileSync(path.resolve(x2, pkg.main));
36417                if (m2) return m2;
36418              }
36419            }
36420            return loadAsFileSync(x2 + "/index");
36421          }
36422          function loadNodeModulesSync(x2, start) {
36423            var dirs = nodeModulesPathsSync(start);
36424            for (var i = 0; i < dirs.length; i++) {
36425              var dir = dirs[i];
36426              var m2 = loadAsFileSync(dir + "/" + x2);
36427              if (m2) return m2;
36428              var n2 = loadAsDirectorySync(dir + "/" + x2);
36429              if (n2) return n2;
36430            }
36431            var m2 = loadAsFileSync(x2);
36432            if (m2) return m2;
36433          }
36434          function nodeModulesPathsSync(start) {
36435            var parts;
36436            if (start === "/") parts = [""];
36437            else parts = path.normalize(start).split("/");
36438            var dirs = [];
36439            for (var i = parts.length - 1; i >= 0; i--) {
36440              if (parts[i] === "node_modules") continue;
36441              var dir = parts.slice(0, i + 1).join("/") + "/node_modules";
36442              dirs.push(dir);
36443            }
36444            return dirs;
36445          }
36446        };
36447      })();
36448      require2.alias = function(from, to) {
36449        var path = require2.modules.path();
36450        var res = null;
36451        try {
36452          res = require2.resolve(from + "/package.json", "/");
36453        } catch (err) {
36454          res = require2.resolve(from, "/");
36455        }
36456        var basedir = path.dirname(res);
36457        var keys = (Object.keys || function(obj) {
36458          var res2 = [];
36459          for (var key2 in obj) res2.push(key2);
36460          return res2;
36461        })(require2.modules);
36462        for (var i = 0; i < keys.length; i++) {
36463          var key = keys[i];
36464          if (key.slice(0, basedir.length + 1) === basedir + "/") {
36465            var f = key.slice(basedir.length);
36466            require2.modules[to + f] = require2.modules[basedir + f];
36467          } else if (key === basedir) {
36468            require2.modules[to] = require2.modules[basedir];
36469          }
36470        }
36471      };
36472      (function() {
36473        var process = {};
36474        var global2 = typeof window !== "undefined" ? window : {};
36475        var definedProcess = false;
36476        require2.define = function(filename, fn) {
36477          if (!definedProcess && require2.modules.__browserify_process) {
36478            process = require2.modules.__browserify_process();
36479            definedProcess = true;
36480          }
36481          var dirname = require2._core[filename] ? "" : require2.modules.path().dirname(filename);
36482          var require_ = function(file) {
36483            var requiredModule = require2(file, dirname);
36484            var cached = require2.cache[require2.resolve(file, dirname)];
36485            if (cached && cached.parent === null) {
36486              cached.parent = module_;
36487            }
36488            return requiredModule;
36489          };
36490          require_.resolve = function(name) {
36491            return require2.resolve(name, dirname);
36492          };
36493          require_.modules = require2.modules;
36494          require_.define = require2.define;
36495          require_.cache = require2.cache;
36496          var module_ = {
36497            id: filename,
36498            filename,
36499            exports: {},
36500            loaded: false,
36501            parent: null
36502          };
36503          require2.modules[filename] = function() {
36504            require2.cache[filename] = module_;
36505            fn.call(
36506              module_.exports,
36507              require_,
36508              module_,
36509              module_.exports,
36510              dirname,
36511              filename,
36512              process,
36513              global2
36514            );
36515            module_.loaded = true;
36516            return module_.exports;
36517          };
36518        };
36519      })();
36520      require2.define("path", function(require3, module2, exports2, __dirname, __filename, process, global2) {
36521        function filter(xs, fn) {
36522          var res = [];
36523          for (var i = 0; i < xs.length; i++) {
36524            if (fn(xs[i], i, xs)) res.push(xs[i]);
36525          }
36526          return res;
36527        }
36528        function normalizeArray(parts, allowAboveRoot) {
36529          var up = 0;
36530          for (var i = parts.length; i >= 0; i--) {
36531            var last = parts[i];
36532            if (last == ".") {
36533              parts.splice(i, 1);
36534            } else if (last === "..") {
36535              parts.splice(i, 1);
36536              up++;
36537            } else if (up) {
36538              parts.splice(i, 1);
36539              up--;
36540            }
36541          }
36542          if (allowAboveRoot) {
36543            for (; up--; up) {
36544              parts.unshift("..");
36545            }
36546          }
36547          return parts;
36548        }
36549        var splitPathRe = /^(.+\/(?!$)|\/)?((?:.+?)?(\.[^.]*)?)$/;
36550        exports2.resolve = function() {
36551          var resolvedPath = "", resolvedAbsolute = false;
36552          for (var i = arguments.length; i >= -1 && !resolvedAbsolute; i--) {
36553            var path = i >= 0 ? arguments[i] : process.cwd();
36554            if (typeof path !== "string" || !path) {
36555              continue;
36556            }
36557            resolvedPath = path + "/" + resolvedPath;
36558            resolvedAbsolute = path.charAt(0) === "/";
36559          }
36560          resolvedPath = normalizeArray(filter(resolvedPath.split("/"), function(p) {
36561            return !!p;
36562          }), !resolvedAbsolute).join("/");
36563          return (resolvedAbsolute ? "/" : "") + resolvedPath || ".";
36564        };
36565        exports2.normalize = function(path) {
36566          var isAbsolute = path.charAt(0) === "/", trailingSlash = path.slice(-1) === "/";
36567          path = normalizeArray(filter(path.split("/"), function(p) {
36568            return !!p;
36569          }), !isAbsolute).join("/");
36570          if (!path && !isAbsolute) {
36571            path = ".";
36572          }
36573          if (path && trailingSlash) {
36574            path += "/";
36575          }
36576          return (isAbsolute ? "/" : "") + path;
36577        };
36578        exports2.join = function() {
36579          var paths = Array.prototype.slice.call(arguments, 0);
36580          return exports2.normalize(filter(paths, function(p, index) {
36581            return p && typeof p === "string";
36582          }).join("/"));
36583        };
36584        exports2.dirname = function(path) {
36585          var dir = splitPathRe.exec(path)[1] || "";
36586          var isWindows = false;
36587          if (!dir) {
36588            return ".";
36589          } else if (dir.length === 1 || isWindows && dir.length <= 3 && dir.charAt(1) === ":") {
36590            return dir;
36591          } else {
36592            return dir.substring(0, dir.length - 1);
36593          }
36594        };
36595        exports2.basename = function(path, ext) {
36596          var f = splitPathRe.exec(path)[2] || "";
36597          if (ext && f.substr(-1 * ext.length) === ext) {
36598            f = f.substr(0, f.length - ext.length);
36599          }
36600          return f;
36601        };
36602        exports2.extname = function(path) {
36603          return splitPathRe.exec(path)[3] || "";
36604        };
36605        exports2.relative = function(from, to) {
36606          from = exports2.resolve(from).substr(1);
36607          to = exports2.resolve(to).substr(1);
36608          function trim(arr) {
36609            var start = 0;
36610            for (; start < arr.length; start++) {
36611              if (arr[start] !== "") break;
36612            }
36613            var end = arr.length - 1;
36614            for (; end >= 0; end--) {
36615              if (arr[end] !== "") break;
36616            }
36617            if (start > end) return [];
36618            return arr.slice(start, end - start + 1);
36619          }
36620          var fromParts = trim(from.split("/"));
36621          var toParts = trim(to.split("/"));
36622          var length = Math.min(fromParts.length, toParts.length);
36623          var samePartsLength = length;
36624          for (var i = 0; i < length; i++) {
36625            if (fromParts[i] !== toParts[i]) {
36626              samePartsLength = i;
36627              break;
36628            }
36629          }
36630          var outputParts = [];
36631          for (var i = samePartsLength; i < fromParts.length; i++) {
36632            outputParts.push("..");
36633          }
36634          outputParts = outputParts.concat(toParts.slice(samePartsLength));
36635          return outputParts.join("/");
36636        };
36637      });
36638      require2.define("__browserify_process", function(require3, module2, exports2, __dirname, __filename, process, global2) {
36639        var process = module2.exports = {};
36640        process.nextTick = (function() {
36641          var canSetImmediate = typeof window !== "undefined" && window.setImmediate;
36642          var canPost = typeof window !== "undefined" && window.postMessage && window.addEventListener;
36643          if (canSetImmediate) {
36644            return function(f) {
36645              return window.setImmediate(f);
36646            };
36647          }
36648          if (canPost) {
36649            var queue = [];
36650            window.addEventListener("message", function(ev) {
36651              if (ev.source === window && ev.data === "browserify-tick") {
36652                ev.stopPropagation();
36653                if (queue.length > 0) {
36654                  var fn = queue.shift();
36655                  fn();
36656                }
36657              }
36658            }, true);
36659            return function nextTick(fn) {
36660              queue.push(fn);
36661              window.postMessage("browserify-tick", "*");
36662            };
36663          }
36664          return function nextTick(fn) {
36665            setTimeout(fn, 0);
36666          };
36667        })();
36668        process.title = "browser";
36669        process.browser = true;
36670        process.env = {};
36671        process.argv = [];
36672        process.binding = function(name) {
36673          if (name === "evals") return require3("vm");
36674          else throw new Error("No such module. (Possibly not yet loaded)");
36675        };
36676        (function() {
36677          var cwd = "/";
36678          var path;
36679          process.cwd = function() {
36680            return cwd;
36681          };
36682          process.chdir = function(dir) {
36683            if (!path) path = require3("path");
36684            cwd = path.resolve(dir, cwd);
36685          };
36686        })();
36687      });
36688      require2.define("/haml-coffee.coffee", function(require3, module2, exports2, __dirname, __filename, process, global2) {
36689        (function() {
36690          var Code, Comment, Directive, Filter, Haml, HamlCoffee, Node, Text, indent, whitespace;
36691          Node = require3("./nodes/node");
36692          Text = require3("./nodes/text");
36693          Haml = require3("./nodes/haml");
36694          Code = require3("./nodes/code");
36695          Comment = require3("./nodes/comment");
36696          Filter = require3("./nodes/filter");
36697          Directive = require3("./nodes/directive");
36698          whitespace = require3("./util/text").whitespace;
36699          indent = require3("./util/text").indent;
36700          module2.exports = HamlCoffee = (function() {
36701            HamlCoffee2.VERSION = "1.13.6";
36702            function HamlCoffee2(options) {
36703              var segment, segments, _base, _base1, _base10, _base11, _base12, _base13, _base2, _base3, _base4, _base5, _base6, _base7, _base8, _base9, _i, _len;
36704              this.options = options != null ? options : {};
36705              if ((_base = this.options).placement == null) {
36706                _base.placement = "global";
36707              }
36708              if ((_base1 = this.options).dependencies == null) {
36709                _base1.dependencies = {
36710                  hc: "hamlcoffee"
36711                };
36712              }
36713              if ((_base2 = this.options).escapeHtml == null) {
36714                _base2.escapeHtml = true;
36715              }
36716              if ((_base3 = this.options).escapeAttributes == null) {
36717                _base3.escapeAttributes = true;
36718              }
36719              if ((_base4 = this.options).cleanValue == null) {
36720                _base4.cleanValue = true;
36721              }
36722              if ((_base5 = this.options).uglify == null) {
36723                _base5.uglify = false;
36724              }
36725              if ((_base6 = this.options).basename == null) {
36726                _base6.basename = false;
36727              }
36728              if ((_base7 = this.options).extendScope == null) {
36729                _base7.extendScope = false;
36730              }
36731              if ((_base8 = this.options).format == null) {
36732                _base8.format = "html5";
36733              }
36734              if ((_base9 = this.options).hyphenateDataAttrs == null) {
36735                _base9.hyphenateDataAttrs = true;
36736              }
36737              if ((_base10 = this.options).preserveTags == null) {
36738                _base10.preserveTags = "pre,textarea";
36739              }
36740              if ((_base11 = this.options).selfCloseTags == null) {
36741                _base11.selfCloseTags = "meta,img,link,br,hr,input,area,param,col,base";
36742              }
36743              if (this.options.placement === "global") {
36744                if ((_base12 = this.options).name == null) {
36745                  _base12.name = "test";
36746                }
36747                if ((_base13 = this.options).namespace == null) {
36748                  _base13.namespace = "window.HAML";
36749                }
36750                segments = ("" + this.options.namespace + "." + this.options.name).replace(/(\s|-)+/g, "_").split(/\./);
36751                this.options.name = this.options.basename ? segments.pop().split(/\/|\\/).pop() : segments.pop();
36752                this.options.namespace = segments.shift();
36753                this.intro = "";
36754                if (segments.length !== 0) {
36755                  for (_i = 0, _len = segments.length; _i < _len; _i++) {
36756                    segment = segments[_i];
36757                    this.options.namespace += "." + segment;
36758                    this.intro += "" + this.options.namespace + " ?= {}\n";
36759                  }
36760                } else {
36761                  this.intro += "" + this.options.namespace + " ?= {}\n";
36762                }
36763              }
36764            }
36765            HamlCoffee2.prototype.indentChanged = function() {
36766              return this.currentIndent !== this.previousIndent;
36767            };
36768            HamlCoffee2.prototype.isIndent = function() {
36769              return this.currentIndent > this.previousIndent;
36770            };
36771            HamlCoffee2.prototype.updateTabSize = function() {
36772              if (this.tabSize === 0) {
36773                return this.tabSize = this.currentIndent - this.previousIndent;
36774              }
36775            };
36776            HamlCoffee2.prototype.updateBlockLevel = function() {
36777              this.currentBlockLevel = this.currentIndent / this.tabSize;
36778              if (!this.node.isCommented()) {
36779                if (this.currentBlockLevel - Math.floor(this.currentBlockLevel) > 0) {
36780                  throw "Indentation error in line " + this.lineNumber;
36781                }
36782                if ((this.currentIndent - this.previousIndent) / this.tabSize > 1) {
36783                  throw "Block level too deep in line " + this.lineNumber;
36784                }
36785              }
36786              return this.delta = this.previousBlockLevel - this.currentBlockLevel;
36787            };
36788            HamlCoffee2.prototype.updateCodeBlockLevel = function(node) {
36789              if (node instanceof Code) {
36790                return this.currentCodeBlockLevel = node.codeBlockLevel + 1;
36791              } else {
36792                return this.currentCodeBlockLevel = node.codeBlockLevel;
36793              }
36794            };
36795            HamlCoffee2.prototype.updateParent = function() {
36796              if (this.isIndent()) {
36797                return this.pushParent();
36798              } else {
36799                return this.popParent();
36800              }
36801            };
36802            HamlCoffee2.prototype.pushParent = function() {
36803              this.stack.push(this.parentNode);
36804              return this.parentNode = this.node;
36805            };
36806            HamlCoffee2.prototype.popParent = function() {
36807              var i, _i, _ref, _results;
36808              _results = [];
36809              for (i = _i = 0, _ref = this.delta - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) {
36810                _results.push(this.parentNode = this.stack.pop());
36811              }
36812              return _results;
36813            };
36814            HamlCoffee2.prototype.getNodeOptions = function(override) {
36815              if (override == null) {
36816                override = {};
36817              }
36818              return {
36819                parentNode: override.parentNode || this.parentNode,
36820                blockLevel: override.blockLevel || this.currentBlockLevel,
36821                codeBlockLevel: override.codeBlockLevel || this.currentCodeBlockLevel,
36822                escapeHtml: override.escapeHtml || this.options.escapeHtml,
36823                escapeAttributes: override.escapeAttributes || this.options.escapeAttributes,
36824                cleanValue: override.cleanValue || this.options.cleanValue,
36825                format: override.format || this.options.format,
36826                hyphenateDataAttrs: override.hyphenateDataAttrs || this.options.format,
36827                preserveTags: override.preserveTags || this.options.preserveTags,
36828                selfCloseTags: override.selfCloseTags || this.options.selfCloseTags,
36829                uglify: override.uglify || this.options.uglify,
36830                placement: override.placement || this.options.placement,
36831                namespace: override.namespace || this.options.namespace,
36832                name: override.name || this.options.name
36833              };
36834            };
36835            HamlCoffee2.prototype.nodeFactory = function(expression) {
36836              var node, options, _ref;
36837              if (expression == null) {
36838                expression = "";
36839              }
36840              options = this.getNodeOptions();
36841              if (expression.match(/^:(escaped|preserve|css|javascript|plain|cdata|coffeescript)/)) {
36842                node = new Filter(expression, options);
36843              } else if (expression.match(/^(\/|-#)(.*)/)) {
36844                node = new Comment(expression, options);
36845              } else if (expression.match(/^(-#|-|=|!=|\&=|~)\s*(.*)/)) {
36846                node = new Code(expression, options);
36847              } else if (expression.match(/^(%|#[^{]|\.|\!)(.*)/)) {
36848                node = new Haml(expression, options);
36849              } else if (expression.match(/^\+(.*)/)) {
36850                node = new Directive(expression, options);
36851              } else {
36852                node = new Text(expression, options);
36853              }
36854              if ((_ref = options.parentNode) != null) {
36855                _ref.addChild(node);
36856              }
36857              return node;
36858            };
36859            HamlCoffee2.prototype.parse = function(source) {
36860              var attributes, expression, line, lines, range, result, tabsize, text, ws, _i, _j, _len, _ref, _ref1, _results;
36861              if (source == null) {
36862                source = "";
36863              }
36864              this.lineNumber = this.previousIndent = this.tabSize = this.currentBlockLevel = this.previousBlockLevel = 0;
36865              this.currentCodeBlockLevel = this.previousCodeBlockLevel = 0;
36866              this.node = null;
36867              this.stack = [];
36868              this.root = this.parentNode = new Node("", this.getNodeOptions());
36869              lines = source.replace(/\r/g, "").split("\n");
36870              while ((line = lines.shift()) !== void 0) {
36871                if (this.node instanceof Filter && !this.exitFilter) {
36872                  if (/^(\s)*$/.test(line)) {
36873                    this.node.addChild(new Text("", this.getNodeOptions({
36874                      parentNode: this.node
36875                    })));
36876                  } else {
36877                    result = line.match(/^(\s*)(.*)/);
36878                    ws = result[1];
36879                    expression = result[2];
36880                    if (this.node.blockLevel >= ws.length / 2) {
36881                      this.exitFilter = true;
36882                      lines.unshift(line);
36883                      continue;
36884                    }
36885                    range = this.tabSize > 2 ? (function() {
36886                      _results = [];
36887                      for (var _i2 = _ref = this.tabSize; _ref <= 1 ? _i2 <= 1 : _i2 >= 1; _ref <= 1 ? _i2++ : _i2--) {
36888                        _results.push(_i2);
36889                      }
36890                      return _results;
36891                    }).apply(this) : [2, 1];
36892                    for (_j = 0, _len = range.length; _j < _len; _j++) {
36893                      tabsize = range[_j];
36894                      text = line.match(RegExp("^\\s{" + (this.node.blockLevel * tabsize + tabsize) + "}(.*)"));
36895                      if (text) {
36896                        this.node.addChild(new Text(text[1], this.getNodeOptions({
36897                          parentNode: this.node
36898                        })));
36899                        break;
36900                      }
36901                    }
36902                  }
36903                } else {
36904                  this.exitFilter = false;
36905                  result = line.match(/^(\s*)(.*)/);
36906                  ws = result[1];
36907                  expression = result[2];
36908                  this.currentIndent = ws.length;
36909                  if (/^\s*$/.test(line)) {
36910                    continue;
36911                  }
36912                  while (/^[%.#].*[{(]/.test(expression) && RegExp("^\\s{" + (this.previousIndent + (this.tabSize || 2)) + "}").test(lines[0]) && !/^(\s*)[-=&!~.%#</]/.test(lines[0]) && /([-\w]+[\w:-]*\w?)\s*=|('\w+[\w:-]*\w?')\s*=|("\w+[\w:-]*\w?")\s*=|(\w+[\w:-]*\w?):|('[-\w]+[\w:-]*\w?'):|("[-\w]+[\w:-]*\w?"):|:(\w+[\w:-]*\w?)\s*=>|:?'([-\w]+[\w:-]*\w?)'\s*=>|:?"([-\w]+[\w:-]*\w?)"\s*=>/.test(lines[0]) && !/;\s*$/.test(lines[0])) {
36913                    attributes = lines.shift();
36914                    expression = expression.replace(/(\s)+\|\s*$/, "");
36915                    expression += " " + attributes.match(/^\s*(.*?)(\s+\|\s*)?$/)[1];
36916                    this.lineNumber++;
36917                  }
36918                  while (/^-#/.test(expression) && RegExp("^\\s{" + (this.currentIndent + (this.tabSize || 2)) + "}").test(lines[0]) && lines.length > 0) {
36919                    lines.shift();
36920                    this.lineNumber++;
36921                  }
36922                  if (expression.match(/(\s)+\|\s*$/)) {
36923                    expression = expression.replace(/(\s)+\|\s*$/, " ");
36924                    while ((_ref1 = lines[0]) != null ? _ref1.match(/(\s)+\|$/) : void 0) {
36925                      expression += lines.shift().match(/^(\s*)(.*)/)[2].replace(/(\s)+\|\s*$/, "");
36926                      this.lineNumber++;
36927                    }
36928                  }
36929                  if (this.indentChanged()) {
36930                    this.updateTabSize();
36931                    this.updateBlockLevel();
36932                    this.updateParent();
36933                    this.updateCodeBlockLevel(this.parentNode);
36934                  }
36935                  this.node = this.nodeFactory(expression);
36936                  this.previousBlockLevel = this.currentBlockLevel;
36937                  this.previousIndent = this.currentIndent;
36938                }
36939                this.lineNumber++;
36940              }
36941              return this.evaluate(this.root);
36942            };
36943            HamlCoffee2.prototype.evaluate = function(node) {
36944              var child, _i, _len, _ref;
36945              _ref = node.children;
36946              for (_i = 0, _len = _ref.length; _i < _len; _i++) {
36947                child = _ref[_i];
36948                this.evaluate(child);
36949              }
36950              return node.evaluate();
36951            };
36952            HamlCoffee2.prototype.render = function() {
36953              switch (this.options.placement) {
36954                case "amd":
36955                  return this.renderAmd();
36956                case "standalone":
36957                  return this.renderStandalone();
36958                default:
36959                  return this.renderGlobal();
36960              }
36961            };
36962            HamlCoffee2.prototype.renderStandalone = function() {
36963              var template;
36964              return template = "return (context) ->\n  (->\n" + indent(this.precompile(), 2) + "\n  ).call(context)";
36965            };
36966            HamlCoffee2.prototype.renderAmd = function() {
36967              var m, module3, modules, param, params, template, _ref, _ref1;
36968              if (/^hamlcoffee/.test(this.options.dependencies["hc"])) {
36969                this.options.customHtmlEscape = "hc.escape";
36970                this.options.customCleanValue = "hc.cleanValue";
36971                this.options.customPreserve = "hc.preserve";
36972                this.options.customFindAndPreserve = "hc.findAndPreserve";
36973                this.options.customSurround = "hc.surround";
36974                this.options.customSucceed = "hc.succeed";
36975                this.options.customPrecede = "hc.precede";
36976                this.options.customReference = "hc.reference";
36977              }
36978              modules = [];
36979              params = [];
36980              _ref = this.options.dependencies;
36981              for (param in _ref) {
36982                module3 = _ref[param];
36983                modules.push(module3);
36984                params.push(param);
36985              }
36986              template = indent(this.precompile(), 4);
36987              _ref1 = this.findDependencies(template);
36988              for (param in _ref1) {
36989                module3 = _ref1[param];
36990                modules.push(module3);
36991                params.push(param);
36992              }
36993              if (modules.length !== 0) {
36994                modules = (function() {
36995                  var _i, _len, _results;
36996                  _results = [];
36997                  for (_i = 0, _len = modules.length; _i < _len; _i++) {
36998                    m = modules[_i];
36999                    _results.push("'" + m + "'");
37000                  }
37001                  return _results;
37002                })();
37003                modules = "[" + modules + "], (" + params.join(", ") + ")";
37004              } else {
37005                modules = "";
37006              }
37007              return "define " + modules + " ->\n  (context) ->\n    render = ->\n      \n" + template + "\n    render.call(context)";
37008            };
37009            HamlCoffee2.prototype.renderGlobal = function() {
37010              var template;
37011              template = this.intro;
37012              if (this.options.extendScope) {
37013                template += "" + this.options.namespace + "['" + this.options.name + "'] = (context) -> ( ->\n";
37014                template += "  `with (context || {}) {`\n";
37015                template += "" + indent(this.precompile(), 1);
37016                template += "`}`\n";
37017                template += ").call(context)";
37018              } else {
37019                template += "" + this.options.namespace + "['" + this.options.name + "'] = (context) -> ( ->\n";
37020                template += "" + indent(this.precompile(), 1);
37021                template += ").call(context)";
37022              }
37023              return template;
37024            };
37025            HamlCoffee2.prototype.precompile = function() {
37026              var code, fn;
37027              fn = "";
37028              code = this.createCode();
37029              if (code.indexOf("$e") !== -1) {
37030                if (this.options.customHtmlEscape) {
37031                  fn += "$e = " + this.options.customHtmlEscape + "\n";
37032                } else {
37033                  fn += `$e = (text, escape) ->
37034  "#{ text }"
37035  .replace(/&/g, '&amp;')
37036  .replace(/</g, '&lt;')
37037  .replace(/>/g, '&gt;')
37038  .replace(/'/g, '&#39;')
37039  .replace(/\\//g, '&#47;')
37040  .replace(/"/g, '&quot;')
37041`;
37042                }
37043              }
37044              if (code.indexOf("$c") !== -1) {
37045                if (this.options.customCleanValue) {
37046                  fn += "$c = " + this.options.customCleanValue + "\n";
37047                } else {
37048                  fn += "$c = (text) ->\n";
37049                  fn += "   switch text\n";
37050                  fn += "     when null, undefined then ''\n";
37051                  fn += "     when true, false then '\x93' + text\n";
37052                  fn += "     else text\n";
37053                }
37054              }
37055              if (code.indexOf("$p") !== -1 || code.indexOf("$fp") !== -1) {
37056                if (this.options.customPreserve) {
37057                  fn += "$p = " + this.options.customPreserve + "\n";
37058                } else {
37059                  fn += "$p = (text) -> text.replace /\\n/g, '&#x000A;'\n";
37060                }
37061              }
37062              if (code.indexOf("$fp") !== -1) {
37063                if (this.options.customFindAndPreserve) {
37064                  fn += "$fp = " + this.options.customFindAndPreserve + "\n";
37065                } else {
37066                  fn += "$fp = (text) ->\n  text.replace /<(" + this.options.preserveTags.split(",").join("|") + ')>([^]*?)<\\/\\1>/g, (str, tag, content) ->\n    "<#{ tag }>#{ $p content }</#{ tag }>"\n';
37067                }
37068              }
37069              if (code.indexOf("surround") !== -1) {
37070                if (this.options.customSurround) {
37071                  fn += "surround = (start, end, fn) => " + this.options.customSurround + ".call(@, start, end, fn)\n";
37072                } else {
37073                  fn += "surround = (start, end, fn) => start + fn.call(@)?.replace(/^\\s+|\\s+$/g, '') + end\n";
37074                }
37075              }
37076              if (code.indexOf("succeed") !== -1) {
37077                if (this.options.customSucceed) {
37078                  fn += "succeed = (start, end, fn) => " + this.options.customSucceed + ".call(@, start, end, fn)\n";
37079                } else {
37080                  fn += "succeed = (end, fn) => fn.call(@)?.replace(/s+$/g, '') + end\n";
37081                }
37082              }
37083              if (code.indexOf("precede") !== -1) {
37084                if (this.options.customPrecede) {
37085                  fn += "precede = (start, end, fn) => " + this.options.customPrecede + ".call(@, start, end, fn)\n";
37086                } else {
37087                  fn += "precede = (start, fn) => start + fn.call(@)?.replace(/^s+/g, '')\n";
37088                }
37089              }
37090              if (code.indexOf("$r") !== -1) {
37091                if (this.options.customReference) {
37092                  fn += "$r = " + this.options.customReference + "\n";
37093                } else {
37094                  fn += `$r = (object, prefix) ->
37095  name = if prefix then prefix + '_' else ''
37096
37097  if typeof(object.hamlObjectRef) is 'function'
37098    name += object.hamlObjectRef()
37099  else
37100    name += (object.constructor?.name || 'object').replace(/W+/g, '_').replace(/([a-zd])([A-Z])/g, '$1_$2').toLowerCase()
37101
37102  id = if typeof(object.to_key) is 'function'
37103         object.to_key()
37104       else if typeof(object.id) is 'function'
37105         object.id()
37106       else if object.id
37107         object.id
37108      else
37109        object
37110
37111  result  = "class='#{ name }'"
37112  result += " id='#{ name }_#{ id }'" if id
37113`;
37114                }
37115              }
37116              fn += "$o = []\n";
37117              fn += "" + code + "\n";
37118              return fn += 'return $o.join("\\n")' + this.convertBooleans(code) + this.removeEmptyIDAndClass(code) + this.cleanupWhitespace(code) + "\n";
37119            };
37120            HamlCoffee2.prototype.createCode = function() {
37121              var child, code, line, processors, _i, _j, _len, _len1, _ref, _ref1;
37122              code = [];
37123              this.lines = [];
37124              _ref = this.root.children;
37125              for (_i = 0, _len = _ref.length; _i < _len; _i++) {
37126                child = _ref[_i];
37127                this.lines = this.lines.concat(child.render());
37128              }
37129              this.lines = this.combineText(this.lines);
37130              this.blockLevel = 0;
37131              _ref1 = this.lines;
37132              for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
37133                line = _ref1[_j];
37134                if (line !== null) {
37135                  switch (line.type) {
37136                    case "text":
37137                      code.push("" + whitespace(line.cw) + this.getBuffer(this.blockLevel) + '.push "' + whitespace(line.hw) + line.text + '"');
37138                      break;
37139                    case "run":
37140                      if (line.block !== "end") {
37141                        code.push("" + whitespace(line.cw) + line.code);
37142                      } else {
37143                        code.push("" + whitespace(line.cw) + line.code.replace("$buffer", this.getBuffer(this.blockLevel)));
37144                        this.blockLevel -= 1;
37145                      }
37146                      break;
37147                    case "insert":
37148                      processors = "";
37149                      if (line.findAndPreserve) {
37150                        processors += "$fp ";
37151                      }
37152                      if (line.preserve) {
37153                        processors += "$p ";
37154                      }
37155                      if (line.escape) {
37156                        processors += "$e ";
37157                      }
37158                      if (this.options.cleanValue) {
37159                        processors += "$c ";
37160                      }
37161                      code.push("" + whitespace(line.cw) + this.getBuffer(this.blockLevel) + '.push "' + whitespace(line.hw) + '" + ' + processors + line.code);
37162                      if (line.block === "start") {
37163                        this.blockLevel += 1;
37164                        code.push("" + whitespace(line.cw + 1) + this.getBuffer(this.blockLevel) + " = []");
37165                      }
37166                  }
37167                }
37168              }
37169              return code.join("\n");
37170            };
37171            HamlCoffee2.prototype.getBuffer = function(level) {
37172              if (level > 0) {
37173                return "$o" + level;
37174              } else {
37175                return "$o";
37176              }
37177            };
37178            HamlCoffee2.prototype.combineText = function(lines) {
37179              var combined, line, nextLine;
37180              combined = [];
37181              while ((line = lines.shift()) !== void 0) {
37182                if (line.type === "text") {
37183                  while (lines[0] && lines[0].type === "text" && line.cw === lines[0].cw) {
37184                    nextLine = lines.shift();
37185                    line.text += "\\n" + whitespace(nextLine.hw) + nextLine.text;
37186                  }
37187                }
37188                combined.push(line);
37189              }
37190              return combined;
37191            };
37192            HamlCoffee2.prototype.convertBooleans = function(code) {
37193              if (code.indexOf("$c") !== -1) {
37194                if (this.options.format === "xhtml") {
37195                  return `.replace(/\\s([\\w-]+)='\x93true'/mg, " $1='$1'").replace(/\\s([\\w-]+)='\x93false'/mg, '')`;
37196                } else {
37197                  return ".replace(/\\s([\\w-]+)='\x93true'/mg, ' $1').replace(/\\s([\\w-]+)='\x93false'/mg, '')";
37198                }
37199              } else {
37200                return "";
37201              }
37202            };
37203            HamlCoffee2.prototype.removeEmptyIDAndClass = function(code) {
37204              if (code.indexOf("id=") !== -1 || code.indexOf("class=") !== -1) {
37205                return `.replace(/\\s(?:id|class)=(['"])(\\1)/mg, "")`;
37206              } else {
37207                return "";
37208              }
37209            };
37210            HamlCoffee2.prototype.cleanupWhitespace = function(code) {
37211              if (/\u0091|\u0092/.test(code)) {
37212                return ".replace(/[\\s\\n]*\\u0091/mg, '').replace(/\\u0092[\\s\\n]*/mg, '')";
37213              } else {
37214                return "";
37215              }
37216            };
37217            HamlCoffee2.prototype.findDependencies = function(code) {
37218              var dependencies, match, module3, name, requireRegexp;
37219              requireRegexp = /require(?:\s+|\()(['"])(.+?)(\1)\)?/gm;
37220              dependencies = {};
37221              while (match = requireRegexp.exec(code)) {
37222                module3 = match[2];
37223                name = module3.split("/").pop();
37224                dependencies[name] = module3;
37225              }
37226              return dependencies;
37227            };
37228            return HamlCoffee2;
37229          })();
37230        }).call(this);
37231      });
37232      require2.define("/nodes/node.coffee", function(require3, module2, exports2, __dirname, __filename, process, global2) {
37233        (function() {
37234          var Node, escapeHTML;
37235          escapeHTML = require3("../util/text").escapeHTML;
37236          module2.exports = Node = (function() {
37237            Node2.CLEAR_WHITESPACE_LEFT = "\x91";
37238            Node2.CLEAR_WHITESPACE_RIGHT = "\x92";
37239            function Node2(expression, options) {
37240              this.expression = expression != null ? expression : "";
37241              if (options == null) {
37242                options = {};
37243              }
37244              this.parentNode = options.parentNode;
37245              this.children = [];
37246              this.opener = this.closer = null;
37247              this.silent = false;
37248              this.preserveTags = options.preserveTags.split(",");
37249              this.preserve = false;
37250              this.wsRemoval = {
37251                around: false,
37252                inside: false
37253              };
37254              this.escapeHtml = options.escapeHtml;
37255              this.escapeAttributes = options.escapeAttributes;
37256              this.cleanValue = options.cleanValue;
37257              this.format = options.format;
37258              this.hyphenateDataAttrs = options.hyphenateDataAttrs;
37259              this.selfCloseTags = options.selfCloseTags.split(",");
37260              this.uglify = options.uglify;
37261              this.codeBlockLevel = options.codeBlockLevel;
37262              this.blockLevel = options.blockLevel;
37263              this.placement = options.placement;
37264              this.namespace = options.namespace;
37265              this.name = options.name;
37266            }
37267            Node2.prototype.addChild = function(child) {
37268              this.children.push(child);
37269              return this;
37270            };
37271            Node2.prototype.getOpener = function() {
37272              if (this.wsRemoval.around && this.opener.text) {
37273                this.opener.text = Node2.CLEAR_WHITESPACE_LEFT + this.opener.text;
37274              }
37275              if (this.wsRemoval.inside && this.opener.text) {
37276                this.opener.text += Node2.CLEAR_WHITESPACE_RIGHT;
37277              }
37278              return this.opener;
37279            };
37280            Node2.prototype.getCloser = function() {
37281              if (this.wsRemoval.inside && this.closer.text) {
37282                this.closer.text = Node2.CLEAR_WHITESPACE_LEFT + this.closer.text;
37283              }
37284              if (this.wsRemoval.around && this.closer.text) {
37285                this.closer.text += Node2.CLEAR_WHITESPACE_RIGHT;
37286              }
37287              return this.closer;
37288            };
37289            Node2.prototype.isPreserved = function() {
37290              if (this.preserve) {
37291                return true;
37292              }
37293              if (this.parentNode) {
37294                return this.parentNode.isPreserved();
37295              } else {
37296                return false;
37297              }
37298            };
37299            Node2.prototype.isCommented = function() {
37300              if (this.constructor.name === "Comment") {
37301                return true;
37302              }
37303              if (this.parentNode) {
37304                return this.parentNode.isCommented();
37305              } else {
37306                return false;
37307              }
37308            };
37309            Node2.prototype.markText = function(text, escape2) {
37310              if (escape2 == null) {
37311                escape2 = false;
37312              }
37313              return {
37314                type: "text",
37315                cw: this.codeBlockLevel,
37316                hw: this.uglify ? 0 : this.blockLevel - this.codeBlockLevel,
37317                text: escape2 ? escapeHTML(text) : text
37318              };
37319            };
37320            Node2.prototype.markRunningCode = function(code) {
37321              return {
37322                type: "run",
37323                cw: this.codeBlockLevel,
37324                code
37325              };
37326            };
37327            Node2.prototype.markInsertingCode = function(code, escape2, preserve, findAndPreserve) {
37328              if (escape2 == null) {
37329                escape2 = false;
37330              }
37331              if (preserve == null) {
37332                preserve = false;
37333              }
37334              if (findAndPreserve == null) {
37335                findAndPreserve = false;
37336              }
37337              return {
37338                type: "insert",
37339                cw: this.codeBlockLevel,
37340                hw: this.uglify ? 0 : this.blockLevel - this.codeBlockLevel,
37341                escape: escape2,
37342                preserve,
37343                findAndPreserve,
37344                code
37345              };
37346            };
37347            Node2.prototype.evaluate = function() {
37348            };
37349            Node2.prototype.render = function() {
37350              var child, output, rendered, tag, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _m, _ref, _ref1, _ref2, _ref3, _ref4;
37351              output = [];
37352              if (this.silent) {
37353                return output;
37354              }
37355              if (this.children.length === 0) {
37356                if (this.opener && this.closer) {
37357                  tag = this.getOpener();
37358                  tag.text += this.getCloser().text;
37359                  output.push(tag);
37360                } else {
37361                  if (!this.preserve && this.isPreserved()) {
37362                    output.push(this.getOpener());
37363                  } else {
37364                    output.push(this.getOpener());
37365                  }
37366                }
37367              } else {
37368                if (this.opener && this.closer) {
37369                  if (this.preserve) {
37370                    this.wsRemoval.inside = true;
37371                    output.push(this.getOpener());
37372                    _ref = this.children;
37373                    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
37374                      child = _ref[_i];
37375                      _ref1 = child.render();
37376                      for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
37377                        rendered = _ref1[_j];
37378                        rendered.hw = this.blockLevel;
37379                        output.push(rendered);
37380                      }
37381                    }
37382                    output.push(this.getCloser());
37383                  } else {
37384                    output.push(this.getOpener());
37385                    _ref2 = this.children;
37386                    for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {
37387                      child = _ref2[_k];
37388                      output = output.concat(child.render());
37389                    }
37390                    output.push(this.getCloser());
37391                  }
37392                } else if (this.opener) {
37393                  output.push(this.getOpener());
37394                  _ref3 = this.children;
37395                  for (_l = 0, _len3 = _ref3.length; _l < _len3; _l++) {
37396                    child = _ref3[_l];
37397                    output = output.concat(child.render());
37398                  }
37399                } else {
37400                  _ref4 = this.children;
37401                  for (_m = 0, _len4 = _ref4.length; _m < _len4; _m++) {
37402                    child = _ref4[_m];
37403                    output.push(this.markText(child.render().text));
37404                  }
37405                }
37406              }
37407              return output;
37408            };
37409            return Node2;
37410          })();
37411        }).call(this);
37412      });
37413      require2.define("/util/text.coffee", function(require3, module2, exports2, __dirname, __filename, process, global2) {
37414        (function() {
37415          module2.exports = {
37416            whitespace: function(n) {
37417              var a;
37418              n = n * 2;
37419              a = [];
37420              while (a.length < n) {
37421                a.push(" ");
37422              }
37423              return a.join("");
37424            },
37425            escapeQuotes: function(text) {
37426              if (!text) {
37427                return "";
37428              }
37429              return text.replace(/"/g, '\\"').replace(/\\\\\"/g, '\\"');
37430            },
37431            unescapeQuotes: function(text) {
37432              if (!text) {
37433                return "";
37434              }
37435              return text.replace(/\\"/g, '"');
37436            },
37437            escapeHTML: function(text) {
37438              if (!text) {
37439                return "";
37440              }
37441              return text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/\"/g, "&quot;");
37442            },
37443            preserve: function(code) {
37444              if (code) {
37445                code.replace(/\r/g, "");
37446                return code.replace(/<(pre|textarea)>(.*?)<\/\1>/g, function(text) {
37447                  return text.replace("\\n", "&#x000A;");
37448                });
37449              }
37450            },
37451            indent: function(text, spaces) {
37452              return text.replace(/^(.*)$/mg, module2.exports.whitespace(spaces) + "$1");
37453            }
37454          };
37455        }).call(this);
37456      });
37457      require2.define("/nodes/text.coffee", function(require3, module2, exports2, __dirname, __filename, process, global2) {
37458        (function() {
37459          var Node, Text, escapeQuotes, _ref, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) {
37460            for (var key in parent) {
37461              if (__hasProp.call(parent, key)) child[key] = parent[key];
37462            }
37463            function ctor() {
37464              this.constructor = child;
37465            }
37466            ctor.prototype = parent.prototype;
37467            child.prototype = new ctor();
37468            child.__super__ = parent.prototype;
37469            return child;
37470          };
37471          Node = require3("./node");
37472          escapeQuotes = require3("../util/text").escapeQuotes;
37473          module2.exports = Text = (function(_super) {
37474            __extends(Text2, _super);
37475            function Text2() {
37476              _ref = Text2.__super__.constructor.apply(this, arguments);
37477              return _ref;
37478            }
37479            Text2.prototype.evaluate = function() {
37480              return this.opener = this.markText(escapeQuotes(this.expression));
37481            };
37482            return Text2;
37483          })(Node);
37484        }).call(this);
37485      });
37486      require2.define("/nodes/haml.coffee", function(require3, module2, exports2, __dirname, __filename, process, global2) {
37487        (function() {
37488          var Haml, Node, escapeQuotes, _ref, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) {
37489            for (var key in parent) {
37490              if (__hasProp.call(parent, key)) child[key] = parent[key];
37491            }
37492            function ctor() {
37493              this.constructor = child;
37494            }
37495            ctor.prototype = parent.prototype;
37496            child.prototype = new ctor();
37497            child.__super__ = parent.prototype;
37498            return child;
37499          };
37500          Node = require3("./node");
37501          escapeQuotes = require3("../util/text").escapeQuotes;
37502          module2.exports = Haml = (function(_super) {
37503            __extends(Haml2, _super);
37504            function Haml2() {
37505              _ref = Haml2.__super__.constructor.apply(this, arguments);
37506              return _ref;
37507            }
37508            Haml2.prototype.evaluate = function() {
37509              var assignment, code, identifier, match, prefix, tokens;
37510              tokens = this.parseExpression(this.expression);
37511              if (tokens.doctype) {
37512                return this.opener = this.markText("" + escapeQuotes(this.buildDocType(tokens.doctype)));
37513              } else {
37514                if (this.isNotSelfClosing(tokens.tag)) {
37515                  prefix = this.buildHtmlTagPrefix(tokens);
37516                  if (tokens.assignment) {
37517                    match = tokens.assignment.match(/^(=|!=|&=|~)\s*(.*)$/);
37518                    identifier = match[1];
37519                    assignment = match[2];
37520                    if (identifier === "~") {
37521                      code = "#{$fp " + assignment + " }";
37522                    } else if (identifier === "&=" || identifier === "=" && this.escapeHtml) {
37523                      if (this.preserve) {
37524                        if (this.cleanValue) {
37525                          code = "#{ $p($e($c(" + assignment + "))) }";
37526                        } else {
37527                          code = "#{ $p($e(" + assignment + ")) }";
37528                        }
37529                      } else {
37530                        if (this.cleanValue) {
37531                          code = "#{ $e($c(" + assignment + ")) }";
37532                        } else {
37533                          code = "#{ $e(" + assignment + ") }";
37534                        }
37535                      }
37536                    } else if (identifier === "!=" || identifier === "=" && !this.escapeHtml) {
37537                      if (this.preserve) {
37538                        if (this.cleanValue) {
37539                          code = "#{ $p($c(" + assignment + ")) }";
37540                        } else {
37541                          code = "#{ $p(" + assignment + ") }";
37542                        }
37543                      } else {
37544                        if (this.cleanValue) {
37545                          code = "#{ $c(" + assignment + ") }";
37546                        } else {
37547                          code = "#{ " + assignment + " }";
37548                        }
37549                      }
37550                    }
37551                    this.opener = this.markText("" + prefix + ">" + code);
37552                    return this.closer = this.markText("</" + tokens.tag + ">");
37553                  } else if (tokens.text) {
37554                    this.opener = this.markText("" + prefix + ">" + tokens.text);
37555                    return this.closer = this.markText("</" + tokens.tag + ">");
37556                  } else {
37557                    this.opener = this.markText(prefix + ">");
37558                    return this.closer = this.markText("</" + tokens.tag + ">");
37559                  }
37560                } else {
37561                  tokens.tag = tokens.tag.replace(/\/$/, "");
37562                  prefix = this.buildHtmlTagPrefix(tokens);
37563                  if (tokens.text) {
37564                    this.opener = this.markText("" + prefix + ">" + tokens.text);
37565                    return this.closer = this.markText("</" + tokens.tag + ">");
37566                  } else {
37567                    return this.opener = this.markText("" + prefix + (this.format === "xhtml" ? " /" : "") + ">" + tokens.text);
37568                  }
37569                }
37570              }
37571            };
37572            Haml2.prototype.parseExpression = function(exp) {
37573              var attributes, classes, id, key, tag, value, _ref1, _ref2;
37574              tag = this.parseTag(exp);
37575              if (this.preserveTags.indexOf(tag.tag) !== -1) {
37576                this.preserve = true;
37577              }
37578              id = this.interpolateCodeAttribute((_ref1 = tag.ids) != null ? _ref1.pop() : void 0, true);
37579              classes = tag.classes;
37580              attributes = {};
37581              if (tag.attributes) {
37582                _ref2 = tag.attributes;
37583                for (key in _ref2) {
37584                  value = _ref2[key];
37585                  if (key === "id") {
37586                    if (id) {
37587                      id += "_" + this.interpolateCodeAttribute(value, true);
37588                    } else {
37589                      id = this.interpolateCodeAttribute(value, true);
37590                    }
37591                  } else if (key === "class") {
37592                    classes || (classes = []);
37593                    classes.push(value);
37594                  } else {
37595                    attributes[key] = value;
37596                  }
37597                }
37598              }
37599              return {
37600                doctype: tag.doctype,
37601                tag: tag.tag,
37602                id,
37603                classes,
37604                text: escapeQuotes(tag.text),
37605                attributes,
37606                assignment: tag.assignment,
37607                reference: tag.reference
37608              };
37609            };
37610            Haml2.prototype.parseTag = function(exp) {
37611              var assignment, attr, attributes, ch, classes, doctype, end, error, haml, htmlAttributes, id, ids, key, klass, level, pos, reference, rest, rubyAttributes, start, tag, text, val, whitespace, _i, _j, _k, _len, _len1, _ref1, _ref2, _ref3, _ref4, _ref5;
37612              try {
37613                doctype = (_ref1 = exp.match(/^(\!{3}.*)/)) != null ? _ref1[1] : void 0;
37614                if (doctype) {
37615                  return {
37616                    doctype
37617                  };
37618                }
37619                haml = exp.match(/^((?:[#%\.][a-z0-9_:\-]*[\/]?)+)/i)[0];
37620                rest = exp.substring(haml.length);
37621                if (rest.match(/^[{([]/)) {
37622                  reference = "";
37623                  htmlAttributes = "";
37624                  rubyAttributes = "";
37625                  _ref2 = ["[", "{", "(", "[", "{", "("];
37626                  for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
37627                    start = _ref2[_i];
37628                    if (start === rest[0]) {
37629                      end = (function() {
37630                        switch (start) {
37631                          case "{":
37632                            return "}";
37633                          case "(":
37634                            return ")";
37635                          case "[":
37636                            return "]";
37637                        }
37638                      })();
37639                      level = 0;
37640                      for (pos = _j = 0, _ref3 = rest.length; 0 <= _ref3 ? _j <= _ref3 : _j >= _ref3; pos = 0 <= _ref3 ? ++_j : --_j) {
37641                        ch = rest[pos];
37642                        if (ch === start) {
37643                          level += 1;
37644                        }
37645                        if (ch === end) {
37646                          if (level === 1) {
37647                            break;
37648                          } else {
37649                            level -= 1;
37650                          }
37651                        }
37652                      }
37653                      switch (start) {
37654                        case "{":
37655                          rubyAttributes += rest.substring(0, pos + 1);
37656                          rest = rest.substring(pos + 1);
37657                          break;
37658                        case "(":
37659                          htmlAttributes += rest.substring(0, pos + 1);
37660                          rest = rest.substring(pos + 1);
37661                          break;
37662                        case "[":
37663                          reference = rest.substring(1, pos);
37664                          rest = rest.substring(pos + 1);
37665                      }
37666                    }
37667                  }
37668                  assignment = rest || "";
37669                } else {
37670                  reference = "";
37671                  htmlAttributes = "";
37672                  rubyAttributes = "";
37673                  assignment = rest;
37674                }
37675                attributes = {};
37676                _ref4 = [this.parseAttributes(htmlAttributes), this.parseAttributes(rubyAttributes)];
37677                for (_k = 0, _len1 = _ref4.length; _k < _len1; _k++) {
37678                  attr = _ref4[_k];
37679                  for (key in attr) {
37680                    val = attr[key];
37681                    attributes[key] = val;
37682                  }
37683                }
37684                if (whitespace = (_ref5 = assignment.match(/^[<>]{0,2}/)) != null ? _ref5[0] : void 0) {
37685                  assignment = assignment.substring(whitespace.length);
37686                }
37687                if (assignment[0] === " ") {
37688                  assignment = assignment.substring(1);
37689                }
37690                if (assignment && !assignment.match(/^(=|!=|&=|~)/)) {
37691                  text = assignment.replace(/^ /, "");
37692                  assignment = void 0;
37693                }
37694                if (whitespace) {
37695                  if (whitespace.indexOf(">") !== -1) {
37696                    this.wsRemoval.around = true;
37697                  }
37698                  if (whitespace.indexOf("<") !== -1) {
37699                    this.wsRemoval.inside = true;
37700                    this.preserve = true;
37701                  }
37702                }
37703                tag = haml.match(/\%([a-z_\-][a-z0-9_:\-]*[\/]?)/i);
37704                ids = haml.match(/\#([a-z_\-][a-z0-9_\-]*)/gi);
37705                classes = haml.match(/\.([a-z0-9_\-]*)/gi);
37706                return {
37707                  tag: tag ? tag[1] : "div",
37708                  ids: ids ? (function() {
37709                    var _l, _len2, _results;
37710                    _results = [];
37711                    for (_l = 0, _len2 = ids.length; _l < _len2; _l++) {
37712                      id = ids[_l];
37713                      _results.push("'" + id.substr(1) + "'");
37714                    }
37715                    return _results;
37716                  })() : void 0,
37717                  classes: classes ? (function() {
37718                    var _l, _len2, _results;
37719                    _results = [];
37720                    for (_l = 0, _len2 = classes.length; _l < _len2; _l++) {
37721                      klass = classes[_l];
37722                      _results.push("'" + klass.substr(1) + "'");
37723                    }
37724                    return _results;
37725                  })() : void 0,
37726                  attributes,
37727                  assignment,
37728                  reference,
37729                  text
37730                };
37731              } catch (_error) {
37732                error = _error;
37733                throw new Error("Unable to parse tag from " + exp + ": " + error);
37734              }
37735            };
37736            Haml2.prototype.parseAttributes = function(exp) {
37737              var attr, attributes, ch, endPos, hasDataAttribute, inDataAttribute, key, keyValue, keys, level, marker, markers, pairs, pos, quote, quoted, start, startPos, type, value, _i, _j, _k, _len, _len1, _ref1, _ref2, _ref3, _ref4, _ref5;
37738              attributes = {};
37739              if (exp === void 0) {
37740                return attributes;
37741              }
37742              type = exp.substring(0, 1);
37743              exp = exp.replace(/(=|:|=>)\s*('([^\\']|\\\\|\\')*'|"([^\\"]|\\\\|\\")*")/g, function(match, type2, value2) {
37744                return type2 + (value2 != null ? value2.replace(/(:|=|=>)/g, "\x90$1") : void 0);
37745              });
37746              level = 0;
37747              start = 0;
37748              markers = [];
37749              if (type === "(") {
37750                startPos = 1;
37751                endPos = exp.length - 1;
37752              } else {
37753                startPos = 0;
37754                endPos = exp.length;
37755              }
37756              for (pos = _i = startPos; startPos <= endPos ? _i < endPos : _i > endPos; pos = startPos <= endPos ? ++_i : --_i) {
37757                ch = exp[pos];
37758                if (ch === "(") {
37759                  level += 1;
37760                  if (level === 1) {
37761                    start = pos;
37762                  }
37763                }
37764                if (ch === ")") {
37765                  if (level === 1) {
37766                    if (start !== 0 && pos - start !== 1) {
37767                      markers.push({
37768                        start,
37769                        end: pos
37770                      });
37771                    }
37772                  } else {
37773                    level -= 1;
37774                  }
37775                }
37776              }
37777              _ref1 = markers.reverse();
37778              for (_j = 0, _len = _ref1.length; _j < _len; _j++) {
37779                marker = _ref1[_j];
37780                exp = exp.substring(0, marker.start) + exp.substring(marker.start, marker.end).replace(/(:|=|=>)/g, "\x90$1") + exp.substring(marker.end);
37781              }
37782              switch (type) {
37783                case "(":
37784                  keys = /\(\s*([-\w]+[\w:-]*\w?)\s*=|\s+([-\w]+[\w:-]*\w?)\s*=|\(\s*('\w+[\w:-]*\w?')\s*=|\s+('\w+[\w:-]*\w?')\s*=|\(\s*("\w+[\w:-]*\w?")\s*=|\s+("\w+[\w:-]*\w?")\s*=/g;
37785                  break;
37786                case "{":
37787                  keys = /[{,]\s*(\w+[\w:-]*\w?)\s*:|[{,]\s*('[-\w]+[\w:-]*\w?')\s*:|[{,]\s*("[-\w]+[\w:-]*\w?")\s*:|[{,]\s*:(\w+[\w:-]*\w?)\s*=>|[{,]\s*:?'([-\w]+[\w:-]*\w?)'\s*=>|[{,]\s*:?"([-\w]+[\w:-]*\w?)"\s*=>/g;
37788              }
37789              pairs = exp.split(keys).filter(Boolean);
37790              inDataAttribute = false;
37791              hasDataAttribute = false;
37792              while (pairs.length) {
37793                keyValue = pairs.splice(0, 2);
37794                if (keyValue.length === 1) {
37795                  attr = keyValue[0].replace(/^[\s({]+|[\s)}]+$/g, "");
37796                  attributes[attr] = "true";
37797                } else {
37798                  key = (_ref2 = keyValue[0]) != null ? _ref2.replace(/^\s+|\s+$/g, "").replace(/^:/, "") : void 0;
37799                  if (quoted = key.match(/^("|')(.*)\1$/)) {
37800                    key = quoted[2];
37801                  }
37802                  value = (_ref3 = keyValue[1]) != null ? _ref3.replace(/^\s+|[\s,]+$/g, "").replace(/\u0090/g, "") : void 0;
37803                  if (key === "data" && !value) {
37804                    inDataAttribute = true;
37805                    hasDataAttribute = true;
37806                  } else if (key && value) {
37807                    if (inDataAttribute) {
37808                      key = this.hyphenateDataAttrs ? "data-" + key.replace("_", "-") : "data-" + key;
37809                      if (/}\s*$/.test(value)) {
37810                        inDataAttribute = false;
37811                      }
37812                    }
37813                  }
37814                  switch (type) {
37815                    case "(":
37816                      value = value.replace(/^\s+|[\s)]+$/g, "");
37817                      quote = (_ref4 = /^(['"])/.exec(value)) != null ? _ref4[1] : void 0;
37818                      pos = value.lastIndexOf(quote);
37819                      if (pos > 1) {
37820                        _ref5 = value.substring(pos + 1).split(" ");
37821                        for (_k = 0, _len1 = _ref5.length; _k < _len1; _k++) {
37822                          attr = _ref5[_k];
37823                          if (attr) {
37824                            attributes[attr] = "true";
37825                          }
37826                        }
37827                        value = value.substring(0, pos + 1);
37828                      }
37829                      attributes[key] = value;
37830                      break;
37831                    case "{":
37832                      attributes[key] = value.replace(/^\s+|[\s}]+$/g, "");
37833                  }
37834                }
37835              }
37836              if (hasDataAttribute) {
37837                delete attributes["data"];
37838              }
37839              return attributes;
37840            };
37841            Haml2.prototype.buildHtmlTagPrefix = function(tokens) {
37842              var classList, classes, hasDynamicClass, key, klass, name, tagParts, value, _i, _len, _ref1;
37843              tagParts = ["<" + tokens.tag];
37844              if (tokens.classes) {
37845                hasDynamicClass = false;
37846                classList = (function() {
37847                  var _i2, _len2, _ref12, _results;
37848                  _ref12 = tokens.classes;
37849                  _results = [];
37850                  for (_i2 = 0, _len2 = _ref12.length; _i2 < _len2; _i2++) {
37851                    name = _ref12[_i2];
37852                    name = this.interpolateCodeAttribute(name, true);
37853                    if (name.indexOf("#{") !== -1) {
37854                      hasDynamicClass = true;
37855                    }
37856                    _results.push(name);
37857                  }
37858                  return _results;
37859                }).call(this);
37860                if (hasDynamicClass && classList.length > 1) {
37861                  classes = "#{ [";
37862                  for (_i = 0, _len = classList.length; _i < _len; _i++) {
37863                    klass = classList[_i];
37864                    classes += "" + this.quoteAndEscapeAttributeValue(klass, true) + ",";
37865                  }
37866                  classes = classes.substring(0, classes.length - 1) + "].sort().join(' ').replace(/^\\s+|\\s+$/g, '') }";
37867                } else {
37868                  classes = classList.sort().join(" ");
37869                }
37870                tagParts.push("class='" + classes + "'");
37871              }
37872              if (tokens.id) {
37873                tagParts.push("id='" + tokens.id + "'");
37874              }
37875              if (tokens.reference) {
37876                if (tokens.attributes) {
37877                  delete tokens.attributes["class"];
37878                  delete tokens.attributes["id"];
37879                }
37880                tagParts.push("#{$r(" + tokens.reference + ")}");
37881              }
37882              if (tokens.attributes) {
37883                _ref1 = tokens.attributes;
37884                for (key in _ref1) {
37885                  value = _ref1[key];
37886                  if (value === "true" || value === "false") {
37887                    if (value === "true") {
37888                      if (this.format === "html5") {
37889                        tagParts.push("" + key);
37890                      } else {
37891                        tagParts.push("" + key + "=" + this.quoteAndEscapeAttributeValue(key));
37892                      }
37893                    }
37894                  } else {
37895                    tagParts.push("" + key + "=" + this.quoteAndEscapeAttributeValue(this.interpolateCodeAttribute(value)));
37896                  }
37897                }
37898              }
37899              return tagParts.join(" ");
37900            };
37901            Haml2.prototype.interpolateCodeAttribute = function(text, unwrap) {
37902              var quoted;
37903              if (unwrap == null) {
37904                unwrap = false;
37905              }
37906              if (!text) {
37907                return;
37908              }
37909              if (!text.match(/^("|').*\1$/)) {
37910                if (this.escapeAttributes) {
37911                  if (this.cleanValue) {
37912                    text = "#{ $e($c(" + text + ")) }";
37913                  } else {
37914                    text = "#{ $e(" + text + ") }";
37915                  }
37916                } else {
37917                  if (this.cleanValue) {
37918                    text = "#{ $c(" + text + ") }";
37919                  } else {
37920                    text = "#{ (" + text + ") }";
37921                  }
37922                }
37923              }
37924              if (unwrap) {
37925                if (quoted = text.match(/^("|')(.*)\1$/)) {
37926                  text = quoted[2];
37927                }
37928              }
37929              return text;
37930            };
37931            Haml2.prototype.quoteAndEscapeAttributeValue = function(value, code) {
37932              var escaped, hasDoubleQuotes, hasInterpolation, hasSingleQuotes, quoted, result, token, tokens;
37933              if (code == null) {
37934                code = false;
37935              }
37936              if (!value) {
37937                return;
37938              }
37939              if (quoted = value.match(/^("|')(.*)\1$/)) {
37940                value = quoted[2];
37941              }
37942              tokens = this.splitInterpolations(value);
37943              hasSingleQuotes = false;
37944              hasDoubleQuotes = false;
37945              hasInterpolation = false;
37946              tokens = (function() {
37947                var _i, _len, _results;
37948                _results = [];
37949                for (_i = 0, _len = tokens.length; _i < _len; _i++) {
37950                  token = tokens[_i];
37951                  if (token.slice(0, 2) === "#{") {
37952                    if (token.indexOf("$e") === -1 && token.indexOf("$c") === -1) {
37953                      if (this.escapeAttributes) {
37954                        if (this.cleanValue) {
37955                          token = "#{ $e($c(" + token.slice(2, -1) + ")) }";
37956                        } else {
37957                          token = "#{ $e(" + token.slice(2, -1) + ") }";
37958                        }
37959                      } else {
37960                        if (this.cleanValue) {
37961                          token = "#{ $c(" + token.slice(2, -1) + ") }";
37962                        }
37963                      }
37964                    }
37965                    hasInterpolation = true;
37966                  } else {
37967                    if (!hasSingleQuotes) {
37968                      hasSingleQuotes = token.indexOf("'") !== -1;
37969                    }
37970                    if (!hasDoubleQuotes) {
37971                      hasDoubleQuotes = token.indexOf('"') !== -1;
37972                    }
37973                  }
37974                  _results.push(token);
37975                }
37976                return _results;
37977              }).call(this);
37978              if (code) {
37979                if (hasInterpolation) {
37980                  result = '"' + tokens.join("") + '"';
37981                } else {
37982                  result = "'" + tokens.join("") + "'";
37983                }
37984              } else {
37985                if (!hasDoubleQuotes && !hasSingleQuotes) {
37986                  result = "'" + tokens.join("") + "'";
37987                }
37988                if (hasSingleQuotes && !hasDoubleQuotes) {
37989                  result = '\\"' + tokens.join("") + '\\"';
37990                }
37991                if (hasDoubleQuotes && !hasSingleQuotes) {
37992                  escaped = (function() {
37993                    var _i, _len, _results;
37994                    _results = [];
37995                    for (_i = 0, _len = tokens.length; _i < _len; _i++) {
37996                      token = tokens[_i];
37997                      _results.push(escapeQuotes(token));
37998                    }
37999                    return _results;
38000                  })();
38001                  result = "'" + escaped.join("") + "'";
38002                }
38003                if (hasSingleQuotes && hasDoubleQuotes) {
38004                  escaped = (function() {
38005                    var _i, _len, _results;
38006                    _results = [];
38007                    for (_i = 0, _len = tokens.length; _i < _len; _i++) {
38008                      token = tokens[_i];
38009                      _results.push(escapeQuotes(token).replace(/'/g, "&#39;"));
38010                    }
38011                    return _results;
38012                  })();
38013                  result = "'" + escaped.join("") + "'";
38014                }
38015              }
38016              return result;
38017            };
38018            Haml2.prototype.splitInterpolations = function(value) {
38019              var ch, ch2, level, pos, start, tokens, _i, _ref1;
38020              level = 0;
38021              start = 0;
38022              tokens = [];
38023              for (pos = _i = 0, _ref1 = value.length; 0 <= _ref1 ? _i < _ref1 : _i > _ref1; pos = 0 <= _ref1 ? ++_i : --_i) {
38024                ch = value[pos];
38025                ch2 = value.slice(pos, +(pos + 1) + 1 || 9e9);
38026                if (ch === "{") {
38027                  level += 1;
38028                }
38029                if (ch2 === "#{" && level === 0) {
38030                  tokens.push(value.slice(start, pos));
38031                  start = pos;
38032                }
38033                if (ch === "}") {
38034                  level -= 1;
38035                  if (level === 0) {
38036                    tokens.push(value.slice(start, +pos + 1 || 9e9));
38037                    start = pos + 1;
38038                  }
38039                }
38040              }
38041              tokens.push(value.slice(start, value.length));
38042              return tokens.filter(Boolean);
38043            };
38044            Haml2.prototype.buildDocType = function(doctype) {
38045              switch ("" + this.format + " " + doctype) {
38046                case "xhtml !!! XML":
38047                  return "<?xml version='1.0' encoding='utf-8' ?>";
38048                case "xhtml !!!":
38049                  return '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
38050                case "xhtml !!! 1.1":
38051                  return '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">';
38052                case "xhtml !!! mobile":
38053                  return '<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN" "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd">';
38054                case "xhtml !!! basic":
38055                  return '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">';
38056                case "xhtml !!! frameset":
38057                  return '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">';
38058                case "xhtml !!! 5":
38059                case "html5 !!!":
38060                  return "<!DOCTYPE html>";
38061                case "html5 !!! XML":
38062                case "html4 !!! XML":
38063                  return "";
38064                case "html4 !!!":
38065                  return '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">';
38066                case "html4 !!! frameset":
38067                  return '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">';
38068                case "html4 !!! strict":
38069                  return '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">';
38070              }
38071            };
38072            Haml2.prototype.isNotSelfClosing = function(tag) {
38073              return this.selfCloseTags.indexOf(tag) === -1 && !tag.match(/\/$/);
38074            };
38075            return Haml2;
38076          })(Node);
38077        }).call(this);
38078      });
38079      require2.define("/nodes/code.coffee", function(require3, module2, exports2, __dirname, __filename, process, global2) {
38080        (function() {
38081          var Code, Node, _ref, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) {
38082            for (var key in parent) {
38083              if (__hasProp.call(parent, key)) child[key] = parent[key];
38084            }
38085            function ctor() {
38086              this.constructor = child;
38087            }
38088            ctor.prototype = parent.prototype;
38089            child.prototype = new ctor();
38090            child.__super__ = parent.prototype;
38091            return child;
38092          };
38093          Node = require3("./node");
38094          module2.exports = Code = (function(_super) {
38095            __extends(Code2, _super);
38096            function Code2() {
38097              _ref = Code2.__super__.constructor.apply(this, arguments);
38098              return _ref;
38099            }
38100            Code2.prototype.evaluate = function() {
38101              var code, codeBlock, escape2, identifier;
38102              codeBlock = this.expression.match(/(-|!=|\&=|=|~)\s?(.*)?/);
38103              identifier = codeBlock[1];
38104              code = codeBlock[2];
38105              if (identifier === "-") {
38106                this.opener = this.markRunningCode(code);
38107                if (this.children.length !== 0 && this.opener.code.match(/(->|=>)/)) {
38108                  return this.closer = this.markRunningCode("  ''");
38109                }
38110              } else if (identifier === "~") {
38111                if (this.escapeHtml) {
38112                  return this.opener = this.markInsertingCode(code, true, false, true);
38113                } else {
38114                  return this.opener = this.markInsertingCode(code, false, false, true);
38115                }
38116              } else {
38117                escape2 = identifier === "&=" || identifier === "=" && this.escapeHtml;
38118                if (this.children.length !== 0 && code.match(/(->|=>)$/)) {
38119                  this.opener = this.markInsertingCode(code, escape2, false, false);
38120                  this.opener.block = "start";
38121                  this.closer = this.markRunningCode('  $buffer.join "\\n"');
38122                  return this.closer.block = "end";
38123                } else {
38124                  return this.opener = this.markInsertingCode(code, escape2);
38125                }
38126              }
38127            };
38128            return Code2;
38129          })(Node);
38130        }).call(this);
38131      });
38132      require2.define("/nodes/comment.coffee", function(require3, module2, exports2, __dirname, __filename, process, global2) {
38133        (function() {
38134          var Comment, Node, escapeQuotes, _ref, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) {
38135            for (var key in parent) {
38136              if (__hasProp.call(parent, key)) child[key] = parent[key];
38137            }
38138            function ctor() {
38139              this.constructor = child;
38140            }
38141            ctor.prototype = parent.prototype;
38142            child.prototype = new ctor();
38143            child.__super__ = parent.prototype;
38144            return child;
38145          };
38146          Node = require3("./node");
38147          escapeQuotes = require3("../util/text").escapeQuotes;
38148          module2.exports = Comment = (function(_super) {
38149            __extends(Comment2, _super);
38150            function Comment2() {
38151              _ref = Comment2.__super__.constructor.apply(this, arguments);
38152              return _ref;
38153            }
38154            Comment2.prototype.evaluate = function() {
38155              var comment, expression, identifier, _ref1;
38156              _ref1 = this.expression.match(/(-#|\/\[|\/)\s?(.*)?/), expression = _ref1[0], identifier = _ref1[1], comment = _ref1[2];
38157              switch (identifier) {
38158                case "-#":
38159                  this.silent = true;
38160                  return this.opener = this.markText("");
38161                case "/[":
38162                  this.opener = this.markText("<!--[" + comment + ">");
38163                  return this.closer = this.markText("<![endif]-->");
38164                case "/":
38165                  if (comment) {
38166                    this.opener = this.markText("<!-- " + escapeQuotes(comment));
38167                    return this.closer = this.markText(" -->");
38168                  } else {
38169                    this.opener = this.markText("<!--");
38170                    return this.closer = this.markText("-->");
38171                  }
38172              }
38173            };
38174            return Comment2;
38175          })(Node);
38176        }).call(this);
38177      });
38178      require2.define("/nodes/filter.coffee", function(require3, module2, exports2, __dirname, __filename, process, global2) {
38179        (function() {
38180          var Filter, Node, unescapeQuotes, whitespace, _ref, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) {
38181            for (var key in parent) {
38182              if (__hasProp.call(parent, key)) child[key] = parent[key];
38183            }
38184            function ctor() {
38185              this.constructor = child;
38186            }
38187            ctor.prototype = parent.prototype;
38188            child.prototype = new ctor();
38189            child.__super__ = parent.prototype;
38190            return child;
38191          };
38192          Node = require3("./node");
38193          whitespace = require3("../util/text").whitespace;
38194          unescapeQuotes = require3("../util/text").unescapeQuotes;
38195          module2.exports = Filter = (function(_super) {
38196            __extends(Filter2, _super);
38197            function Filter2() {
38198              _ref = Filter2.__super__.constructor.apply(this, arguments);
38199              return _ref;
38200            }
38201            Filter2.prototype.evaluate = function() {
38202              var _ref1;
38203              return this.filter = (_ref1 = this.expression.match(/:(escaped|preserve|css|javascript|coffeescript|plain|cdata|coffeescript)(.*)?/)) != null ? _ref1[1] : void 0;
38204            };
38205            Filter2.prototype.render = function() {
38206              var child, indent, output, preserve, _i, _j, _len, _len1, _ref1, _ref2;
38207              output = [];
38208              switch (this.filter) {
38209                case "escaped":
38210                  _ref1 = this.children;
38211                  for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
38212                    child = _ref1[_i];
38213                    output.push(this.markText(child.render()[0].text, true));
38214                  }
38215                  break;
38216                case "preserve":
38217                  preserve = "";
38218                  _ref2 = this.children;
38219                  for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
38220                    child = _ref2[_j];
38221                    preserve += "" + child.render()[0].text + "&#x000A;";
38222                  }
38223                  preserve = preserve.replace(/\&\#x000A;$/, "");
38224                  output.push(this.markText(preserve));
38225                  break;
38226                case "plain":
38227                  this.renderFilterContent(0, output);
38228                  break;
38229                case "css":
38230                  if (this.format === "html5") {
38231                    output.push(this.markText("<style>"));
38232                  } else {
38233                    output.push(this.markText("<style type='text/css'>"));
38234                  }
38235                  if (this.format === "xhtml") {
38236                    output.push(this.markText("  /*<![CDATA[*/"));
38237                  }
38238                  indent = this.format === "xhtml" ? 2 : 1;
38239                  this.renderFilterContent(indent, output);
38240                  if (this.format === "xhtml") {
38241                    output.push(this.markText("  /*]]>*/"));
38242                  }
38243                  output.push(this.markText("</style>"));
38244                  break;
38245                case "javascript":
38246                  if (this.format === "html5") {
38247                    output.push(this.markText("<script>"));
38248                  } else {
38249                    output.push(this.markText("<script type='text/javascript'>"));
38250                  }
38251                  if (this.format === "xhtml") {
38252                    output.push(this.markText("  //<![CDATA["));
38253                  }
38254                  indent = this.format === "xhtml" ? 2 : 1;
38255                  this.renderFilterContent(indent, output);
38256                  if (this.format === "xhtml") {
38257                    output.push(this.markText("  //]]>"));
38258                  }
38259                  output.push(this.markText("<\/script>"));
38260                  break;
38261                case "cdata":
38262                  output.push(this.markText("<![CDATA["));
38263                  this.renderFilterContent(2, output);
38264                  output.push(this.markText("]]>"));
38265                  break;
38266                case "coffeescript":
38267                  this.renderFilterContent(0, output, "run");
38268              }
38269              return output;
38270            };
38271            Filter2.prototype.renderFilterContent = function(indent, output, type) {
38272              var child, content, e, empty, line, _i, _j, _k, _len, _len1, _ref1, _results;
38273              if (type == null) {
38274                type = "text";
38275              }
38276              content = [];
38277              empty = 0;
38278              _ref1 = this.children;
38279              for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
38280                child = _ref1[_i];
38281                content.push(child.render()[0].text);
38282              }
38283              _results = [];
38284              for (_j = 0, _len1 = content.length; _j < _len1; _j++) {
38285                line = content[_j];
38286                if (line === "") {
38287                  _results.push(empty += 1);
38288                } else {
38289                  switch (type) {
38290                    case "text":
38291                      for (e = _k = 0; 0 <= empty ? _k < empty : _k > empty; e = 0 <= empty ? ++_k : --_k) {
38292                        output.push(this.markText(""));
38293                      }
38294                      output.push(this.markText("" + whitespace(indent) + line));
38295                      break;
38296                    case "run":
38297                      output.push(this.markRunningCode("" + unescapeQuotes(line)));
38298                  }
38299                  _results.push(empty = 0);
38300                }
38301              }
38302              return _results;
38303            };
38304            return Filter2;
38305          })(Node);
38306        }).call(this);
38307      });
38308      require2.define("/nodes/directive.coffee", function(require3, module2, exports2, __dirname, __filename, process, global2) {
38309        (function() {
38310          var CoffeeScript, Directive, Node, fs, path, _ref, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) {
38311            for (var key in parent) {
38312              if (__hasProp.call(parent, key)) child[key] = parent[key];
38313            }
38314            function ctor() {
38315              this.constructor = child;
38316            }
38317            ctor.prototype = parent.prototype;
38318            child.prototype = new ctor();
38319            child.__super__ = parent.prototype;
38320            return child;
38321          };
38322          path = require3("path");
38323          Node = require3("./node");
38324          if (!process.browser) {
38325            fs = require3("fs");
38326            CoffeeScript = require3("coffee-script");
38327          }
38328          module2.exports = Directive = (function(_super) {
38329            __extends(Directive2, _super);
38330            function Directive2() {
38331              _ref = Directive2.__super__.constructor.apply(this, arguments);
38332              return _ref;
38333            }
38334            Directive2.prototype.directives = {
38335              include: function(expression) {
38336                var Compiler, code, compiler, context, e, error, name, source, statement, _ref1;
38337                try {
38338                  _ref1 = expression.match(/\s*['"](.*?)['"](?:,\s*(.*))?\s*/), _ref1[0], name = _ref1[1], context = _ref1[2];
38339                } catch (_error) {
38340                  e = _error;
38341                  throw new Error("Failed to parse the include directive from " + expression);
38342                }
38343                if (!context) {
38344                  context = "this";
38345                }
38346                statement = (function() {
38347                  switch (this.placement) {
38348                    case "global":
38349                      return "" + this.namespace + "['" + name + "'](" + context + ")";
38350                    case "amd":
38351                      return "require('" + name + "').apply(" + context + ")";
38352                    case "standalone":
38353                      if (typeof browser !== "undefined" && browser !== null ? browser.process : void 0) {
38354                        throw new Error("Include directive not available in the Browser when placement is standalone.");
38355                      } else {
38356                        try {
38357                          source = fs.readFileSync(name).toString();
38358                        } catch (_error) {
38359                          error = _error;
38360                          console.error("  Error opening file: %s", error);
38361                          console.error(error);
38362                        }
38363                        Compiler = require3("../haml-coffee");
38364                        compiler = new Compiler(this.options);
38365                        compiler.parse(source);
38366                        code = CoffeeScript.compile(compiler.precompile(), {
38367                          bare: true
38368                        });
38369                        return statement = "`(function(){" + code + "}).apply(" + context + ")`";
38370                      }
38371                      break;
38372                    default:
38373                      throw new Error("Include directive not available when placement is " + this.placement);
38374                  }
38375                }).call(this);
38376                return this.opener = this.markInsertingCode(statement, false);
38377              }
38378            };
38379            Directive2.prototype.evaluate = function() {
38380              var directives, e, name, rest, _ref1;
38381              directives = Object.keys(this.directives).join("|");
38382              try {
38383                _ref1 = this.expression.match(RegExp("\\+(" + directives + ")(.*)")), _ref1[0], name = _ref1[1], rest = _ref1[2];
38384              } catch (_error) {
38385                e = _error;
38386                throw new Error("Unable to recognize directive from " + this.expression);
38387              }
38388              return this.directives[name].call(this, rest);
38389            };
38390            return Directive2;
38391          })(Node);
38392        }).call(this);
38393      });
38394      require2.define("fs", function(require3, module2, exports2, __dirname, __filename, process, global2) {
38395      });
38396      require2.define("/hamlc.coffee", function(require3, module2, exports2, __dirname, __filename, process, global2) {
38397        (function() {
38398          var CoffeeScript, Compiler, fs, __expressCache;
38399          fs = require3("fs");
38400          Compiler = require3("./haml-coffee");
38401          if (process.browser) {
38402            CoffeeScript = window.CoffeeScript;
38403          } else {
38404            CoffeeScript = require3("coffee-script");
38405          }
38406          __expressCache = {};
38407          module2.exports = {
38408            render: function(source, context, options) {
38409              var compiler, template;
38410              if (context == null) {
38411                context = {};
38412              }
38413              if (options == null) {
38414                options = {};
38415              }
38416              options.placement = "standalone";
38417              compiler = new Compiler(options);
38418              compiler.parse(source);
38419              template = new Function(CoffeeScript.compile(compiler.precompile(), {
38420                bare: true
38421              }));
38422              return template.call(context);
38423            },
38424            compile: function(source, options) {
38425              var compiler, template;
38426              if (options == null) {
38427                options = {};
38428              }
38429              compiler = new Compiler(options);
38430              compiler.parse(source);
38431              template = new Function(CoffeeScript.compile(compiler.precompile(), {
38432                bare: true
38433              }));
38434              return function(params) {
38435                return template.call(params);
38436              };
38437            },
38438            template: function(source, name, namespace, options) {
38439              var compiler;
38440              if (options == null) {
38441                options = {};
38442              }
38443              options.namespace = namespace;
38444              options.name = name;
38445              compiler = new Compiler(options);
38446              compiler.parse(source);
38447              return CoffeeScript.compile(compiler.render());
38448            },
38449            __express: function(filename, options, callback) {
38450              var err, source;
38451              if (!!(options && options.constructor && options.call && options.apply)) {
38452                callback = options;
38453                options = {};
38454              }
38455              try {
38456                if (options.cache && __expressCache[filename]) {
38457                  return callback(null, __expressCache[filename](options));
38458                } else {
38459                  options.filename = filename;
38460                  source = fs.readFileSync(filename, "utf8");
38461                  if (options.cache) {
38462                    __expressCache[filename] = module2.exports.compile(source, options);
38463                    return callback(null, __expressCache[filename](options));
38464                  } else {
38465                    return callback(null, module2.exports.compile(source, options)(options));
38466                  }
38467                }
38468              } catch (_error) {
38469                err = _error;
38470                return callback(err);
38471              }
38472            }
38473          };
38474        }).call(this);
38475      });
38476    }
38477  });
38478
38479  
38479// apps/base/assets/javascripts/vendor/jquery.autoellipsis-1.0.10.js
38480  var require_jquery_autoellipsis_1_0_10 = __commonJS({
38481    "apps/base/assets/javascripts/vendor/jquery.autoellipsis-1.0.10.js"() {
38482      "use strict";
38483      init_esbuild_shims();
38484      (function($3) {
38485        var liveUpdatingTargets = [];
38486        var liveUpdaterIntervalId;
38487        var liveUpdaterRunning = false;
38488        var defaultSettings = {
38489          ellipsis: "...",
38490          setTitle: "never",
38491          live: false
38492        };
38493        $3.fn.ellipsis = function(selector, options) {
38494          var subjectElements, settings;
38495          subjectElements = $3(this);
38496          if (typeof selector !== "string") {
38497            options = selector;
38498            selector = void 0;
38499          }
38500          settings = $3.extend({}, defaultSettings, options);
38501          settings.selector = selector;
38502          subjectElements.each(function() {
38503            var elem = $3(this);
38504            ellipsisOnElement(elem, settings);
38505          });
38506          if (settings.live) {
38507            addToLiveUpdater(subjectElements, settings);
38508          } else {
38509            removeFromLiveUpdater(subjectElements);
38510          }
38511          return this;
38512        };
38513        function ellipsisOnElement(containerElement, settings) {
38514          var containerData = containerElement.data("jqae");
38515          if (!containerData) containerData = {};
38516          var wrapperElement = containerData.wrapperElement;
38517          if (!wrapperElement) {
38518            wrapperElement = containerElement.wrapInner("<div/>").find(">div");
38519            wrapperElement.css({
38520              margin: 0,
38521              padding: 0,
38522              border: 0
38523            });
38524          }
38525          var wrapperElementData = wrapperElement.data("jqae");
38526          if (!wrapperElementData) wrapperElementData = {};
38527          var wrapperOriginalContent = wrapperElementData.originalContent;
38528          if (wrapperOriginalContent) {
38529            wrapperElement = wrapperElementData.originalContent.clone(true).data("jqae", { originalContent: wrapperOriginalContent }).replaceAll(wrapperElement);
38530          } else {
38531            wrapperElement.data("jqae", { originalContent: wrapperElement.clone(true) });
38532          }
38533          containerElement.data("jqae", {
38534            wrapperElement,
38535            containerWidth: containerElement.width(),
38536            containerHeight: containerElement.height()
38537          });
38538          var containerElementHeight = containerElement.height();
38539          var wrapperOffset = (parseInt(containerElement.css("padding-top"), 10) || 0) + (parseInt(containerElement.css("border-top-width"), 10) || 0) - (wrapperElement.offset().top - containerElement.offset().top);
38540          var deferAppendEllipsis = false;
38541          var selectedElements = wrapperElement;
38542          if (settings.selector) selectedElements = $3(wrapperElement.find(settings.selector).get().reverse());
38543          selectedElements.each(function() {
38544            var selectedElement = $3(this), originalText = selectedElement.text(), ellipsisApplied = false;
38545            if (wrapperElement.innerHeight() - selectedElement.innerHeight() > containerElementHeight + wrapperOffset) {
38546              selectedElement.remove();
38547            } else {
38548              removeLastEmptyElements(selectedElement);
38549              if (selectedElement.contents().length) {
38550                if (deferAppendEllipsis) {
38551                  getLastTextNode(selectedElement).get(0).nodeValue += settings.ellipsis;
38552                  deferAppendEllipsis = false;
38553                }
38554                while (wrapperElement.innerHeight() > containerElementHeight + wrapperOffset) {
38555                  ellipsisApplied = ellipsisOnLastTextNode(selectedElement);
38556                  if (ellipsisApplied) {
38557                    removeLastEmptyElements(selectedElement);
38558                    if (selectedElement.contents().length) {
38559                      getLastTextNode(selectedElement).get(0).nodeValue += settings.ellipsis;
38560                    } else {
38561                      deferAppendEllipsis = true;
38562                      selectedElement.remove();
38563                      break;
38564                    }
38565                  } else {
38566                    deferAppendEllipsis = true;
38567                    selectedElement.remove();
38568                    break;
38569                  }
38570                }
38571                if (settings.setTitle == "onEllipsis" && ellipsisApplied || settings.setTitle == "always") {
38572                  selectedElement.attr("title", originalText);
38573                } else if (settings.setTitle != "never") {
38574                  selectedElement.removeAttr("title");
38575                }
38576              }
38577            }
38578          });
38579        }
38580        function ellipsisOnLastTextNode(element) {
38581          var lastTextNode = getLastTextNode(element);
38582          if (lastTextNode.length) {
38583            var text = lastTextNode.get(0).nodeValue;
38584            var pos = text.lastIndexOf(" ");
38585            if (pos > -1) {
38586              text = $3.trim(text.substring(0, pos));
38587              lastTextNode.get(0).nodeValue = text;
38588            } else {
38589              lastTextNode.get(0).nodeValue = "";
38590            }
38591            return true;
38592          }
38593          return false;
38594        }
38595        function getLastTextNode(element) {
38596          if (element.contents().length) {
38597            var contents = element.contents();
38598            var lastNode = contents.eq(contents.length - 1);
38599            if (lastNode.filter(textNodeFilter).length) {
38600              return lastNode;
38601            } else {
38602              return getLastTextNode(lastNode);
38603            }
38604          } else {
38605            element.append("");
38606            var contents = element.contents();
38607            return contents.eq(contents.length - 1);
38608          }
38609        }
38610        function removeLastEmptyElements(element) {
38611          if (element.contents().length) {
38612            var contents = element.contents();
38613            var lastNode = contents.eq(contents.length - 1);
38614            if (lastNode.filter(textNodeFilter).length) {
38615              var text = lastNode.get(0).nodeValue;
38616              text = $3.trim(text);
38617              if (text == "") {
38618                lastNode.remove();
38619                return true;
38620              } else {
38621                return false;
38622              }
38623            } else {
38624              while (removeLastEmptyElements(lastNode)) {
38625              }
38626              if (lastNode.contents().length) {
38627                return false;
38628              } else {
38629                lastNode.remove();
38630                return true;
38631              }
38632            }
38633          }
38634          return false;
38635        }
38636        function textNodeFilter() {
38637          return this.nodeType === 3;
38638        }
38639        function addToLiveUpdater(targetElements, settings) {
38640          liveUpdatingTargets.push({ elements: targetElements, settings });
38641          if (!liveUpdaterIntervalId) {
38642            liveUpdaterIntervalId = window.setInterval(function() {
38643              doLiveUpdater();
38644            }, 200);
38645          }
38646        }
38647        function removeFromLiveUpdater(targetElements) {
38648          liveUpdatingTargets = $3.grep(liveUpdatingTargets, function(entry) {
38649            return entry.elements !== targetElements;
38650          });
38651          if (!liveUpdatingTargets.length) {
38652            if (liveUpdaterIntervalId) {
38653              window.clearInterval(liveUpdaterIntervalId);
38654              liveUpdaterIntervalId = void 0;
38655            }
38656          }
38657        }
38658        ;
38659        function doLiveUpdater() {
38660          if (!liveUpdaterRunning) {
38661            liveUpdaterRunning = true;
38662            $3.each(liveUpdatingTargets, function(index, entry) {
38663              entry.elements.each(function() {
38664                var containerElement, containerData;
38665                containerElement = $3(this);
38666                containerData = containerElement.data("jqae");
38667                if (containerData.containerWidth != containerElement.width() || containerData.containerHeight != containerElement.height()) {
38668                  ellipsisOnElement(containerElement, entry.settings);
38669                }
38670              });
38671            });
38672            liveUpdaterRunning = false;
38673          }
38674        }
38675        ;
38676      })(jQuery);
38677    }
38678  });
38679
38680  
38680// apps/base/assets/javascripts/vendor/jquery-cookie.js
38681  var require_jquery_cookie = __commonJS({
38682    "apps/base/assets/javascripts/vendor/jquery-cookie.js"() {
38683      "use strict";
38684      init_esbuild_shims();
38685      (function($3, document2, undefined2) {
38686        var pluses = /\+/g;
38687        function raw(s) {
38688          return s;
38689        }
38690        function decoded(s) {
38691          return unRfc2068(decodeURIComponent(s.replace(pluses, " ")));
38692        }
38693        function unRfc2068(value) {
38694          if (value.indexOf('"') === 0) {
38695            value = value.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, "\\");
38696          }
38697          return value;
38698        }
38699        function fromJSON(value) {
38700          return config.json ? JSON.parse(value) : value;
38701        }
38702        var config = $3.cookie = function(key, value, options) {
38703          if (value !== undefined2) {
38704            options = $3.extend({}, config.defaults, options);
38705            if (value === null) {
38706              options.expires = -1;
38707            }
38708            if (typeof options.expires === "number") {
38709              var days = options.expires, t2 = options.expires = /* @__PURE__ */ new Date();
38710              t2.setDate(t2.getDate() + days);
38711            }
38712            value = config.json ? JSON.stringify(value) : String(value);
38713            return document2.cookie = [
38714              encodeURIComponent(key),
38715              "=",
38716              config.raw ? value : encodeURIComponent(value),
38717              options.expires ? "; expires=" + options.expires.toUTCString() : "",
38718              // use expires attribute, max-age is not supported by IE
38719              options.path ? "; path=" + options.path : "",
38720              options.domain ? "; domain=" + options.domain : "",
38721              options.secure ? "; secure" : ""
38722            ].join("");
38723          }
38724          var decode = config.raw ? raw : decoded;
38725          var cookies = document2.cookie.split("; ");
38726          var result = key ? null : {};
38727          for (var i = 0, l = cookies.length; i < l; i++) {
38728            var parts = cookies[i].split("=");
38729            var name = decode(parts.shift());
38730            var cookie = decode(parts.join("="));
38731            if (key && key === name) {
38732              result = fromJSON(cookie);
38733              break;
38734            }
38735            if (!key) {
38736              result[name] = fromJSON(cookie);
38737            }
38738          }
38739          return result;
38740        };
38741        config.defaults = {};
38742        $3.removeCookie = function(key, options) {
38743          if ($3.cookie(key) !== null) {
38744            $3.cookie(key, null, options);
38745            return true;
38746          }
38747          return false;
38748        };
38749      })(jQuery, document);
38750    }
38751  });
38752
38753  
38753// apps/base/assets/javascripts/vendor/jquery.doubleScroll.js
38754  var require_jquery_doubleScroll = __commonJS({
38755    "apps/base/assets/javascripts/vendor/jquery.doubleScroll.js"() {
38756      "use strict";
38757      init_esbuild_shims();
38758      (function($3) {
38759        jQuery.fn.doubleScroll = function(userOptions) {
38760          var options = {
38761            contentElement: void 0,
38762            // Widest element, if not specified first child element will be used
38763            scrollCss: {
38764              "overflow-x": "auto",
38765              "overflow-y": "hidden"
38766            },
38767            contentCss: {
38768              "overflow-x": "auto",
38769              "overflow-y": "hidden"
38770            },
38771            onlyIfScroll: true,
38772            // top scrollbar is not shown if the bottom one is not present
38773            resetOnWindowResize: false,
38774            // recompute the top ScrollBar requirements when the window is resized
38775            timeToWaitForResize: 30
38776            // wait for the last update event (usefull when browser fire resize event constantly during ressing)
38777          };
38778          $3.extend(true, options, userOptions);
38779          $3.extend(options, {
38780            topScrollBarMarkup: '<div class="doubleScroll-scroll-wrapper" style="height: 20px; position: absolute; z-index: 999;"><div class="doubleScroll-scroll" style="height: 1px;"></div></div>',
38781            topScrollBarWrapperSelector: ".doubleScroll-scroll-wrapper",
38782            topScrollBarInnerSelector: ".doubleScroll-scroll"
38783          });
38784          var _showScrollBar = function($self, options2) {
38785            if (options2.onlyIfScroll && $self.get(0).scrollWidth <= $self.width()) {
38786              $self.prev(options2.topScrollBarWrapperSelector).remove();
38787              return;
38788            }
38789            var $topScrollBar = $self.prev(options2.topScrollBarWrapperSelector);
38790            if ($topScrollBar.length == 0) {
38791              $topScrollBar = $3(options2.topScrollBarMarkup);
38792              $self.before($topScrollBar);
38793              $topScrollBar.css(options2.scrollCss);
38794              $self.css(options2.contentCss);
38795              $topScrollBar.bind("scroll.doubleScroll", function() {
38796                $self.scrollLeft($topScrollBar.scrollLeft());
38797              });
38798              var selfScrollHandler = function() {
38799                $topScrollBar.scrollLeft($self.scrollLeft());
38800              };
38801              $self.bind("scroll.doubleScroll", selfScrollHandler);
38802            }
38803            var $contentElement;
38804            if (options2.contentElement !== void 0 && $self.find(options2.contentElement).length !== 0) {
38805              $contentElement = $self.find(options2.contentElement);
38806            } else {
38807              $contentElement = $self.find(">:first-child");
38808            }
38809            $3(options2.topScrollBarInnerSelector, $topScrollBar).width($contentElement.outerWidth());
38810            $topScrollBar.width($self.width());
38811            $topScrollBar.scrollLeft($self.scrollLeft());
38812          };
38813          return this.each(function() {
38814            var $self = $3(this);
38815            _showScrollBar($self, options);
38816            if (options.resetOnWindowResize) {
38817              var id;
38818              var handler = function(e) {
38819                _showScrollBar($self, options);
38820              };
38821              $3(window).bind("resize.doubleScroll", function() {
38822                clearTimeout(id);
38823                id = setTimeout(handler, options.timeToWaitForResize);
38824              });
38825            }
38826          });
38827        };
38828      })(jQuery);
38829    }
38830  });
38831
38832  
38832// apps/base/assets/javascripts/vendor/jquery.hoverIntent.js
38833  var require_jquery_hoverIntent = __commonJS({
38834    "apps/base/assets/javascripts/vendor/jquery.hoverIntent.js"() {
38835      "use strict";
38836      init_esbuild_shims();
38837      (function($3) {
38838        $3.fn.hoverIntent = function(handlerIn, handlerOut, selector) {
38839          var cfg = {
38840            interval: 100,
38841            sensitivity: 6,
38842            timeout: 0
38843          };
38844          if (typeof handlerIn === "object") {
38845            cfg = $3.extend(cfg, handlerIn);
38846          } else if ($3.isFunction(handlerOut)) {
38847            cfg = $3.extend(cfg, { over: handlerIn, out: handlerOut, selector });
38848          } else {
38849            cfg = $3.extend(cfg, { over: handlerIn, out: handlerIn, selector: handlerOut });
38850          }
38851          var cX, cY, pX, pY;
38852          var track = function(ev) {
38853            cX = ev.pageX;
38854            cY = ev.pageY;
38855          };
38856          var compare = function(ev, ob) {
38857            ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t);
38858            if (Math.sqrt((pX - cX) * (pX - cX) + (pY - cY) * (pY - cY)) < cfg.sensitivity) {
38859              $3(ob).off("mousemove.hoverIntent", track);
38860              ob.hoverIntent_s = true;
38861              return cfg.over.apply(ob, [ev]);
38862            } else {
38863              pX = cX;
38864              pY = cY;
38865              ob.hoverIntent_t = setTimeout(function() {
38866                compare(ev, ob);
38867              }, cfg.interval);
38868            }
38869          };
38870          var delay = function(ev, ob) {
38871            ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t);
38872            ob.hoverIntent_s = false;
38873            return cfg.out.apply(ob, [ev]);
38874          };
38875          var handleHover = function(e) {
38876            var ev = $3.extend({}, e);
38877            var ob = this;
38878            if (ob.hoverIntent_t) {
38879              ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t);
38880            }
38881            if (e.type === "mouseenter") {
38882              pX = ev.pageX;
38883              pY = ev.pageY;
38884              $3(ob).on("mousemove.hoverIntent", track);
38885              if (!ob.hoverIntent_s) {
38886                ob.hoverIntent_t = setTimeout(function() {
38887                  compare(ev, ob);
38888                }, cfg.interval);
38889              }
38890            } else {
38891              $3(ob).off("mousemove.hoverIntent", track);
38892              if (ob.hoverIntent_s) {
38893                ob.hoverIntent_t = setTimeout(function() {
38894                  delay(ev, ob);
38895                }, cfg.timeout);
38896              }
38897            }
38898          };
38899          return this.on({ "mouseenter.hoverIntent": handleHover, "mouseleave.hoverIntent": handleHover }, cfg.selector);
38900        };
38901      })(jQuery);
38902    }
38903  });
38904
38905  
38905// apps/base/assets/javascripts/vendor/jquery.iframe-transport.js
38906  var require_jquery_iframe_transport = __commonJS({
38907    "apps/base/assets/javascripts/vendor/jquery.iframe-transport.js"() {
38908      "use strict";
38909      init_esbuild_shims();
38910      (function($3, undefined2) {
38911        "use strict";
38912        $3.ajaxPrefilter(function(options, origOptions, jqXHR) {
38913          if (options.iframe) {
38914            options.originalURL = options.url;
38915            return "iframe";
38916          }
38917        });
38918        $3.ajaxTransport("iframe", function(options, origOptions, jqXHR) {
38919          var form = null, iframe = null, name = "iframe-" + $3.now(), files = $3(options.files), markers = null, accepts = null;
38920          function cleanUp() {
38921            files.each(function(i, file) {
38922              var $file = $3(file);
38923              $file.data("clone").replaceWith($file);
38924            });
38925            form.remove();
38926            iframe.one("load", function() {
38927              iframe.remove();
38928            });
38929            iframe.attr("src", "javascript:false;");
38930          }
38931          options.dataTypes.shift();
38932          options.data = origOptions.data;
38933          if (files.length) {
38934            form = $3("<form enctype='multipart/form-data' method='post'></form>").hide().attr({ action: options.originalURL, target: name });
38935            if (typeof options.data === "string" && options.data.length > 0) {
38936              $3.error("data must not be serialized");
38937            }
38938            $3.each(options.data || {}, function(name2, value) {
38939              if ($3.isPlainObject(value)) {
38940                name2 = value.name;
38941                value = value.value;
38942              }
38943              $3("<input type='hidden' />").attr({ name: name2, value }).appendTo(form);
38944            });
38945            $3("<input type='hidden' value='IFrame' name='X-Requested-With' />").appendTo(form);
38946            if (options.dataTypes[0] && options.accepts[options.dataTypes[0]]) {
38947              accepts = options.accepts[options.dataTypes[0]] + (options.dataTypes[0] !== "*" ? ", */*; q=0.01" : "");
38948            } else {
38949              accepts = options.accepts["*"];
38950            }
38951            $3("<input type='hidden' name='X-HTTP-Accept'>").attr("value", accepts).appendTo(form);
38952            markers = files.after(function(idx) {
38953              var $this = $3(this), $clone = $this.clone().prop("disabled", true);
38954              $this.data("clone", $clone);
38955              return $clone;
38956            }).next();
38957            files.appendTo(form);
38958            return {
38959              // The `send` function is called by jQuery when the request should be
38960              // sent.
38961              send: function(headers, completeCallback) {
38962                iframe = $3("<iframe name='" + name + "' id='" + name + "' style='display:none'></iframe>");
38963                iframe.one("load", function() {
38964                  iframe.one("load", function() {
38965                    var doc = this.contentWindow ? this.contentWindow.document : this.contentDocument ? this.contentDocument : this.document, root = doc.documentElement ? doc.documentElement : doc.body, textarea = root.getElementsByTagName("textarea")[0], type = textarea && textarea.getAttribute("data-type") || null, status = textarea && textarea.getAttribute("data-status") || 200, statusText = textarea && textarea.getAttribute("data-statusText") || "OK", content = {
38966                      html: root.innerHTML,
38967                      text: type ? textarea.value : root ? root.textContent || root.innerText : null
38968                    };
38969                    cleanUp();
38970                    completeCallback(status, statusText, content, type ? "Content-Type: " + type : null);
38971                  });
38972                  form[0].submit();
38973                });
38974                $3("body").append(form, iframe);
38975              },
38976              // The `abort` function is called by jQuery when the request should be
38977              // aborted.
38978              abort: function() {
38979                if (iframe !== null) {
38980                  iframe.unbind("load").attr("src", "javascript:false;");
38981                  cleanUp();
38982                }
38983              }
38984            };
38985          }
38986        });
38987      })(jQuery);
38988    }
38989  });
38990
38991  
vendor: 9,199 bytes, lines 38991-39220
38991// apps/base/assets/javascripts/vendor/jquery.query-object.js
38992  var require_jquery_query_object = __commonJS({
38993    "apps/base/assets/javascripts/vendor/jquery.query-object.js"() {
38994      "use strict";
38995      init_esbuild_shims();
38996      new function(settings) {
38997        var $separator = settings.separator || "&";
38998        var $spaces = settings.spaces === false ? false : true;
38999        var $suffix = settings.suffix === false ? "" : "[]";
39000        var $prefix = settings.prefix === false ? false : true;
39001        var $hash = $prefix ? settings.hash === true ? "#" : "?" : "";
39002        var $numbers = settings.numbers === false ? false : true;
39003        jQuery.query = new function() {
39004          var is = function(o, t2) {
39005            return o != void 0 && o !== null && (!!t2 ? o.constructor == t2 : true);
39006          };
39007          var parse = function(path) {
39008            var m, rx = /\[([^[]*)\]/g, match = /^([^[]+)(\[.*\])?$/.exec(path), base = match[1], tokens = [];
39009            while (m = rx.exec(match[2])) tokens.push(m[1]);
39010            return [base, tokens];
39011          };
39012          var set = function(target, tokens, value) {
39013            var o, token = tokens.shift();
39014            if (typeof target != "object") target = null;
39015            if (token === "") {
39016              if (!target) target = [];
39017              if (is(target, Array)) {
39018                target.push(tokens.length == 0 ? value : set(null, tokens.slice(0), value));
39019              } else if (is(target, Object)) {
39020                var i = 0;
39021                while (target[i++] != null) ;
39022                target[--i] = tokens.length == 0 ? value : set(target[i], tokens.slice(0), value);
39023              } else {
39024                target = [];
39025                target.push(tokens.length == 0 ? value : set(null, tokens.slice(0), value));
39026              }
39027            } else if (token && token.match(/^\s*[0-9]+\s*$/)) {
39028              var index = parseInt(token, 10);
39029              if (!target) target = [];
39030              target[index] = tokens.length == 0 ? value : set(target[index], tokens.slice(0), value);
39031            } else if (token) {
39032              var index = token.replace(/^\s*|\s*$/g, "");
39033              if (!target) target = {};
39034              if (is(target, Array)) {
39035                var temp = {};
39036                for (var i = 0; i < target.length; ++i) {
39037                  temp[i] = target[i];
39038                }
39039                target = temp;
39040              }
39041              target[index] = tokens.length == 0 ? value : set(target[index], tokens.slice(0), value);
39042            } else {
39043              return value;
39044            }
39045            return target;
39046          };
39047          var queryObject = function(a) {
39048            var self2 = this;
39049            self2.keys = {};
39050            if (a.queryObject) {
39051              jQuery.each(a.get(), function(key, val) {
39052                self2.SET(key, val);
39053              });
39054            } else {
39055              self2.parseNew.apply(self2, arguments);
39056            }
39057            return self2;
39058          };
39059          queryObject.prototype = {
39060            queryObject: true,
39061            parseNew: function() {
39062              var self2 = this;
39063              self2.keys = {};
39064              jQuery.each(arguments, function() {
39065                var q = "" + this;
39066                q = q.replace(/^[?#]/, "");
39067                q = q.replace(/[;&]$/, "");
39068                if ($spaces) q = q.replace(/[+]/g, " ");
39069                jQuery.each(q.split(/[&;]/), function() {
39070                  var key = decodeURIComponent(this.split("=")[0] || "");
39071                  var val = decodeURIComponent(this.split("=")[1] || "");
39072                  if (!key) return;
39073                  if ($numbers) {
39074                    if (/^[+-]?[0-9]+\.[0-9]*$/.test(val))
39075                      val = parseFloat(val);
39076                    else if (/^[+-]?[0-9]+$/.test(val))
39077                      val = parseInt(val, 10);
39078                  }
39079                  val = !val && val !== 0 ? true : val;
39080                  self2.SET(key, val);
39081                });
39082              });
39083              return self2;
39084            },
39085            has: function(key, type) {
39086              var value = this.get(key);
39087              return is(value, type);
39088            },
39089            GET: function(key) {
39090              if (!is(key)) return this.keys;
39091              var parsed = parse(key), base = parsed[0], tokens = parsed[1];
39092              var target = this.keys[base];
39093              while (target != null && tokens.length != 0) {
39094                target = target[tokens.shift()];
39095              }
39096              return typeof target == "number" ? target : target || "";
39097            },
39098            get: function(key) {
39099              var target = this.GET(key);
39100              if (is(target, Object))
39101                return jQuery.extend(true, {}, target);
39102              else if (is(target, Array))
39103                return target.slice(0);
39104              return target;
39105            },
39106            SET: function(key, val) {
39107              var value = !is(val) ? null : val;
39108              var parsed = parse(key), base = parsed[0], tokens = parsed[1];
39109              var target = this.keys[base];
39110              this.keys[base] = set(target, tokens.slice(0), value);
39111              return this;
39112            },
39113            set: function(key, val) {
39114              return this.copy().SET(key, val);
39115            },
39116            REMOVE: function(key, val) {
39117              if (val) {
39118                var target = this.GET(key);
39119                if (is(target, Array)) {
39120                  for (tval in target) {
39121                    target[tval] = target[tval].toString();
39122                  }
39123                  var index = $.inArray(val, target);
39124                  if (index >= 0) {
39125                    key = target.splice(index, 1);
39126                    key = key[index];
39127                  } else {
39128                    return;
39129                  }
39130                } else if (val != target) {
39131                  return;
39132                }
39133              }
39134              return this.SET(key, null).COMPACT();
39135            },
39136            remove: function(key, val) {
39137              return this.copy().REMOVE(key, val);
39138            },
39139            EMPTY: function() {
39140              var self2 = this;
39141              jQuery.each(self2.keys, function(key, value) {
39142                delete self2.keys[key];
39143              });
39144              return self2;
39145            },
39146            load: function(url) {
39147              var hash = url.replace(/^.*?[#](.+?)(?:\?.+)?$/, "$1");
39148              var search = url.replace(/^.*?[?](.+?)(?:#.+)?$/, "$1");
39149              return new queryObject(url.length == search.length ? "" : search, url.length == hash.length ? "" : hash);
39150            },
39151            empty: function() {
39152              return this.copy().EMPTY();
39153            },
39154            copy: function() {
39155              return new queryObject(this);
39156            },
39157            COMPACT: function() {
39158              function build(orig) {
39159                var obj = typeof orig == "object" ? is(orig, Array) ? [] : {} : orig;
39160                if (typeof orig == "object") {
39161                  let add2 = function(o, key, value) {
39162                    if (is(o, Array))
39163                      o.push(value);
39164                    else
39165                      o[key] = value;
39166                  };
39167                  var add = add2;
39168                  jQuery.each(orig, function(key, value) {
39169                    if (!is(value)) return true;
39170                    add2(obj, key, build(value));
39171                  });
39172                }
39173                return obj;
39174              }
39175              this.keys = build(this.keys);
39176              return this;
39177            },
39178            compact: function() {
39179              return this.copy().COMPACT();
39180            },
39181            toString: function() {
39182              var i = 0, queryString = [], chunks = [], self2 = this;
39183              var encode = function(str) {
39184                str = str + "";
39185                if ($spaces) str = str.replace(/ /g, "+");
39186                return encodeURIComponent(str);
39187              };
39188              var addFields = function(arr, key, value) {
39189                if (!is(value) || value === false) return;
39190                var o = [encode(key)];
39191                if (value !== true) {
39192                  o.push("=");
39193                  o.push(encode(value));
39194                }
39195                arr.push(o.join(""));
39196              };
39197              var build = function(obj, base) {
39198                var newKey = function(key) {
39199                  return !base || base == "" ? [key].join("") : [base, "[", key, "]"].join("");
39200                };
39201                jQuery.each(obj, function(key, value) {
39202                  if (typeof value == "object")
39203                    build(value, newKey(key));
39204                  else
39205                    addFields(chunks, newKey(key), value);
39206                });
39207              };
39208              build(this.keys);
39209              if (chunks.length > 0) queryString.push($hash);
39210              queryString.push(chunks.join($separator));
39211              return queryString.join("");
39212            }
39213          };
39214          return new queryObject(location.search, location.hash);
39215        }();
39216      }(jQuery.query || {});
39217    }
39218  });
39219
39220  
39220// apps/base/assets/javascripts/vendor/jquery.select-to-autocomplete.js
39221  var require_jquery_select_to_autocomplete = __commonJS({
39222    "apps/base/assets/javascripts/vendor/jquery.select-to-autocomplete.js"() {
39223      "use strict";
39224      init_esbuild_shims();
39225      (function($3) {
39226        var settings = {
39227          "sort": false,
39228          "sort-attr": "data-priority",
39229          "sort-desc": false,
39230          "autoselect": true,
39231          "alternative-spellings": true,
39232          "alternative-spellings-attr": "data-alternative-spellings",
39233          "remove-valueless-options": true,
39234          "copy-attributes-to-text-field": true,
39235          "autocomplete-plugin": "jquery_ui",
39236          "relevancy-sorting": true,
39237          "relevancy-sorting-partial-match-value": 1,
39238          "relevancy-sorting-strict-match-value": 5,
39239          "relevancy-sorting-booster-attr": "data-relevancy-booster",
39240          "minLength": 0,
39241          "delay": 0,
39242          "autoFocus": true,
39243          handle_invalid_input: function(context) {
39244            var selected_finder = "option:selected:first";
39245            if (context.settings["remove-valueless-options"]) {
39246              selected_finder = 'option:selected[value!=""]:first';
39247            }
39248            context.$text_field.val(context.$select_field.find(selected_finder).text());
39249          },
39250          handle_select_field: function($select_field) {
39251            return $select_field.hide();
39252          },
39253          insert_text_field: function(context) {
39254            var $text_field = $3('<input type="text"></input>');
39255            if (settings["copy-attributes-to-text-field"]) {
39256              var attrs = {};
39257              var raw_attrs = context.$select_field[0].attributes;
39258              for (var i = 0; i < raw_attrs.length; i++) {
39259                var key = raw_attrs[i].nodeName;
39260                var value = raw_attrs[i].nodeValue;
39261                if (key !== "name" && key !== "id" && typeof context.$select_field.attr(key) !== "undefined") {
39262                  attrs[key] = value;
39263                }
39264              }
39265              ;
39266              $text_field.attr(attrs);
39267            }
39268            $text_field.blur(function() {
39269              var valid_values = context.$select_field.find("option").map(function(i2, option) {
39270                return $3(option).text();
39271              });
39272              if ($3.inArray($text_field.val(), valid_values) < 0 && typeof settings["handle_invalid_input"] === "function") {
39273                settings["handle_invalid_input"](context);
39274              }
39275            });
39276            if (context.settings["autoselect"]) {
39277              $text_field.click(function() {
39278                this.select();
39279              });
39280            }
39281            var selected_finder = "option:selected:first";
39282            if (context.settings["remove-valueless-options"]) {
39283              selected_finder = 'option:selected[value!=""]:first';
39284            }
39285            return $text_field.val(context.$select_field.find(selected_finder).text()).insertAfter(context.$select_field);
39286          },
39287          extract_options: function($select_field) {
39288            var options = [];
39289            var $options = $select_field.find("option");
39290            var number_of_options = $options.length;
39291            $options.each(function() {
39292              var $option = $3(this);
39293              var option = {
39294                "real-value": $option.attr("value"),
39295                "label": $option.text()
39296              };
39297              if (settings["remove-valueless-options"] && option["real-value"] === "") {
39298              } else {
39299                option["matches"] = option["label"];
39300                var alternative_spellings = $option.attr(settings["alternative-spellings-attr"]);
39301                if (alternative_spellings) {
39302                  option["matches"] += " " + alternative_spellings;
39303                }
39304                if (settings["sort"]) {
39305                  var weight = parseInt($option.attr(settings["sort-attr"]), 10);
39306                  if (weight) {
39307                    option["weight"] = weight;
39308                  } else {
39309                    option["weight"] = number_of_options;
39310                  }
39311                }
39312                if (settings["relevancy-sorting"]) {
39313                  option["relevancy-score"] = 0;
39314                  option["relevancy-score-booster"] = 1;
39315                  var boost_by = parseFloat($option.attr(settings["relevancy-sorting-booster-attr"]));
39316                  if (boost_by) {
39317                    option["relevancy-score-booster"] = boost_by;
39318                  }
39319                }
39320                options.push(option);
39321              }
39322            });
39323            if (settings["sort"]) {
39324              if (settings["sort-desc"]) {
39325                options.sort(function(a, b) {
39326                  return b["weight"] - a["weight"];
39327                });
39328              } else {
39329                options.sort(function(a, b) {
39330                  return a["weight"] - b["weight"];
39331                });
39332              }
39333            }
39334            return options;
39335          }
39336        };
39337        var public_methods = {
39338          init: function(customizations) {
39339            if (/msie/.test(navigator.userAgent.toLowerCase()) && parseInt(navigator.appVersion, 10) <= 6) {
39340              return this;
39341            } else {
39342              settings = $3.extend(settings, customizations);
39343              return this.each(function() {
39344                var $select_field = $3(this);
39345                var context = {
39346                  "$select_field": $select_field,
39347                  "options": settings["extract_options"]($select_field),
39348                  "settings": settings
39349                };
39350                context["$text_field"] = settings["insert_text_field"](context);
39351                settings["handle_select_field"]($select_field);
39352                if (typeof settings["autocomplete-plugin"] === "string") {
39353                  adapters[settings["autocomplete-plugin"]](context);
39354                } else {
39355                  settings["autocomplete-plugin"](context);
39356                }
39357              });
39358            }
39359          }
39360        };
39361        var adapters = {
39362          jquery_ui: function(context) {
39363            var filter_options = function(term) {
39364              var split_term = term.split(" ");
39365              var matchers = [];
39366              for (var i = 0; i < split_term.length; i++) {
39367                if (split_term[i].length > 0) {
39368                  var matcher = {};
39369                  matcher["partial"] = new RegExp($3.ui.autocomplete.escapeRegex(split_term[i]), "i");
39370                  if (context.settings["relevancy-sorting"]) {
39371                    matcher["strict"] = new RegExp("^" + $3.ui.autocomplete.escapeRegex(split_term[i]), "i");
39372                  }
39373                  matchers.push(matcher);
39374                }
39375              }
39376              ;
39377              return $3.grep(context.options, function(option) {
39378                var partial_matches = 0;
39379                if (context.settings["relevancy-sorting"]) {
39380                  var strict_match = false;
39381                  var split_option_matches = option.matches.split(" ");
39382                }
39383                for (var i2 = 0; i2 < matchers.length; i2++) {
39384                  if (matchers[i2]["partial"].test(option.matches)) {
39385                    partial_matches++;
39386                  }
39387                  if (context.settings["relevancy-sorting"]) {
39388                    for (var q = 0; q < split_option_matches.length; q++) {
39389                      if (matchers[i2]["strict"].test(split_option_matches[q])) {
39390                        strict_match = true;
39391                        break;
39392                      }
39393                    }
39394                    ;
39395                  }
39396                }
39397                ;
39398                if (context.settings["relevancy-sorting"]) {
39399                  var option_score = 0;
39400                  option_score += partial_matches * context.settings["relevancy-sorting-partial-match-value"];
39401                  if (strict_match) {
39402                    option_score += context.settings["relevancy-sorting-strict-match-value"];
39403                  }
39404                  option_score = option_score * option["relevancy-score-booster"];
39405                  option["relevancy-score"] = option_score;
39406                }
39407                return !term || matchers.length === partial_matches;
39408              });
39409            };
39410            var update_select_value = function(option) {
39411              if (option) {
39412                if (context.$select_field.val() !== option["real-value"]) {
39413                  context.$select_field.val(option["real-value"]);
39414                  context.$select_field.change();
39415                }
39416              } else {
39417                var option_name = context.$text_field.val().toLowerCase();
39418                var matching_option = { "real-value": false };
39419                for (var i = 0; i < context.options.length; i++) {
39420                  if (option_name === context.options[i]["label"].toLowerCase()) {
39421                    matching_option = context.options[i];
39422                    break;
39423                  }
39424                }
39425                ;
39426                if (context.$select_field.val() !== matching_option["real-value"]) {
39427                  context.$select_field.val(matching_option["real-value"] || "");
39428                  context.$select_field.change();
39429                }
39430                if (matching_option["real-value"]) {
39431                  context.$text_field.val(matching_option["label"]);
39432                }
39433                if (typeof context.settings["handle_invalid_input"] === "function" && context.$select_field.val() === "") {
39434                  context.settings["handle_invalid_input"](context);
39435                }
39436              }
39437            };
39438            context.$text_field.autocomplete({
39439              "minLength": context.settings["minLength"],
39440              "delay": context.settings["delay"],
39441              "autoFocus": context.settings["autoFocus"],
39442              source: function(request, response) {
39443                var filtered_options = filter_options(request.term);
39444                if (context.settings["relevancy-sorting"]) {
39445                  filtered_options = filtered_options.sort(function(a, b) {
39446                    if (b["relevancy-score"] == a["relevancy-score"]) {
39447                      return b["label"] < a["label"] ? 1 : -1;
39448                    } else {
39449                      return b["relevancy-score"] - a["relevancy-score"];
39450                    }
39451                  });
39452                }
39453                response(filtered_options);
39454              },
39455              select: function(event2, ui) {
39456                update_select_value(ui.item);
39457              },
39458              change: function(event2, ui) {
39459                update_select_value(ui.item);
39460              }
39461            });
39462            context.$text_field.parents("form:first").submit(function() {
39463              update_select_value();
39464            });
39465            update_select_value();
39466          }
39467        };
39468        $3.fn.selectToAutocomplete = function(method) {
39469          if (public_methods[method]) {
39470            return public_methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
39471          } else if (typeof method === "object" || !method) {
39472            return public_methods.init.apply(this, arguments);
39473          } else {
39474            $3.error("Method " + method + " does not exist on jQuery.fn.selectToAutocomplete");
39475          }
39476        };
39477      })(jQuery);
39478    }
39479  });
39480
39481  
39481// apps/base/assets/javascripts/vendor/jquery.touchSwipe.min.js
39482  var require_jquery_touchSwipe_min = __commonJS({
39483    "apps/base/assets/javascripts/vendor/jquery.touchSwipe.min.js"(exports, module) {
39484      "use strict";
39485      init_esbuild_shims();
39486      (function(a) {
39487        if (typeof define === "function" && define.amd && define.amd.jQuery) {
39488          define(["jquery"], a);
39489        } else {
39490          if (typeof module !== "undefined" && module.exports) {
39491            a(require_jquery());
39492          } else {
39493            a(jQuery);
39494          }
39495        }
39496      })(function(f) {
39497        var y = "1.6.15", p = "left", o = "right", e = "up", x = "down", c = "in", A = "out", m = "none", s = "auto", l = "swipe", t2 = "pinch", B = "tap", j = "doubletap", b = "longtap", z = "hold", E = "horizontal", u = "vertical", i = "all", r = 10, g = "start", k = "move", h = "end", q = "cancel", a = "ontouchstart" in window, v = window.navigator.msPointerEnabled && !window.navigator.pointerEnabled && !a, d = (window.navigator.pointerEnabled || window.navigator.msPointerEnabled) && !a, C = "TouchSwipe";
39498        var n = { fingers: 1, threshold: 75, cancelThreshold: null, pinchThreshold: 20, maxTimeThreshold: null, fingerReleaseThreshold: 250, longTapThreshold: 500, doubleTapThreshold: 200, swipe: null, swipeLeft: null, swipeRight: null, swipeUp: null, swipeDown: null, swipeStatus: null, pinchIn: null, pinchOut: null, pinchStatus: null, click: null, tap: null, doubleTap: null, longTap: null, hold: null, triggerOnTouchEnd: true, triggerOnTouchLeave: false, allowPageScroll: "auto", fallbackToMouseEvents: true, excludedElements: "label, button, input, select, textarea, a, .noSwipe", preventDefaultEvents: true };
39499        f.fn.swipe = function(H) {
39500          var G = f(this), F = G.data(C);
39501          if (F && typeof H === "string") {
39502            if (F[H]) {
39503              return F[H].apply(this, Array.prototype.slice.call(arguments, 1));
39504            } else {
39505              f.error("Method " + H + " does not exist on jQuery.swipe");
39506            }
39507          } else {
39508            if (F && typeof H === "object") {
39509              F.option.apply(this, arguments);
39510            } else {
39511              if (!F && (typeof H === "object" || !H)) {
39512                return w.apply(this, arguments);
39513              }
39514            }
39515          }
39516          return G;
39517        };
39518        f.fn.swipe.version = y;
39519        f.fn.swipe.defaults = n;
39520        f.fn.swipe.phases = { PHASE_START: g, PHASE_MOVE: k, PHASE_END: h, PHASE_CANCEL: q };
39521        f.fn.swipe.directions = { LEFT: p, RIGHT: o, UP: e, DOWN: x, IN: c, OUT: A };
39522        f.fn.swipe.pageScroll = { NONE: m, HORIZONTAL: E, VERTICAL: u, AUTO: s };
39523        f.fn.swipe.fingers = { ONE: 1, TWO: 2, THREE: 3, FOUR: 4, FIVE: 5, ALL: i };
39524        function w(F) {
39525          if (F && (F.allowPageScroll === void 0 && (F.swipe !== void 0 || F.swipeStatus !== void 0))) {
39526            F.allowPageScroll = m;
39527          }
39528          if (F.click !== void 0 && F.tap === void 0) {
39529            F.tap = F.click;
39530          }
39531          if (!F) {
39532            F = {};
39533          }
39534          F = f.extend({}, f.fn.swipe.defaults, F);
39535          return this.each(function() {
39536            var H = f(this);
39537            var G = H.data(C);
39538            if (!G) {
39539              G = new D(this, F);
39540              H.data(C, G);
39541            }
39542          });
39543        }
39544        function D(a5, au) {
39545          var au = f.extend({}, au);
39546          var az = a || d || !au.fallbackToMouseEvents, K = az ? d ? v ? "MSPointerDown" : "pointerdown" : "touchstart" : "mousedown", ax = az ? d ? v ? "MSPointerMove" : "pointermove" : "touchmove" : "mousemove", V = az ? d ? v ? "MSPointerUp" : "pointerup" : "touchend" : "mouseup", T = az ? d ? "mouseleave" : null : "mouseleave", aD = d ? v ? "MSPointerCancel" : "pointercancel" : "touchcancel";
39547          var ag = 0, aP = null, a2 = null, ac = 0, a1 = 0, aZ = 0, H = 1, ap = 0, aJ = 0, N = null;
39548          var aR = f(a5);
39549          var aa = "start";
39550          var X = 0;
39551          var aQ = {};
39552          var U = 0, a3 = 0, a6 = 0, ay = 0, O = 0;
39553          var aW = null, af = null;
39554          try {
39555            aR.bind(K, aN);
39556            aR.bind(aD, ba);
39557          } catch (aj) {
39558            f.error("events not supported " + K + "," + aD + " on jQuery.swipe");
39559          }
39560          this.enable = function() {
39561            aR.bind(K, aN);
39562            aR.bind(aD, ba);
39563            return aR;
39564          };
39565          this.disable = function() {
39566            aK();
39567            return aR;
39568          };
39569          this.destroy = function() {
39570            aK();
39571            aR.data(C, null);
39572            aR = null;
39573          };
39574          this.option = function(bd, bc) {
39575            if (typeof bd === "object") {
39576              au = f.extend(au, bd);
39577            } else {
39578              if (au[bd] !== void 0) {
39579                if (bc === void 0) {
39580                  return au[bd];
39581                } else {
39582                  au[bd] = bc;
39583                }
39584              } else {
39585                if (!bd) {
39586                  return au;
39587                } else {
39588                  f.error("Option " + bd + " does not exist on jQuery.swipe.options");
39589                }
39590              }
39591            }
39592            return null;
39593          };
39594          function aN(be) {
39595            if (aB()) {
39596              return;
39597            }
39598            if (f(be.target).closest(au.excludedElements, aR).length > 0) {
39599              return;
39600            }
39601            var bf = be.originalEvent ? be.originalEvent : be;
39602            var bd, bg = bf.touches, bc = bg ? bg[0] : bf;
39603            aa = g;
39604            if (bg) {
39605              X = bg.length;
39606            } else {
39607              if (au.preventDefaultEvents !== false) {
39608                be.preventDefault();
39609              }
39610            }
39611            ag = 0;
39612            aP = null;
39613            a2 = null;
39614            aJ = null;
39615            ac = 0;
39616            a1 = 0;
39617            aZ = 0;
39618            H = 1;
39619            ap = 0;
39620            N = ab();
39621            S();
39622            ai(0, bc);
39623            if (!bg || (X === au.fingers || au.fingers === i) || aX()) {
39624              U = ar();
39625              if (X == 2) {
39626                ai(1, bg[1]);
39627                a1 = aZ = at(aQ[0].start, aQ[1].start);
39628              }
39629              if (au.swipeStatus || au.pinchStatus) {
39630                bd = P(bf, aa);
39631              }
39632            } else {
39633              bd = false;
39634            }
39635            if (bd === false) {
39636              aa = q;
39637              P(bf, aa);
39638              return bd;
39639            } else {
39640              if (au.hold) {
39641                af = setTimeout(f.proxy(function() {
39642                  aR.trigger("hold", [bf.target]);
39643                  if (au.hold) {
39644                    bd = au.hold.call(aR, bf, bf.target);
39645                  }
39646                }, this), au.longTapThreshold);
39647              }
39648              an(true);
39649            }
39650            return null;
39651          }
39652          function a4(bf) {
39653            var bi = bf.originalEvent ? bf.originalEvent : bf;
39654            if (aa === h || aa === q || al()) {
39655              return;
39656            }
39657            var be, bj = bi.touches, bd = bj ? bj[0] : bi;
39658            var bg = aH(bd);
39659            a3 = ar();
39660            if (bj) {
39661              X = bj.length;
39662            }
39663            if (au.hold) {
39664              clearTimeout(af);
39665            }
39666            aa = k;
39667            if (X == 2) {
39668              if (a1 == 0) {
39669                ai(1, bj[1]);
39670                a1 = aZ = at(aQ[0].start, aQ[1].start);
39671              } else {
39672                aH(bj[1]);
39673                aZ = at(aQ[0].end, aQ[1].end);
39674                aJ = aq(aQ[0].end, aQ[1].end);
39675              }
39676              H = a8(a1, aZ);
39677              ap = Math.abs(a1 - aZ);
39678            }
39679            if (X === au.fingers || au.fingers === i || !bj || aX()) {
39680              aP = aL(bg.start, bg.end);
39681              a2 = aL(bg.last, bg.end);
39682              ak(bf, a2);
39683              ag = aS(bg.start, bg.end);
39684              ac = aM();
39685              aI(aP, ag);
39686              be = P(bi, aa);
39687              if (!au.triggerOnTouchEnd || au.triggerOnTouchLeave) {
39688                var bc = true;
39689                if (au.triggerOnTouchLeave) {
39690                  var bh = aY(this);
39691                  bc = F(bg.end, bh);
39692                }
39693                if (!au.triggerOnTouchEnd && bc) {
39694                  aa = aC(k);
39695                } else {
39696                  if (au.triggerOnTouchLeave && !bc) {
39697                    aa = aC(h);
39698                  }
39699                }
39700                if (aa == q || aa == h) {
39701                  P(bi, aa);
39702                }
39703              }
39704            } else {
39705              aa = q;
39706              P(bi, aa);
39707            }
39708            if (be === false) {
39709              aa = q;
39710              P(bi, aa);
39711            }
39712          }
39713          function M(bc) {
39714            var bd = bc.originalEvent ? bc.originalEvent : bc, be = bd.touches;
39715            if (be) {
39716              if (be.length && !al()) {
39717                G(bd);
39718                return true;
39719              } else {
39720                if (be.length && al()) {
39721                  return true;
39722                }
39723              }
39724            }
39725            if (al()) {
39726              X = ay;
39727            }
39728            a3 = ar();
39729            ac = aM();
39730            if (bb() || !am()) {
39731              aa = q;
39732              P(bd, aa);
39733            } else {
39734              if (au.triggerOnTouchEnd || au.triggerOnTouchEnd == false && aa === k) {
39735                if (au.preventDefaultEvents !== false) {
39736                  bc.preventDefault();
39737                }
39738                aa = h;
39739                P(bd, aa);
39740              } else {
39741                if (!au.triggerOnTouchEnd && a7()) {
39742                  aa = h;
39743                  aF(bd, aa, B);
39744                } else {
39745                  if (aa === k) {
39746                    aa = q;
39747                    P(bd, aa);
39748                  }
39749                }
39750              }
39751            }
39752            an(false);
39753            return null;
39754          }
39755          function ba() {
39756            X = 0;
39757            a3 = 0;
39758            U = 0;
39759            a1 = 0;
39760            aZ = 0;
39761            H = 1;
39762            S();
39763            an(false);
39764          }
39765          function L(bc) {
39766            var bd = bc.originalEvent ? bc.originalEvent : bc;
39767            if (au.triggerOnTouchLeave) {
39768              aa = aC(h);
39769              P(bd, aa);
39770            }
39771          }
39772          function aK() {
39773            aR.unbind(K, aN);
39774            aR.unbind(aD, ba);
39775            aR.unbind(ax, a4);
39776            aR.unbind(V, M);
39777            if (T) {
39778              aR.unbind(T, L);
39779            }
39780            an(false);
39781          }
39782          function aC(bg) {
39783            var bf = bg;
39784            var be = aA();
39785            var bd = am();
39786            var bc = bb();
39787            if (!be || bc) {
39788              bf = q;
39789            } else {
39790              if (bd && bg == k && (!au.triggerOnTouchEnd || au.triggerOnTouchLeave)) {
39791                bf = h;
39792              } else {
39793                if (!bd && bg == h && au.triggerOnTouchLeave) {
39794                  bf = q;
39795                }
39796              }
39797            }
39798            return bf;
39799          }
39800          function P(be, bc) {
39801            var bd, bf = be.touches;
39802            if (J() || W()) {
39803              bd = aF(be, bc, l);
39804            }
39805            if ((Q() || aX()) && bd !== false) {
39806              bd = aF(be, bc, t2);
39807            }
39808            if (aG() && bd !== false) {
39809              bd = aF(be, bc, j);
39810            } else {
39811              if (ao() && bd !== false) {
39812                bd = aF(be, bc, b);
39813              } else {
39814                if (ah() && bd !== false) {
39815                  bd = aF(be, bc, B);
39816                }
39817              }
39818            }
39819            if (bc === q) {
39820              if (W()) {
39821                bd = aF(be, bc, l);
39822              }
39823              if (aX()) {
39824                bd = aF(be, bc, t2);
39825              }
39826              ba(be);
39827            }
39828            if (bc === h) {
39829              if (bf) {
39830                if (!bf.length) {
39831                  ba(be);
39832                }
39833              } else {
39834                ba(be);
39835              }
39836            }
39837            return bd;
39838          }
39839          function aF(bf, bc, be) {
39840            var bd;
39841            if (be == l) {
39842              aR.trigger("swipeStatus", [bc, aP || null, ag || 0, ac || 0, X, aQ, a2]);
39843              if (au.swipeStatus) {
39844                bd = au.swipeStatus.call(aR, bf, bc, aP || null, ag || 0, ac || 0, X, aQ, a2);
39845                if (bd === false) {
39846                  return false;
39847                }
39848              }
39849              if (bc == h && aV()) {
39850                clearTimeout(aW);
39851                clearTimeout(af);
39852                aR.trigger("swipe", [aP, ag, ac, X, aQ, a2]);
39853                if (au.swipe) {
39854                  bd = au.swipe.call(aR, bf, aP, ag, ac, X, aQ, a2);
39855                  if (bd === false) {
39856                    return false;
39857                  }
39858                }
39859                switch (aP) {
39860                  case p:
39861                    aR.trigger("swipeLeft", [aP, ag, ac, X, aQ, a2]);
39862                    if (au.swipeLeft) {
39863                      bd = au.swipeLeft.call(aR, bf, aP, ag, ac, X, aQ, a2);
39864                    }
39865                    break;
39866                  case o:
39867                    aR.trigger("swipeRight", [aP, ag, ac, X, aQ, a2]);
39868                    if (au.swipeRight) {
39869                      bd = au.swipeRight.call(aR, bf, aP, ag, ac, X, aQ, a2);
39870                    }
39871                    break;
39872                  case e:
39873                    aR.trigger("swipeUp", [aP, ag, ac, X, aQ, a2]);
39874                    if (au.swipeUp) {
39875                      bd = au.swipeUp.call(aR, bf, aP, ag, ac, X, aQ, a2);
39876                    }
39877                    break;
39878                  case x:
39879                    aR.trigger("swipeDown", [aP, ag, ac, X, aQ, a2]);
39880                    if (au.swipeDown) {
39881                      bd = au.swipeDown.call(aR, bf, aP, ag, ac, X, aQ, a2);
39882                    }
39883                    break;
39884                }
39885              }
39886            }
39887            if (be == t2) {
39888              aR.trigger("pinchStatus", [bc, aJ || null, ap || 0, ac || 0, X, H, aQ]);
39889              if (au.pinchStatus) {
39890                bd = au.pinchStatus.call(aR, bf, bc, aJ || null, ap || 0, ac || 0, X, H, aQ);
39891                if (bd === false) {
39892                  return false;
39893                }
39894              }
39895              if (bc == h && a9()) {
39896                switch (aJ) {
39897                  case c:
39898                    aR.trigger("pinchIn", [aJ || null, ap || 0, ac || 0, X, H, aQ]);
39899                    if (au.pinchIn) {
39900                      bd = au.pinchIn.call(aR, bf, aJ || null, ap || 0, ac || 0, X, H, aQ);
39901                    }
39902                    break;
39903                  case A:
39904                    aR.trigger("pinchOut", [aJ || null, ap || 0, ac || 0, X, H, aQ]);
39905                    if (au.pinchOut) {
39906                      bd = au.pinchOut.call(aR, bf, aJ || null, ap || 0, ac || 0, X, H, aQ);
39907                    }
39908                    break;
39909                }
39910              }
39911            }
39912            if (be == B) {
39913              if (bc === q || bc === h) {
39914                clearTimeout(aW);
39915                clearTimeout(af);
39916                if (Z() && !I()) {
39917                  O = ar();
39918                  aW = setTimeout(f.proxy(function() {
39919                    O = null;
39920                    aR.trigger("tap", [bf.target]);
39921                    if (au.tap) {
39922                      bd = au.tap.call(aR, bf, bf.target);
39923                    }
39924                  }, this), au.doubleTapThreshold);
39925                } else {
39926                  O = null;
39927                  aR.trigger("tap", [bf.target]);
39928                  if (au.tap) {
39929                    bd = au.tap.call(aR, bf, bf.target);
39930                  }
39931                }
39932              }
39933            } else {
39934              if (be == j) {
39935                if (bc === q || bc === h) {
39936                  clearTimeout(aW);
39937                  clearTimeout(af);
39938                  O = null;
39939                  aR.trigger("doubletap", [bf.target]);
39940                  if (au.doubleTap) {
39941                    bd = au.doubleTap.call(aR, bf, bf.target);
39942                  }
39943                }
39944              } else {
39945                if (be == b) {
39946                  if (bc === q || bc === h) {
39947                    clearTimeout(aW);
39948                    O = null;
39949                    aR.trigger("longtap", [bf.target]);
39950                    if (au.longTap) {
39951                      bd = au.longTap.call(aR, bf, bf.target);
39952                    }
39953                  }
39954                }
39955              }
39956            }
39957            return bd;
39958          }
39959          function am() {
39960            var bc = true;
39961            if (au.threshold !== null) {
39962              bc = ag >= au.threshold;
39963            }
39964            return bc;
39965          }
39966          function bb() {
39967            var bc = false;
39968            if (au.cancelThreshold !== null && aP !== null) {
39969              bc = aT(aP) - ag >= au.cancelThreshold;
39970            }
39971            return bc;
39972          }
39973          function ae() {
39974            if (au.pinchThreshold !== null) {
39975              return ap >= au.pinchThreshold;
39976            }
39977            return true;
39978          }
39979          function aA() {
39980            var bc;
39981            if (au.maxTimeThreshold) {
39982              if (ac >= au.maxTimeThreshold) {
39983                bc = false;
39984              } else {
39985                bc = true;
39986              }
39987            } else {
39988              bc = true;
39989            }
39990            return bc;
39991          }
39992          function ak(bc, bd) {
39993            if (au.preventDefaultEvents === false) {
39994              return;
39995            }
39996            if (au.allowPageScroll === m) {
39997              bc.preventDefault();
39998            } else {
39999              var be = au.allowPageScroll === s;
40000              switch (bd) {
40001                case p:
40002                  if (au.swipeLeft && be || !be && au.allowPageScroll != E) {
40003                    bc.preventDefault();
40004                  }
40005                  break;
40006                case o:
40007                  if (au.swipeRight && be || !be && au.allowPageScroll != E) {
40008                    bc.preventDefault();
40009                  }
40010                  break;
40011                case e:
40012                  if (au.swipeUp && be || !be && au.allowPageScroll != u) {
40013                    bc.preventDefault();
40014                  }
40015                  break;
40016                case x:
40017                  if (au.swipeDown && be || !be && au.allowPageScroll != u) {
40018                    bc.preventDefault();
40019                  }
40020                  break;
40021              }
40022            }
40023          }
40024          function a9() {
40025            var bd = aO();
40026            var bc = Y();
40027            var be = ae();
40028            return bd && bc && be;
40029          }
40030          function aX() {
40031            return !!(au.pinchStatus || au.pinchIn || au.pinchOut);
40032          }
40033          function Q() {
40034            return !!(a9() && aX());
40035          }
40036          function aV() {
40037            var bf = aA();
40038            var bh = am();
40039            var be = aO();
40040            var bc = Y();
40041            var bd = bb();
40042            var bg = !bd && bc && be && bh && bf;
40043            return bg;
40044          }
40045          function W() {
40046            return !!(au.swipe || au.swipeStatus || au.swipeLeft || au.swipeRight || au.swipeUp || au.swipeDown);
40047          }
40048          function J() {
40049            return !!(aV() && W());
40050          }
40051          function aO() {
40052            return X === au.fingers || au.fingers === i || !a;
40053          }
40054          function Y() {
40055            return aQ[0].end.x !== 0;
40056          }
40057          function a7() {
40058            return !!au.tap;
40059          }
40060          function Z() {
40061            return !!au.doubleTap;
40062          }
40063          function aU() {
40064            return !!au.longTap;
40065          }
40066          function R() {
40067            if (O == null) {
40068              return false;
40069            }
40070            var bc = ar();
40071            return Z() && bc - O <= au.doubleTapThreshold;
40072          }
40073          function I() {
40074            return R();
40075          }
40076          function aw() {
40077            return (X === 1 || !a) && (isNaN(ag) || ag < au.threshold);
40078          }
40079          function a0() {
40080            return ac > au.longTapThreshold && ag < r;
40081          }
40082          function ah() {
40083            return !!(aw() && a7());
40084          }
40085          function aG() {
40086            return !!(R() && Z());
40087          }
40088          function ao() {
40089            return !!(a0() && aU());
40090          }
40091          function G(bc) {
40092            a6 = ar();
40093            ay = bc.touches.length + 1;
40094          }
40095          function S() {
40096            a6 = 0;
40097            ay = 0;
40098          }
40099          function al() {
40100            var bc = false;
40101            if (a6) {
40102              var bd = ar() - a6;
40103              if (bd <= au.fingerReleaseThreshold) {
40104                bc = true;
40105              }
40106            }
40107            return bc;
40108          }
40109          function aB() {
40110            return !!(aR.data(C + "_intouch") === true);
40111          }
40112          function an(bc) {
40113            if (!aR) {
40114              return;
40115            }
40116            if (bc === true) {
40117              aR.bind(ax, a4);
40118              aR.bind(V, M);
40119              if (T) {
40120                aR.bind(T, L);
40121              }
40122            } else {
40123              aR.unbind(ax, a4, false);
40124              aR.unbind(V, M, false);
40125              if (T) {
40126                aR.unbind(T, L, false);
40127              }
40128            }
40129            aR.data(C + "_intouch", bc === true);
40130          }
40131          function ai(be, bc) {
40132            var bd = { start: { x: 0, y: 0 }, last: { x: 0, y: 0 }, end: { x: 0, y: 0 } };
40133            bd.start.x = bd.last.x = bd.end.x = bc.pageX || bc.clientX;
40134            bd.start.y = bd.last.y = bd.end.y = bc.pageY || bc.clientY;
40135            aQ[be] = bd;
40136            return bd;
40137          }
40138          function aH(bc) {
40139            var be = bc.identifier !== void 0 ? bc.identifier : 0;
40140            var bd = ad(be);
40141            if (bd === null) {
40142              bd = ai(be, bc);
40143            }
40144            bd.last.x = bd.end.x;
40145            bd.last.y = bd.end.y;
40146            bd.end.x = bc.pageX || bc.clientX;
40147            bd.end.y = bc.pageY || bc.clientY;
40148            return bd;
40149          }
40150          function ad(bc) {
40151            return aQ[bc] || null;
40152          }
40153          function aI(bc, bd) {
40154            bd = Math.max(bd, aT(bc));
40155            N[bc].distance = bd;
40156          }
40157          function aT(bc) {
40158            if (N[bc]) {
40159              return N[bc].distance;
40160            }
40161            return void 0;
40162          }
40163          function ab() {
40164            var bc = {};
40165            bc[p] = av(p);
40166            bc[o] = av(o);
40167            bc[e] = av(e);
40168            bc[x] = av(x);
40169            return bc;
40170          }
40171          function av(bc) {
40172            return { direction: bc, distance: 0 };
40173          }
40174          function aM() {
40175            return a3 - U;
40176          }
40177          function at(bf, be) {
40178            var bd = Math.abs(bf.x - be.x);
40179            var bc = Math.abs(bf.y - be.y);
40180            return Math.round(Math.sqrt(bd * bd + bc * bc));
40181          }
40182          function a8(bc, bd) {
40183            var be = bd / bc * 1;
40184            return be.toFixed(2);
40185          }
40186          function aq() {
40187            if (H < 1) {
40188              return A;
40189            } else {
40190              return c;
40191            }
40192          }
40193          function aS(bd, bc) {
40194            return Math.round(Math.sqrt(Math.pow(bc.x - bd.x, 2) + Math.pow(bc.y - bd.y, 2)));
40195          }
40196          function aE(bf, bd) {
40197            var bc = bf.x - bd.x;
40198            var bh = bd.y - bf.y;
40199            var be = Math.atan2(bh, bc);
40200            var bg = Math.round(be * 180 / Math.PI);
40201            if (bg < 0) {
40202              bg = 360 - Math.abs(bg);
40203            }
40204            return bg;
40205          }
40206          function aL(bd, bc) {
40207            var be = aE(bd, bc);
40208            if (be <= 45 && be >= 0) {
40209              return p;
40210            } else {
40211              if (be <= 360 && be >= 315) {
40212                return p;
40213              } else {
40214                if (be >= 135 && be <= 225) {
40215                  return o;
40216                } else {
40217                  if (be > 45 && be < 135) {
40218                    return x;
40219                  } else {
40220                    return e;
40221                  }
40222                }
40223              }
40224            }
40225          }
40226          function ar() {
40227            var bc = /* @__PURE__ */ new Date();
40228            return bc.getTime();
40229          }
40230          function aY(bc) {
40231            bc = f(bc);
40232            var be = bc.offset();
40233            var bd = { left: be.left, right: be.left + bc.outerWidth(), top: be.top, bottom: be.top + bc.outerHeight() };
40234            return bd;
40235          }
40236          function F(bc, bd) {
40237            return bc.x > bd.left && bc.x < bd.right && bc.y > bd.top && bc.y < bd.bottom;
40238          }
40239        }
40240      });
40241    }
40242  });
40243
40244  
vendor: 11,626 bytes, lines 40244-40549
40244// apps/base/assets/javascripts/vendor/jquery.transit.min.js
40245  var require_jquery_transit_min = __commonJS({
40246    "apps/base/assets/javascripts/vendor/jquery.transit.min.js"(exports, module) {
40247      "use strict";
40248      init_esbuild_shims();
40249      (function(t2, e) {
40250        if (typeof define === "function" && define.amd) {
40251          define(["jquery"], e);
40252        } else if (typeof exports === "object") {
40253          module.exports = e(require_jquery());
40254        } else {
40255          e(t2.jQuery);
40256        }
40257      })(exports, function(t2) {
40258        t2.transit = { version: "0.9.12", propertyMap: { marginLeft: "margin", marginRight: "margin", marginBottom: "margin", marginTop: "margin", paddingLeft: "padding", paddingRight: "padding", paddingBottom: "padding", paddingTop: "padding" }, enabled: true, useTransitionEnd: false };
40259        var e = document.createElement("div");
40260        var n = {};
40261        function i(t3) {
40262          if (t3 in e.style) return t3;
40263          var n2 = ["Moz", "Webkit", "O", "ms"];
40264          var i2 = t3.charAt(0).toUpperCase() + t3.substr(1);
40265          for (var r2 = 0; r2 < n2.length; ++r2) {
40266            var s2 = n2[r2] + i2;
40267            if (s2 in e.style) {
40268              return s2;
40269            }
40270          }
40271        }
40272        function r() {
40273          e.style[n.transform] = "";
40274          e.style[n.transform] = "rotateY(90deg)";
40275          return e.style[n.transform] !== "";
40276        }
40277        var s = navigator.userAgent.toLowerCase().indexOf("chrome") > -1;
40278        n.transition = i("transition");
40279        n.transitionDelay = i("transitionDelay");
40280        n.transform = i("transform");
40281        n.transformOrigin = i("transformOrigin");
40282        n.filter = i("Filter");
40283        n.transform3d = r();
40284        var a = { transition: "transitionend", MozTransition: "transitionend", OTransition: "oTransitionEnd", WebkitTransition: "webkitTransitionEnd", msTransition: "MSTransitionEnd" };
40285        var o = n.transitionEnd = a[n.transition] || null;
40286        for (var u in n) {
40287          if (n.hasOwnProperty(u) && typeof t2.support[u] === "undefined") {
40288            t2.support[u] = n[u];
40289          }
40290        }
40291        e = null;
40292        t2.cssEase = { _default: "ease", "in": "ease-in", out: "ease-out", "in-out": "ease-in-out", snap: "cubic-bezier(0,1,.5,1)", easeInCubic: "cubic-bezier(.550,.055,.675,.190)", easeOutCubic: "cubic-bezier(.215,.61,.355,1)", easeInOutCubic: "cubic-bezier(.645,.045,.355,1)", easeInCirc: "cubic-bezier(.6,.04,.98,.335)", easeOutCirc: "cubic-bezier(.075,.82,.165,1)", easeInOutCirc: "cubic-bezier(.785,.135,.15,.86)", easeInExpo: "cubic-bezier(.95,.05,.795,.035)", easeOutExpo: "cubic-bezier(.19,1,.22,1)", easeInOutExpo: "cubic-bezier(1,0,0,1)", easeInQuad: "cubic-bezier(.55,.085,.68,.53)", easeOutQuad: "cubic-bezier(.25,.46,.45,.94)", easeInOutQuad: "cubic-bezier(.455,.03,.515,.955)", easeInQuart: "cubic-bezier(.895,.03,.685,.22)", easeOutQuart: "cubic-bezier(.165,.84,.44,1)", easeInOutQuart: "cubic-bezier(.77,0,.175,1)", easeInQuint: "cubic-bezier(.755,.05,.855,.06)", easeOutQuint: "cubic-bezier(.23,1,.32,1)", easeInOutQuint: "cubic-bezier(.86,0,.07,1)", easeInSine: "cubic-bezier(.47,0,.745,.715)", easeOutSine: "cubic-bezier(.39,.575,.565,1)", easeInOutSine: "cubic-bezier(.445,.05,.55,.95)", easeInBack: "cubic-bezier(.6,-.28,.735,.045)", easeOutBack: "cubic-bezier(.175, .885,.32,1.275)", easeInOutBack: "cubic-bezier(.68,-.55,.265,1.55)" };
40293        t2.cssHooks["transit:transform"] = { get: function(e2) {
40294          return t2(e2).data("transform") || new f();
40295        }, set: function(e2, i2) {
40296          var r2 = i2;
40297          if (!(r2 instanceof f)) {
40298            r2 = new f(r2);
40299          }
40300          if (n.transform === "WebkitTransform" && !s) {
40301            e2.style[n.transform] = r2.toString(true);
40302          } else {
40303            e2.style[n.transform] = r2.toString();
40304          }
40305          t2(e2).data("transform", r2);
40306        } };
40307        t2.cssHooks.transform = { set: t2.cssHooks["transit:transform"].set };
40308        t2.cssHooks.filter = { get: function(t3) {
40309          return t3.style[n.filter];
40310        }, set: function(t3, e2) {
40311          t3.style[n.filter] = e2;
40312        } };
40313        if (t2.fn.jquery < "1.8") {
40314          t2.cssHooks.transformOrigin = { get: function(t3) {
40315            return t3.style[n.transformOrigin];
40316          }, set: function(t3, e2) {
40317            t3.style[n.transformOrigin] = e2;
40318          } };
40319          t2.cssHooks.transition = { get: function(t3) {
40320            return t3.style[n.transition];
40321          }, set: function(t3, e2) {
40322            t3.style[n.transition] = e2;
40323          } };
40324        }
40325        p("scale");
40326        p("scaleX");
40327        p("scaleY");
40328        p("translate");
40329        p("rotate");
40330        p("rotateX");
40331        p("rotateY");
40332        p("rotate3d");
40333        p("perspective");
40334        p("skewX");
40335        p("skewY");
40336        p("x", true);
40337        p("y", true);
40338        function f(t3) {
40339          if (typeof t3 === "string") {
40340            this.parse(t3);
40341          }
40342          return this;
40343        }
40344        f.prototype = { setFromString: function(t3, e2) {
40345          var n2 = typeof e2 === "string" ? e2.split(",") : e2.constructor === Array ? e2 : [e2];
40346          n2.unshift(t3);
40347          f.prototype.set.apply(this, n2);
40348        }, set: function(t3) {
40349          var e2 = Array.prototype.slice.apply(arguments, [1]);
40350          if (this.setter[t3]) {
40351            this.setter[t3].apply(this, e2);
40352          } else {
40353            this[t3] = e2.join(",");
40354          }
40355        }, get: function(t3) {
40356          if (this.getter[t3]) {
40357            return this.getter[t3].apply(this);
40358          } else {
40359            return this[t3] || 0;
40360          }
40361        }, setter: { rotate: function(t3) {
40362          this.rotate = b(t3, "deg");
40363        }, rotateX: function(t3) {
40364          this.rotateX = b(t3, "deg");
40365        }, rotateY: function(t3) {
40366          this.rotateY = b(t3, "deg");
40367        }, scale: function(t3, e2) {
40368          if (e2 === void 0) {
40369            e2 = t3;
40370          }
40371          this.scale = t3 + "," + e2;
40372        }, skewX: function(t3) {
40373          this.skewX = b(t3, "deg");
40374        }, skewY: function(t3) {
40375          this.skewY = b(t3, "deg");
40376        }, perspective: function(t3) {
40377          this.perspective = b(t3, "px");
40378        }, x: function(t3) {
40379          this.set("translate", t3, null);
40380        }, y: function(t3) {
40381          this.set("translate", null, t3);
40382        }, translate: function(t3, e2) {
40383          if (this._translateX === void 0) {
40384            this._translateX = 0;
40385          }
40386          if (this._translateY === void 0) {
40387            this._translateY = 0;
40388          }
40389          if (t3 !== null && t3 !== void 0) {
40390            this._translateX = b(t3, "px");
40391          }
40392          if (e2 !== null && e2 !== void 0) {
40393            this._translateY = b(e2, "px");
40394          }
40395          this.translate = this._translateX + "," + this._translateY;
40396        } }, getter: { x: function() {
40397          return this._translateX || 0;
40398        }, y: function() {
40399          return this._translateY || 0;
40400        }, scale: function() {
40401          var t3 = (this.scale || "1,1").split(",");
40402          if (t3[0]) {
40403            t3[0] = parseFloat(t3[0]);
40404          }
40405          if (t3[1]) {
40406            t3[1] = parseFloat(t3[1]);
40407          }
40408          return t3[0] === t3[1] ? t3[0] : t3;
40409        }, rotate3d: function() {
40410          var t3 = (this.rotate3d || "0,0,0,0deg").split(",");
40411          for (var e2 = 0; e2 <= 3; ++e2) {
40412            if (t3[e2]) {
40413              t3[e2] = parseFloat(t3[e2]);
40414            }
40415          }
40416          if (t3[3]) {
40417            t3[3] = b(t3[3], "deg");
40418          }
40419          return t3;
40420        } }, parse: function(t3) {
40421          var e2 = this;
40422          t3.replace(/([a-zA-Z0-9]+)\((.*?)\)/g, function(t4, n2, i2) {
40423            e2.setFromString(n2, i2);
40424          });
40425        }, toString: function(t3) {
40426          var e2 = [];
40427          for (var i2 in this) {
40428            if (this.hasOwnProperty(i2)) {
40429              if (!n.transform3d && (i2 === "rotateX" || i2 === "rotateY" || i2 === "perspective" || i2 === "transformOrigin")) {
40430                continue;
40431              }
40432              if (i2[0] !== "_") {
40433                if (t3 && i2 === "scale") {
40434                  e2.push(i2 + "3d(" + this[i2] + ",1)");
40435                } else if (t3 && i2 === "translate") {
40436                  e2.push(i2 + "3d(" + this[i2] + ",0)");
40437                } else {
40438                  e2.push(i2 + "(" + this[i2] + ")");
40439                }
40440              }
40441            }
40442          }
40443          return e2.join(" ");
40444        } };
40445        function c(t3, e2, n2) {
40446          if (e2 === true) {
40447            t3.queue(n2);
40448          } else if (e2) {
40449            t3.queue(e2, n2);
40450          } else {
40451            t3.each(function() {
40452              n2.call(this);
40453            });
40454          }
40455        }
40456        function l(e2) {
40457          var i2 = [];
40458          t2.each(e2, function(e3) {
40459            e3 = t2.camelCase(e3);
40460            e3 = t2.transit.propertyMap[e3] || t2.cssProps[e3] || e3;
40461            e3 = h(e3);
40462            if (n[e3]) e3 = h(n[e3]);
40463            if (t2.inArray(e3, i2) === -1) {
40464              i2.push(e3);
40465            }
40466          });
40467          return i2;
40468        }
40469        function d(e2, n2, i2, r2) {
40470          var s2 = l(e2);
40471          if (t2.cssEase[i2]) {
40472            i2 = t2.cssEase[i2];
40473          }
40474          var a2 = "" + y(n2) + " " + i2;
40475          if (parseInt(r2, 10) > 0) {
40476            a2 += " " + y(r2);
40477          }
40478          var o2 = [];
40479          t2.each(s2, function(t3, e3) {
40480            o2.push(e3 + " " + a2);
40481          });
40482          return o2.join(", ");
40483        }
40484        t2.fn.transition = t2.fn.transit = function(e2, i2, r2, s2) {
40485          var a2 = this;
40486          var u2 = 0;
40487          var f2 = true;
40488          var l2 = t2.extend(true, {}, e2);
40489          if (typeof i2 === "function") {
40490            s2 = i2;
40491            i2 = void 0;
40492          }
40493          if (typeof i2 === "object") {
40494            r2 = i2.easing;
40495            u2 = i2.delay || 0;
40496            f2 = typeof i2.queue === "undefined" ? true : i2.queue;
40497            s2 = i2.complete;
40498            i2 = i2.duration;
40499          }
40500          if (typeof r2 === "function") {
40501            s2 = r2;
40502            r2 = void 0;
40503          }
40504          if (typeof l2.easing !== "undefined") {
40505            r2 = l2.easing;
40506            delete l2.easing;
40507          }
40508          if (typeof l2.duration !== "undefined") {
40509            i2 = l2.duration;
40510            delete l2.duration;
40511          }
40512          if (typeof l2.complete !== "undefined") {
40513            s2 = l2.complete;
40514            delete l2.complete;
40515          }
40516          if (typeof l2.queue !== "undefined") {
40517            f2 = l2.queue;
40518            delete l2.queue;
40519          }
40520          if (typeof l2.delay !== "undefined") {
40521            u2 = l2.delay;
40522            delete l2.delay;
40523          }
40524          if (typeof i2 === "undefined") {
40525            i2 = t2.fx.speeds._default;
40526          }
40527          if (typeof r2 === "undefined") {
40528            r2 = t2.cssEase._default;
40529          }
40530          i2 = y(i2);
40531          var p2 = d(l2, i2, r2, u2);
40532          var h2 = t2.transit.enabled && n.transition;
40533          var b2 = h2 ? parseInt(i2, 10) + parseInt(u2, 10) : 0;
40534          if (b2 === 0) {
40535            var g = function(t3) {
40536              a2.css(l2);
40537              if (s2) {
40538                s2.apply(a2);
40539              }
40540              if (t3) {
40541                t3();
40542              }
40543            };
40544            c(a2, f2, g);
40545            return a2;
40546          }
40547          var m = {};
40548          var v = function(e3) {
40549            var i3 = false;
40550            var r3 = function() {
40551              if (i3) {
40552                a2.unbind(o, r3);
40553              }
40554              if (b2 > 0) {
40555                a2.each(function() {
40556                  this.style[n.transition] = m[this] || null;
40557                });
40558              }
40559              if (typeof s2 === "function") {
40560                s2.apply(a2);
40561              }
40562              if (typeof e3 === "function") {
40563                e3();
40564              }
40565            };
40566            if (b2 > 0 && o && t2.transit.useTransitionEnd) {
40567              i3 = true;
40568              a2.bind(o, r3);
40569            } else {
40570              window.setTimeout(r3, b2);
40571            }
40572            a2.each(function() {
40573              if (b2 > 0) {
40574                this.style[n.transition] = p2;
40575              }
40576              t2(this).css(l2);
40577            });
40578          };
40579          var z = function(t3) {
40580            this.offsetWidth;
40581            v(t3);
40582          };
40583          c(a2, f2, z);
40584          return this;
40585        };
40586        function p(e2, i2) {
40587          if (!i2) {
40588            t2.cssNumber[e2] = true;
40589          }
40590          t2.transit.propertyMap[e2] = n.transform;
40591          t2.cssHooks[e2] = { get: function(n2) {
40592            var i3 = t2(n2).css("transit:transform");
40593            return i3.get(e2);
40594          }, set: function(n2, i3) {
40595            var r2 = t2(n2).css("transit:transform");
40596            r2.setFromString(e2, i3);
40597            t2(n2).css({ "transit:transform": r2 });
40598          } };
40599        }
40600        function h(t3) {
40601          return t3.replace(/([A-Z])/g, function(t4) {
40602            return "-" + t4.toLowerCase();
40603          });
40604        }
40605        function b(t3, e2) {
40606          if (typeof t3 === "string" && !t3.match(/^[\-0-9\.]+$/)) {
40607            return t3;
40608          } else {
40609            return "" + t3 + e2;
40610          }
40611        }
40612        function y(e2) {
40613          var n2 = e2;
40614          if (typeof n2 === "string" && !n2.match(/^[\-0-9\.]+/)) {
40615            n2 = t2.fx.speeds[n2] || t2.fx.speeds._default;
40616          }
40617          return b(n2, "ms");
40618        }
40619        t2.transit.getTransitionValue = d;
40620        return t2;
40621      });
40622    }
40623  });
40624
40625  
vendor: 16,384 bytes, lines 40625-40943
40625// apps/base/assets/javascripts/vendor/jquery.ui.autocomplete.js
40626  var require_jquery_ui_autocomplete = __commonJS({
40627    "apps/base/assets/javascripts/vendor/jquery.ui.autocomplete.js"() {
40628      "use strict";
40629      init_esbuild_shims();
40630      (function(factory) {
40631        if (typeof define === "function" && define.amd) {
40632          define(["jquery"], factory);
40633        } else {
40634          factory(jQuery);
40635        }
40636      })(function($3) {
40637        $3.ui = $3.ui || {};
40638        return $3.ui.version = "1.12.1";
40639      });
40640      (function(factory) {
40641        if (typeof define === "function" && define.amd) {
40642          define(["jquery", "./version"], factory);
40643        } else {
40644          factory(jQuery);
40645        }
40646      })(function($3) {
40647        return $3.ui.keyCode = {
40648          BACKSPACE: 8,
40649          COMMA: 188,
40650          DELETE: 46,
40651          DOWN: 40,
40652          END: 35,
40653          ENTER: 13,
40654          ESCAPE: 27,
40655          HOME: 36,
40656          LEFT: 37,
40657          PAGE_DOWN: 34,
40658          PAGE_UP: 33,
40659          PERIOD: 190,
40660          RIGHT: 39,
40661          SPACE: 32,
40662          TAB: 9,
40663          UP: 38
40664        };
40665      });
40666      (function(factory) {
40667        if (typeof define === "function" && define.amd) {
40668          define(["jquery", "./version"], factory);
40669        } else {
40670          factory(jQuery);
40671        }
40672      })(function($3) {
40673        (function() {
40674          var cachedScrollbarWidth, max = Math.max, abs = Math.abs, rhorizontal = /left|center|right/, rvertical = /top|center|bottom/, roffset = /[\+\-]\d+(\.[\d]+)?%?/, rposition = /^\w+/, rpercent = /%$/, _position = $3.fn.position;
40675          function getOffsets(offsets, width, height) {
40676            return [
40677              parseFloat(offsets[0]) * (rpercent.test(offsets[0]) ? width / 100 : 1),
40678              parseFloat(offsets[1]) * (rpercent.test(offsets[1]) ? height / 100 : 1)
40679            ];
40680          }
40681          function parseCss(element, property) {
40682            return parseInt($3.css(element, property), 10) || 0;
40683          }
40684          function getDimensions(elem) {
40685            var raw = elem[0];
40686            if (raw.nodeType === 9) {
40687              return {
40688                width: elem.width(),
40689                height: elem.height(),
40690                offset: { top: 0, left: 0 }
40691              };
40692            }
40693            if ($3.isWindow(raw)) {
40694              return {
40695                width: elem.width(),
40696                height: elem.height(),
40697                offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
40698              };
40699            }
40700            if (raw.preventDefault) {
40701              return {
40702                width: 0,
40703                height: 0,
40704                offset: { top: raw.pageY, left: raw.pageX }
40705              };
40706            }
40707            return {
40708              width: elem.outerWidth(),
40709              height: elem.outerHeight(),
40710              offset: elem.offset()
40711            };
40712          }
40713          $3.position = {
40714            scrollbarWidth: function() {
40715              if (cachedScrollbarWidth !== void 0) {
40716                return cachedScrollbarWidth;
40717              }
40718              var w1, w2, div = $3("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"), innerDiv = div.children()[0];
40719              $3("body").append(div);
40720              w1 = innerDiv.offsetWidth;
40721              div.css("overflow", "scroll");
40722              w2 = innerDiv.offsetWidth;
40723              if (w1 === w2) {
40724                w2 = div[0].clientWidth;
40725              }
40726              div.remove();
40727              return cachedScrollbarWidth = w1 - w2;
40728            },
40729            getScrollInfo: function(within) {
40730              var overflowX = within.isWindow || within.isDocument ? "" : within.element.css("overflow-x"), overflowY = within.isWindow || within.isDocument ? "" : within.element.css("overflow-y"), hasOverflowX = overflowX === "scroll" || overflowX === "auto" && within.width < within.element[0].scrollWidth, hasOverflowY = overflowY === "scroll" || overflowY === "auto" && within.height < within.element[0].scrollHeight;
40731              return {
40732                width: hasOverflowY ? $3.position.scrollbarWidth() : 0,
40733                height: hasOverflowX ? $3.position.scrollbarWidth() : 0
40734              };
40735            },
40736            getWithinInfo: function(element) {
40737              var withinElement = $3(element || window), isWindow = $3.isWindow(withinElement[0]), isDocument = !!withinElement[0] && withinElement[0].nodeType === 9, hasOffset = !isWindow && !isDocument;
40738              return {
40739                element: withinElement,
40740                isWindow,
40741                isDocument,
40742                offset: hasOffset ? $3(element).offset() : { left: 0, top: 0 },
40743                scrollLeft: withinElement.scrollLeft(),
40744                scrollTop: withinElement.scrollTop(),
40745                width: withinElement.outerWidth(),
40746                height: withinElement.outerHeight()
40747              };
40748            }
40749          };
40750          $3.fn.position = function(options) {
40751            if (!options || !options.of) {
40752              return _position.apply(this, arguments);
40753            }
40754            options = $3.extend({}, options);
40755            var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions, target = $3(options.of), within = $3.position.getWithinInfo(options.within), scrollInfo = $3.position.getScrollInfo(within), collision = (options.collision || "flip").split(" "), offsets = {};
40756            dimensions = getDimensions(target);
40757            if (target[0].preventDefault) {
40758              options.at = "left top";
40759            }
40760            targetWidth = dimensions.width;
40761            targetHeight = dimensions.height;
40762            targetOffset = dimensions.offset;
40763            basePosition = $3.extend({}, targetOffset);
40764            $3.each(["my", "at"], function() {
40765              var pos = (options[this] || "").split(" "), horizontalOffset, verticalOffset;
40766              if (pos.length === 1) {
40767                pos = rhorizontal.test(pos[0]) ? pos.concat(["center"]) : rvertical.test(pos[0]) ? ["center"].concat(pos) : ["center", "center"];
40768              }
40769              pos[0] = rhorizontal.test(pos[0]) ? pos[0] : "center";
40770              pos[1] = rvertical.test(pos[1]) ? pos[1] : "center";
40771              horizontalOffset = roffset.exec(pos[0]);
40772              verticalOffset = roffset.exec(pos[1]);
40773              offsets[this] = [
40774                horizontalOffset ? horizontalOffset[0] : 0,
40775                verticalOffset ? verticalOffset[0] : 0
40776              ];
40777              options[this] = [
40778                rposition.exec(pos[0])[0],
40779                rposition.exec(pos[1])[0]
40780              ];
40781            });
40782            if (collision.length === 1) {
40783              collision[1] = collision[0];
40784            }
40785            if (options.at[0] === "right") {
40786              basePosition.left += targetWidth;
40787            } else if (options.at[0] === "center") {
40788              basePosition.left += targetWidth / 2;
40789            }
40790            if (options.at[1] === "bottom") {
40791              basePosition.top += targetHeight;
40792            } else if (options.at[1] === "center") {
40793              basePosition.top += targetHeight / 2;
40794            }
40795            atOffset = getOffsets(offsets.at, targetWidth, targetHeight);
40796            basePosition.left += atOffset[0];
40797            basePosition.top += atOffset[1];
40798            return this.each(function() {
40799              var collisionPosition, using, elem = $3(this), elemWidth = elem.outerWidth(), elemHeight = elem.outerHeight(), marginLeft = parseCss(this, "marginLeft"), marginTop = parseCss(this, "marginTop"), collisionWidth = elemWidth + marginLeft + parseCss(this, "marginRight") + scrollInfo.width, collisionHeight = elemHeight + marginTop + parseCss(this, "marginBottom") + scrollInfo.height, position = $3.extend({}, basePosition), myOffset = getOffsets(offsets.my, elem.outerWidth(), elem.outerHeight());
40800              if (options.my[0] === "right") {
40801                position.left -= elemWidth;
40802              } else if (options.my[0] === "center") {
40803                position.left -= elemWidth / 2;
40804              }
40805              if (options.my[1] === "bottom") {
40806                position.top -= elemHeight;
40807              } else if (options.my[1] === "center") {
40808                position.top -= elemHeight / 2;
40809              }
40810              position.left += myOffset[0];
40811              position.top += myOffset[1];
40812              collisionPosition = {
40813                marginLeft,
40814                marginTop
40815              };
40816              $3.each(["left", "top"], function(i, dir) {
40817                if ($3.ui.position[collision[i]]) {
40818                  $3.ui.position[collision[i]][dir](position, {
40819                    targetWidth,
40820                    targetHeight,
40821                    elemWidth,
40822                    elemHeight,
40823                    collisionPosition,
40824                    collisionWidth,
40825                    collisionHeight,
40826                    offset: [atOffset[0] + myOffset[0], atOffset[1] + myOffset[1]],
40827                    my: options.my,
40828                    at: options.at,
40829                    within,
40830                    elem
40831                  });
40832                }
40833              });
40834              if (options.using) {
40835                using = function(props) {
40836                  var left = targetOffset.left - position.left, right = left + targetWidth - elemWidth, top = targetOffset.top - position.top, bottom = top + targetHeight - elemHeight, feedback = {
40837                    target: {
40838                      element: target,
40839                      left: targetOffset.left,
40840                      top: targetOffset.top,
40841                      width: targetWidth,
40842                      height: targetHeight
40843                    },
40844                    element: {
40845                      element: elem,
40846                      left: position.left,
40847                      top: position.top,
40848                      width: elemWidth,
40849                      height: elemHeight
40850                    },
40851                    horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
40852                    vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
40853                  };
40854                  if (targetWidth < elemWidth && abs(left + right) < targetWidth) {
40855                    feedback.horizontal = "center";
40856                  }
40857                  if (targetHeight < elemHeight && abs(top + bottom) < targetHeight) {
40858                    feedback.vertical = "middle";
40859                  }
40860                  if (max(abs(left), abs(right)) > max(abs(top), abs(bottom))) {
40861                    feedback.important = "horizontal";
40862                  } else {
40863                    feedback.important = "vertical";
40864                  }
40865                  options.using.call(this, props, feedback);
40866                };
40867              }
40868              elem.offset($3.extend(position, { using }));
40869            });
40870          };
40871          $3.ui.position = {
40872            fit: {
40873              left: function(position, data) {
40874                var within = data.within, withinOffset = within.isWindow ? within.scrollLeft : within.offset.left, outerWidth = within.width, collisionPosLeft = position.left - data.collisionPosition.marginLeft, overLeft = withinOffset - collisionPosLeft, overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset, newOverRight;
40875                if (data.collisionWidth > outerWidth) {
40876                  if (overLeft > 0 && overRight <= 0) {
40877                    newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
40878                    position.left += overLeft - newOverRight;
40879                  } else if (overRight > 0 && overLeft <= 0) {
40880                    position.left = withinOffset;
40881                  } else {
40882                    if (overLeft > overRight) {
40883                      position.left = withinOffset + outerWidth - data.collisionWidth;
40884                    } else {
40885                      position.left = withinOffset;
40886                    }
40887                  }
40888                } else if (overLeft > 0) {
40889                  position.left += overLeft;
40890                } else if (overRight > 0) {
40891                  position.left -= overRight;
40892                } else {
40893                  position.left = max(position.left - collisionPosLeft, position.left);
40894                }
40895              },
40896              top: function(position, data) {
40897                var within = data.within, withinOffset = within.isWindow ? within.scrollTop : within.offset.top, outerHeight = data.within.height, collisionPosTop = position.top - data.collisionPosition.marginTop, overTop = withinOffset - collisionPosTop, overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset, newOverBottom;
40898                if (data.collisionHeight > outerHeight) {
40899                  if (overTop > 0 && overBottom <= 0) {
40900                    newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
40901                    position.top += overTop - newOverBottom;
40902                  } else if (overBottom > 0 && overTop <= 0) {
40903                    position.top = withinOffset;
40904                  } else {
40905                    if (overTop > overBottom) {
40906                      position.top = withinOffset + outerHeight - data.collisionHeight;
40907                    } else {
40908                      position.top = withinOffset;
40909                    }
40910                  }
40911                } else if (overTop > 0) {
40912                  position.top += overTop;
40913                } else if (overBottom > 0) {
40914                  position.top -= overBottom;
40915                } else {
40916                  position.top = max(position.top - collisionPosTop, position.top);
40917                }
40918              }
40919            },
40920            flip: {
40921              left: function(position, data) {
40922                var within = data.within, withinOffset = within.offset.left + within.scrollLeft, outerWidth = within.width, offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left, collisionPosLeft = position.left - data.collisionPosition.marginLeft, overLeft = collisionPosLeft - offsetLeft, overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft, myOffset = data.my[0] === "left" ? -data.elemWidth : data.my[0] === "right" ? data.elemWidth : 0, atOffset = data.at[0] === "left" ? data.targetWidth : data.at[0] === "right" ? -data.targetWidth : 0, offset = -2 * data.offset[0], newOverRight, newOverLeft;
40923                if (overLeft < 0) {
40924                  newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
40925                  if (newOverRight < 0 || newOverRight < abs(overLeft)) {
40926                    position.left += myOffset + atOffset + offset;
40927                  }
40928                } else if (overRight > 0) {
40929                  newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
40930                  if (newOverLeft > 0 || abs(newOverLeft) < overRight) {
40931                    position.left += myOffset + atOffset + offset;
40932                  }
40933                }
40934              },
40935              top: function(position, data) {
40936                var within = data.within, withinOffset = within.offset.top + within.scrollTop, outerHeight = within.height, offsetTop = within.isWindow ? within.scrollTop : within.offset.top, collisionPosTop = position.top - data.collisionPosition.marginTop, overTop = collisionPosTop - offsetTop, overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop, top = data.my[1] === "top", myOffset = top ? -data.elemHeight : data.my[1] === "bottom" ? data.elemHeight : 0, atOffset = data.at[1] === "top" ? data.targetHeight : data.at[1] === "bottom" ? -data.targetHeight : 0, offset = -2 * data.offset[1], newOverTop, newOverBottom;
40937                if (overTop < 0) {
40938                  newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
40939                  if (newOverBottom < 0 || newOverBottom < abs(overTop)) {
40940                    position.top += myOffset + atOffset + offset;
40941                  }
40942                } else if (overBottom > 0) {
40943                  newOverTop = position.top - data.collis
vendor: 5,329 bytes, lines 40943-41092
40943ionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
40944                  if (newOverTop > 0 || abs(newOverTop) < overBottom) {
40945                    position.top += myOffset + atOffset + offset;
40946                  }
40947                }
40948              }
40949            },
40950            flipfit: {
40951              left: function() {
40952                $3.ui.position.flip.left.apply(this, arguments);
40953                $3.ui.position.fit.left.apply(this, arguments);
40954              },
40955              top: function() {
40956                $3.ui.position.flip.top.apply(this, arguments);
40957                $3.ui.position.fit.top.apply(this, arguments);
40958              }
40959            }
40960          };
40961        })();
40962        return $3.ui.position;
40963      });
40964      (function(factory) {
40965        if (typeof define === "function" && define.amd) {
40966          define(["jquery", "./version"], factory);
40967        } else {
40968          factory(jQuery);
40969        }
40970      })(function($3) {
40971        return $3.ui.safeActiveElement = function(document2) {
40972          var activeElement;
40973          try {
40974            activeElement = document2.activeElement;
40975          } catch (error) {
40976            activeElement = document2.body;
40977          }
40978          if (!activeElement) {
40979            activeElement = document2.body;
40980          }
40981          if (!activeElement.nodeName) {
40982            activeElement = document2.body;
40983          }
40984          return activeElement;
40985        };
40986      });
40987      (function(factory) {
40988        if (typeof define === "function" && define.amd) {
40989          define(["jquery", "./version"], factory);
40990        } else {
40991          factory(jQuery);
40992        }
40993      })(function($3) {
40994        return $3.fn.extend({
40995          uniqueId: /* @__PURE__ */ (function() {
40996            var uuid = 0;
40997            return function() {
40998              return this.each(function() {
40999                if (!this.id) {
41000                  this.id = "ui-id-" + ++uuid;
41001                }
41002              });
41003            };
41004          })(),
41005          removeUniqueId: function() {
41006            return this.each(function() {
41007              if (/^ui-id-\d+$/.test(this.id)) {
41008                $3(this).removeAttr("id");
41009              }
41010            });
41011          }
41012        });
41013      });
41014      (function(factory) {
41015        if (typeof define === "function" && define.amd) {
41016          define(["jquery", "./version"], factory);
41017        } else {
41018          factory(jQuery);
41019        }
41020      })(function($3) {
41021        var widgetUuid = 0;
41022        var widgetSlice = Array.prototype.slice;
41023        $3.cleanData = /* @__PURE__ */ (function(orig) {
41024          return function(elems) {
41025            var events, elem, i;
41026            for (i = 0; (elem = elems[i]) != null; i++) {
41027              try {
41028                events = $3._data(elem, "events");
41029                if (events && events.remove) {
41030                  $3(elem).triggerHandler("remove");
41031                }
41032              } catch (e) {
41033              }
41034            }
41035            orig(elems);
41036          };
41037        })($3.cleanData);
41038        $3.widget = function(name, base, prototype) {
41039          var existingConstructor, constructor, basePrototype;
41040          var proxiedPrototype = {};
41041          var namespace = name.split(".")[0];
41042          name = name.split(".")[1];
41043          var fullName = namespace + "-" + name;
41044          if (!prototype) {
41045            prototype = base;
41046            base = $3.Widget;
41047          }
41048          if ($3.isArray(prototype)) {
41049            prototype = $3.extend.apply(null, [{}].concat(prototype));
41050          }
41051          $3.expr[":"][fullName.toLowerCase()] = function(elem) {
41052            return !!$3.data(elem, fullName);
41053          };
41054          $3[namespace] = $3[namespace] || {};
41055          existingConstructor = $3[namespace][name];
41056          constructor = $3[namespace][name] = function(options, element) {
41057            if (!this._createWidget) {
41058              return new constructor(options, element);
41059            }
41060            if (arguments.length) {
41061              this._createWidget(options, element);
41062            }
41063          };
41064          $3.extend(constructor, existingConstructor, {
41065            version: prototype.version,
41066            // Copy the object used to create the prototype in case we need to
41067            // redefine the widget later
41068            _proto: $3.extend({}, prototype),
41069            // Track widgets that inherit from this widget in case this widget is
41070            // redefined after a widget inherits from it
41071            _childConstructors: []
41072          });
41073          basePrototype = new base();
41074          basePrototype.options = $3.widget.extend({}, basePrototype.options);
41075          $3.each(prototype, function(prop, value) {
41076            if (!$3.isFunction(value)) {
41077              proxiedPrototype[prop] = value;
41078              return;
41079            }
41080            proxiedPrototype[prop] = /* @__PURE__ */ (function() {
41081              function _super() {
41082                return base.prototype[prop].apply(this, arguments);
41083              }
41084              function _superApply(args) {
41085                return base.prototype[prop].apply(this, args);
41086              }
41087              return function() {
41088                var __super = this._super;
41089                var __superApply = this._superApply;
41090                var returnValue;
41091                this._super = _super;
41092                this._superApply = _superApply;
vendor: 12,814 bytes, lines 41093-41417
41093                returnValue = value.apply(this, arguments);
41094                this._super = __super;
41095                this._superApply = __superApply;
41096                return returnValue;
41097              };
41098            })();
41099          });
41100          constructor.prototype = $3.widget.extend(basePrototype, {
41101            // TODO: remove support for widgetEventPrefix
41102            // always use the name + a colon as the prefix, e.g., draggable:start
41103            // don't prefix for widgets that aren't DOM-based
41104            widgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix || name : name
41105          }, proxiedPrototype, {
41106            constructor,
41107            namespace,
41108            widgetName: name,
41109            widgetFullName: fullName
41110          });
41111          if (existingConstructor) {
41112            $3.each(existingConstructor._childConstructors, function(i, child) {
41113              var childPrototype = child.prototype;
41114              $3.widget(
41115                childPrototype.namespace + "." + childPrototype.widgetName,
41116                constructor,
41117                child._proto
41118              );
41119            });
41120            delete existingConstructor._childConstructors;
41121          } else {
41122            base._childConstructors.push(constructor);
41123          }
41124          $3.widget.bridge(name, constructor);
41125          return constructor;
41126        };
41127        $3.widget.extend = function(target) {
41128          var input = widgetSlice.call(arguments, 1);
41129          var inputIndex = 0;
41130          var inputLength = input.length;
41131          var key;
41132          var value;
41133          for (; inputIndex < inputLength; inputIndex++) {
41134            for (key in input[inputIndex]) {
41135              value = input[inputIndex][key];
41136              if (input[inputIndex].hasOwnProperty(key) && value !== void 0) {
41137                if ($3.isPlainObject(value)) {
41138                  target[key] = $3.isPlainObject(target[key]) ? $3.widget.extend({}, target[key], value) : (
41139                    // Don't extend strings, arrays, etc. with objects
41140                    $3.widget.extend({}, value)
41141                  );
41142                } else {
41143                  target[key] = value;
41144                }
41145              }
41146            }
41147          }
41148          return target;
41149        };
41150        $3.widget.bridge = function(name, object) {
41151          var fullName = object.prototype.widgetFullName || name;
41152          $3.fn[name] = function(options) {
41153            var isMethodCall = typeof options === "string";
41154            var args = widgetSlice.call(arguments, 1);
41155            var returnValue = this;
41156            if (isMethodCall) {
41157              if (!this.length && options === "instance") {
41158                returnValue = void 0;
41159              } else {
41160                this.each(function() {
41161                  var methodValue;
41162                  var instance = $3.data(this, fullName);
41163                  if (options === "instance") {
41164                    returnValue = instance;
41165                    return false;
41166                  }
41167                  if (!instance) {
41168                    return $3.error("cannot call methods on " + name + " prior to initialization; attempted to call method '" + options + "'");
41169                  }
41170                  if (!$3.isFunction(instance[options]) || options.charAt(0) === "_") {
41171                    return $3.error("no such method '" + options + "' for " + name + " widget instance");
41172                  }
41173                  methodValue = instance[options].apply(instance, args);
41174                  if (methodValue !== instance && methodValue !== void 0) {
41175                    returnValue = methodValue && methodValue.jquery ? returnValue.pushStack(methodValue.get()) : methodValue;
41176                    return false;
41177                  }
41178                });
41179              }
41180            } else {
41181              if (args.length) {
41182                options = $3.widget.extend.apply(null, [options].concat(args));
41183              }
41184              this.each(function() {
41185                var instance = $3.data(this, fullName);
41186                if (instance) {
41187                  instance.option(options || {});
41188                  if (instance._init) {
41189                    instance._init();
41190                  }
41191                } else {
41192                  $3.data(this, fullName, new object(options, this));
41193                }
41194              });
41195            }
41196            return returnValue;
41197          };
41198        };
41199        $3.Widget = function() {
41200        };
41201        $3.Widget._childConstructors = [];
41202        $3.Widget.prototype = {
41203          widgetName: "widget",
41204          widgetEventPrefix: "",
41205          defaultElement: "<div>",
41206          options: {
41207            classes: {},
41208            disabled: false,
41209            // Callbacks
41210            create: null
41211          },
41212          _createWidget: function(options, element) {
41213            element = $3(element || this.defaultElement || this)[0];
41214            this.element = $3(element);
41215            this.uuid = widgetUuid++;
41216            this.eventNamespace = "." + this.widgetName + this.uuid;
41217            this.bindings = $3();
41218            this.hoverable = $3();
41219            this.focusable = $3();
41220            this.classesElementLookup = {};
41221            if (element !== this) {
41222              $3.data(element, this.widgetFullName, this);
41223              this._on(true, this.element, {
41224                remove: function(event2) {
41225                  if (event2.target === element) {
41226                    this.destroy();
41227                  }
41228                }
41229              });
41230              this.document = $3(element.style ? (
41231                // Element within the document
41232                element.ownerDocument
41233              ) : (
41234                // Element is window or document
41235                element.document || element
41236              ));
41237              this.window = $3(this.document[0].defaultView || this.document[0].parentWindow);
41238            }
41239            this.options = $3.widget.extend(
41240              {},
41241              this.options,
41242              this._getCreateOptions(),
41243              options
41244            );
41245            this._create();
41246            if (this.options.disabled) {
41247              this._setOptionDisabled(this.options.disabled);
41248            }
41249            this._trigger("create", null, this._getCreateEventData());
41250            this._init();
41251          },
41252          _getCreateOptions: function() {
41253            return {};
41254          },
41255          _getCreateEventData: $3.noop,
41256          _create: $3.noop,
41257          _init: $3.noop,
41258          destroy: function() {
41259            var that = this;
41260            this._destroy();
41261            $3.each(this.classesElementLookup, function(key, value) {
41262              that._removeClass(value, key);
41263            });
41264            this.element.off(this.eventNamespace).removeData(this.widgetFullName);
41265            this.widget().off(this.eventNamespace).removeAttr("aria-disabled");
41266            this.bindings.off(this.eventNamespace);
41267          },
41268          _destroy: $3.noop,
41269          widget: function() {
41270            return this.element;
41271          },
41272          option: function(key, value) {
41273            var options = key;
41274            var parts;
41275            var curOption;
41276            var i;
41277            if (arguments.length === 0) {
41278              return $3.widget.extend({}, this.options);
41279            }
41280            if (typeof key === "string") {
41281              options = {};
41282              parts = key.split(".");
41283              key = parts.shift();
41284              if (parts.length) {
41285                curOption = options[key] = $3.widget.extend({}, this.options[key]);
41286                for (i = 0; i < parts.length - 1; i++) {
41287                  curOption[parts[i]] = curOption[parts[i]] || {};
41288                  curOption = curOption[parts[i]];
41289                }
41290                key = parts.pop();
41291                if (arguments.length === 1) {
41292                  return curOption[key] === void 0 ? null : curOption[key];
41293                }
41294                curOption[key] = value;
41295              } else {
41296                if (arguments.length === 1) {
41297                  return this.options[key] === void 0 ? null : this.options[key];
41298                }
41299                options[key] = value;
41300              }
41301            }
41302            this._setOptions(options);
41303            return this;
41304          },
41305          _setOptions: function(options) {
41306            var key;
41307            for (key in options) {
41308              this._setOption(key, options[key]);
41309            }
41310            return this;
41311          },
41312          _setOption: function(key, value) {
41313            if (key === "classes") {
41314              this._setOptionClasses(value);
41315            }
41316            this.options[key] = value;
41317            if (key === "disabled") {
41318              this._setOptionDisabled(value);
41319            }
41320            return this;
41321          },
41322          _setOptionClasses: function(value) {
41323            var classKey, elements, currentElements;
41324            for (classKey in value) {
41325              currentElements = this.classesElementLookup[classKey];
41326              if (value[classKey] === this.options.classes[classKey] || !currentElements || !currentElements.length) {
41327                continue;
41328              }
41329              elements = $3(currentElements.get());
41330              this._removeClass(currentElements, classKey);
41331              elements.addClass(this._classes({
41332                element: elements,
41333                keys: classKey,
41334                classes: value,
41335                add: true
41336              }));
41337            }
41338          },
41339          _setOptionDisabled: function(value) {
41340            this._toggleClass(this.widget(), this.widgetFullName + "-disabled", null, !!value);
41341            if (value) {
41342              this._removeClass(this.hoverable, null, "ui-state-hover");
41343              this._removeClass(this.focusable, null, "ui-state-focus");
41344            }
41345          },
41346          enable: function() {
41347            return this._setOptions({ disabled: false });
41348          },
41349          disable: function() {
41350            return this._setOptions({ disabled: true });
41351          },
41352          _classes: function(options) {
41353            var full = [];
41354            var that = this;
41355            options = $3.extend({
41356              element: this.element,
41357              classes: this.options.classes || {}
41358            }, options);
41359            function processClassString(classes, checkOption) {
41360              var current, i;
41361              for (i = 0; i < classes.length; i++) {
41362                current = that.classesElementLookup[classes[i]] || $3();
41363                if (options.add) {
41364                  current = $3($3.unique(current.get().concat(options.element.get())));
41365                } else {
41366                  current = $3(current.not(options.element).get());
41367                }
41368                that.classesElementLookup[classes[i]] = current;
41369                full.push(classes[i]);
41370                if (checkOption && options.classes[classes[i]]) {
41371                  full.push(options.classes[classes[i]]);
41372                }
41373              }
41374            }
41375            this._on(options.element, {
41376              "remove": "_untrackClassesElement"
41377            });
41378            if (options.keys) {
41379              processClassString(options.keys.match(/\S+/g) || [], true);
41380            }
41381            if (options.extra) {
41382              processClassString(options.extra.match(/\S+/g) || []);
41383            }
41384            return full.join(" ");
41385          },
41386          _untrackClassesElement: function(event2) {
41387            var that = this;
41388            $3.each(that.classesElementLookup, function(key, value) {
41389              if ($3.inArray(event2.target, value) !== -1) {
41390                that.classesElementLookup[key] = $3(value.not(event2.target).get());
41391              }
41392            });
41393          },
41394          _removeClass: function(element, keys, extra) {
41395            return this._toggleClass(element, keys, extra, false);
41396          },
41397          _addClass: function(element, keys, extra) {
41398            return this._toggleClass(element, keys, extra, true);
41399          },
41400          _toggleClass: function(element, keys, extra, add) {
41401            add = typeof add === "boolean" ? add : extra;
41402            var shift = typeof element === "string" || element === null, options = {
41403              extra: shift ? keys : extra,
41404              keys: shift ? element : keys,
41405              element: shift ? this.element : element,
41406              add
41407            };
41408            options.element.toggleClass(this._classes(options), add);
41409            return this;
41410          },
41411          _on: function(suppressDisabledCheck, element, handlers) {
41412            var delegateElement;
41413            var instance = this;
41414            if (typeof suppressDisabledCheck !== "boolean") {
41415              handlers = element;
41416              element = suppressDisabledCheck;
41417              suppressDisabledCheck = false;
vendor: 19,248 bytes, lines 41418-41872
41418            }
41419            if (!handlers) {
41420              handlers = element;
41421              element = this.element;
41422              delegateElement = this.widget();
41423            } else {
41424              element = delegateElement = $3(element);
41425              this.bindings = this.bindings.add(element);
41426            }
41427            $3.each(handlers, function(event2, handler) {
41428              function handlerProxy() {
41429                if (!suppressDisabledCheck && (instance.options.disabled === true || $3(this).hasClass("ui-state-disabled"))) {
41430                  return;
41431                }
41432                return (typeof handler === "string" ? instance[handler] : handler).apply(instance, arguments);
41433              }
41434              if (typeof handler !== "string") {
41435                handlerProxy.guid = handler.guid = handler.guid || handlerProxy.guid || $3.guid++;
41436              }
41437              var match = event2.match(/^([\w:-]*)\s*(.*)$/);
41438              var eventName = match[1] + instance.eventNamespace;
41439              var selector = match[2];
41440              if (selector) {
41441                delegateElement.on(eventName, selector, handlerProxy);
41442              } else {
41443                element.on(eventName, handlerProxy);
41444              }
41445            });
41446          },
41447          _off: function(element, eventName) {
41448            eventName = (eventName || "").split(" ").join(this.eventNamespace + " ") + this.eventNamespace;
41449            element.off(eventName).off(eventName);
41450            this.bindings = $3(this.bindings.not(element).get());
41451            this.focusable = $3(this.focusable.not(element).get());
41452            this.hoverable = $3(this.hoverable.not(element).get());
41453          },
41454          _delay: function(handler, delay) {
41455            function handlerProxy() {
41456              return (typeof handler === "string" ? instance[handler] : handler).apply(instance, arguments);
41457            }
41458            var instance = this;
41459            return setTimeout(handlerProxy, delay || 0);
41460          },
41461          _hoverable: function(element) {
41462            this.hoverable = this.hoverable.add(element);
41463            this._on(element, {
41464              mouseenter: function(event2) {
41465                this._addClass($3(event2.currentTarget), null, "ui-state-hover");
41466              },
41467              mouseleave: function(event2) {
41468                this._removeClass($3(event2.currentTarget), null, "ui-state-hover");
41469              }
41470            });
41471          },
41472          _focusable: function(element) {
41473            this.focusable = this.focusable.add(element);
41474            this._on(element, {
41475              focusin: function(event2) {
41476                this._addClass($3(event2.currentTarget), null, "ui-state-focus");
41477              },
41478              focusout: function(event2) {
41479                this._removeClass($3(event2.currentTarget), null, "ui-state-focus");
41480              }
41481            });
41482          },
41483          _trigger: function(type, event2, data) {
41484            var prop, orig;
41485            var callback = this.options[type];
41486            data = data || {};
41487            event2 = $3.Event(event2);
41488            event2.type = (type === this.widgetEventPrefix ? type : this.widgetEventPrefix + type).toLowerCase();
41489            event2.target = this.element[0];
41490            orig = event2.originalEvent;
41491            if (orig) {
41492              for (prop in orig) {
41493                if (!(prop in event2)) {
41494                  event2[prop] = orig[prop];
41495                }
41496              }
41497            }
41498            this.element.trigger(event2, data);
41499            return !($3.isFunction(callback) && callback.apply(this.element[0], [event2].concat(data)) === false || event2.isDefaultPrevented());
41500          }
41501        };
41502        $3.each({ show: "fadeIn", hide: "fadeOut" }, function(method, defaultEffect) {
41503          $3.Widget.prototype["_" + method] = function(element, options, callback) {
41504            if (typeof options === "string") {
41505              options = { effect: options };
41506            }
41507            var hasOptions;
41508            var effectName = !options ? method : options === true || typeof options === "number" ? defaultEffect : options.effect || defaultEffect;
41509            options = options || {};
41510            if (typeof options === "number") {
41511              options = { duration: options };
41512            }
41513            hasOptions = !$3.isEmptyObject(options);
41514            options.complete = callback;
41515            if (options.delay) {
41516              element.delay(options.delay);
41517            }
41518            if (hasOptions && $3.effects && $3.effects.effect[effectName]) {
41519              element[method](options);
41520            } else if (effectName !== method && element[effectName]) {
41521              element[effectName](options.duration, options.easing, callback);
41522            } else {
41523              element.queue(function(next) {
41524                $3(this)[method]();
41525                if (callback) {
41526                  callback.call(element[0]);
41527                }
41528                next();
41529              });
41530            }
41531          };
41532        });
41533        return $3.widget;
41534      });
41535      (function(factory) {
41536        if (typeof define === "function" && define.amd) {
41537          define([
41538            "jquery",
41539            "../keycode",
41540            "../position",
41541            "../safe-active-element",
41542            "../unique-id",
41543            "../version",
41544            "../widget"
41545          ], factory);
41546        } else {
41547          factory(jQuery);
41548        }
41549      })(function($3) {
41550        return $3.widget("ui.menu", {
41551          version: "1.12.1",
41552          defaultElement: "<ul>",
41553          delay: 300,
41554          options: {
41555            icons: {
41556              submenu: "ui-icon-caret-1-e"
41557            },
41558            items: "> *",
41559            menus: "ul",
41560            position: {
41561              my: "left top",
41562              at: "right top"
41563            },
41564            role: "menu",
41565            // Callbacks
41566            blur: null,
41567            focus: null,
41568            select: null
41569          },
41570          _create: function() {
41571            this.activeMenu = this.element;
41572            this.mouseHandled = false;
41573            this.element.uniqueId().attr({
41574              role: this.options.role,
41575              tabIndex: 0
41576            });
41577            this._addClass("ui-menu", "ui-widget ui-widget-content");
41578            this._on({
41579              // Prevent focus from sticking to links inside menu after clicking
41580              // them (focus should always stay on UL during navigation).
41581              "mousedown .ui-menu-item": function(event2) {
41582                event2.preventDefault();
41583              },
41584              "click .ui-menu-item": function(event2) {
41585                var target = $3(event2.target);
41586                var active = $3($3.ui.safeActiveElement(this.document[0]));
41587                if (!this.mouseHandled && target.not(".ui-state-disabled").length) {
41588                  this.select(event2);
41589                  if (!event2.isPropagationStopped()) {
41590                    this.mouseHandled = true;
41591                  }
41592                  if (target.has(".ui-menu").length) {
41593                    this.expand(event2);
41594                  } else if (!this.element.is(":focus") && active.closest(".ui-menu").length) {
41595                    this.element.trigger("focus", [true]);
41596                    if (this.active && this.active.parents(".ui-menu").length === 1) {
41597                      clearTimeout(this.timer);
41598                    }
41599                  }
41600                }
41601              },
41602              "mouseenter .ui-menu-item": function(event2) {
41603                if (this.previousFilter) {
41604                  return;
41605                }
41606                var actualTarget = $3(event2.target).closest(".ui-menu-item"), target = $3(event2.currentTarget);
41607                if (actualTarget[0] !== target[0]) {
41608                  return;
41609                }
41610                this._removeClass(
41611                  target.siblings().children(".ui-state-active"),
41612                  null,
41613                  "ui-state-active"
41614                );
41615                this.focus(event2, target);
41616              },
41617              mouseleave: "collapseAll",
41618              "mouseleave .ui-menu": "collapseAll",
41619              focus: function(event2, keepActiveItem) {
41620                var item = this.active || this.element.find(this.options.items).eq(0);
41621                if (!keepActiveItem) {
41622                  this.focus(event2, item);
41623                }
41624              },
41625              blur: function(event2) {
41626                this._delay(function() {
41627                  var notContained = !$3.contains(
41628                    this.element[0],
41629                    $3.ui.safeActiveElement(this.document[0])
41630                  );
41631                  if (notContained) {
41632                    this.collapseAll(event2);
41633                  }
41634                });
41635              },
41636              keydown: "_keydown"
41637            });
41638            this.refresh();
41639            this._on(this.document, {
41640              click: function(event2) {
41641                if (this._closeOnDocumentClick(event2)) {
41642                  this.collapseAll(event2);
41643                }
41644                this.mouseHandled = false;
41645              }
41646            });
41647          },
41648          _destroy: function() {
41649            var items = this.element.find(".ui-menu-item").removeAttr("role aria-disabled"), submenus = items.children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");
41650            this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show();
41651            submenus.children().each(function() {
41652              var elem = $3(this);
41653              if (elem.data("ui-menu-submenu-caret")) {
41654                elem.remove();
41655              }
41656            });
41657          },
41658          _keydown: function(event2) {
41659            var match, prev, character, skip, preventDefault = true;
41660            switch (event2.keyCode) {
41661              case $3.ui.keyCode.PAGE_UP:
41662                this.previousPage(event2);
41663                break;
41664              case $3.ui.keyCode.PAGE_DOWN:
41665                this.nextPage(event2);
41666                break;
41667              case $3.ui.keyCode.HOME:
41668                this._move("first", "first", event2);
41669                break;
41670              case $3.ui.keyCode.END:
41671                this._move("last", "last", event2);
41672                break;
41673              case $3.ui.keyCode.UP:
41674                this.previous(event2);
41675                break;
41676              case $3.ui.keyCode.DOWN:
41677                this.next(event2);
41678                break;
41679              case $3.ui.keyCode.LEFT:
41680                this.collapse(event2);
41681                break;
41682              case $3.ui.keyCode.RIGHT:
41683                if (this.active && !this.active.is(".ui-state-disabled")) {
41684                  this.expand(event2);
41685                }
41686                break;
41687              case $3.ui.keyCode.ENTER:
41688              case $3.ui.keyCode.SPACE:
41689                this._activate(event2);
41690                break;
41691              case $3.ui.keyCode.ESCAPE:
41692                this.collapse(event2);
41693                break;
41694              default:
41695                preventDefault = false;
41696                prev = this.previousFilter || "";
41697                skip = false;
41698                character = event2.keyCode >= 96 && event2.keyCode <= 105 ? (event2.keyCode - 96).toString() : String.fromCharCode(event2.keyCode);
41699                clearTimeout(this.filterTimer);
41700                if (character === prev) {
41701                  skip = true;
41702                } else {
41703                  character = prev + character;
41704                }
41705                match = this._filterMenuItems(character);
41706                match = skip && match.index(this.active.next()) !== -1 ? this.active.nextAll(".ui-menu-item") : match;
41707                if (!match.length) {
41708                  character = String.fromCharCode(event2.keyCode);
41709                  match = this._filterMenuItems(character);
41710                }
41711                if (match.length) {
41712                  this.focus(event2, match);
41713                  this.previousFilter = character;
41714                  this.filterTimer = this._delay(function() {
41715                    delete this.previousFilter;
41716                  }, 1e3);
41717                } else {
41718                  delete this.previousFilter;
41719                }
41720            }
41721            if (preventDefault) {
41722              event2.preventDefault();
41723            }
41724          },
41725          _activate: function(event2) {
41726            if (this.active && !this.active.is(".ui-state-disabled")) {
41727              if (this.active.children("[aria-haspopup='true']").length) {
41728                this.expand(event2);
41729              } else {
41730                this.select(event2);
41731              }
41732            }
41733          },
41734          refresh: function() {
41735            var menus, items, newSubmenus, newItems, newWrappers, that = this, icon = this.options.icons.submenu, submenus = this.element.find(this.options.menus);
41736            this._toggleClass("ui-menu-icons", null, !!this.element.find(".ui-icon").length);
41737            newSubmenus = submenus.filter(":not(.ui-menu)").hide().attr({
41738              role: this.options.role,
41739              "aria-hidden": "true",
41740              "aria-expanded": "false"
41741            }).each(function() {
41742              var menu = $3(this), item = menu.prev(), submenuCaret = $3("<span>").data("ui-menu-submenu-caret", true);
41743              that._addClass(submenuCaret, "ui-menu-icon", "ui-icon " + icon);
41744              item.attr("aria-haspopup", "true").prepend(submenuCaret);
41745              menu.attr("aria-labelledby", item.attr("id"));
41746            });
41747            this._addClass(newSubmenus, "ui-menu", "ui-widget ui-widget-content ui-front");
41748            menus = submenus.add(this.element);
41749            items = menus.find(this.options.items);
41750            items.not(".ui-menu-item").each(function() {
41751              var item = $3(this);
41752              if (that._isDivider(item)) {
41753                that._addClass(item, "ui-menu-divider", "ui-widget-content");
41754              }
41755            });
41756            newItems = items.not(".ui-menu-item, .ui-menu-divider");
41757            newWrappers = newItems.children().not(".ui-menu").uniqueId().attr({
41758              tabIndex: -1,
41759              role: this._itemRole()
41760            });
41761            this._addClass(newItems, "ui-menu-item")._addClass(newWrappers, "ui-menu-item-wrapper");
41762            items.filter(".ui-state-disabled").attr("aria-disabled", "true");
41763            if (this.active && !$3.contains(this.element[0], this.active[0])) {
41764              this.blur();
41765            }
41766          },
41767          _itemRole: function() {
41768            return {
41769              menu: "menuitem",
41770              listbox: "option"
41771            }[this.options.role];
41772          },
41773          _setOption: function(key, value) {
41774            if (key === "icons") {
41775              var icons = this.element.find(".ui-menu-icon");
41776              this._removeClass(icons, null, this.options.icons.submenu)._addClass(icons, null, value.submenu);
41777            }
41778            this._super(key, value);
41779          },
41780          _setOptionDisabled: function(value) {
41781            this._super(value);
41782            this.element.attr("aria-disabled", String(value));
41783            this._toggleClass(null, "ui-state-disabled", !!value);
41784          },
41785          focus: function(event2, item) {
41786            var nested, focused, activeParent;
41787            this.blur(event2, event2 && event2.type === "focus");
41788            this._scrollIntoView(item);
41789            this.active = item.first();
41790            focused = this.active.children(".ui-menu-item-wrapper");
41791            this._addClass(focused, null, "ui-state-active");
41792            if (this.options.role) {
41793              this.element.attr("aria-activedescendant", focused.attr("id"));
41794            }
41795            activeParent = this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper");
41796            this._addClass(activeParent, null, "ui-state-active");
41797            if (event2 && event2.type === "keydown") {
41798              this._close();
41799            } else {
41800              this.timer = this._delay(function() {
41801                this._close();
41802              }, this.delay);
41803            }
41804            nested = item.children(".ui-menu");
41805            if (nested.length && event2 && /^mouse/.test(event2.type)) {
41806              this._startOpening(nested);
41807            }
41808            this.activeMenu = item.parent();
41809            this._trigger("focus", event2, { item });
41810          },
41811          _scrollIntoView: function(item) {
41812            var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
41813            if (this._hasScroll()) {
41814              borderTop = parseFloat($3.css(this.activeMenu[0], "borderTopWidth")) || 0;
41815              paddingTop = parseFloat($3.css(this.activeMenu[0], "paddingTop")) || 0;
41816              offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
41817              scroll = this.activeMenu.scrollTop();
41818              elementHeight = this.activeMenu.height();
41819              itemHeight = item.outerHeight();
41820              if (offset < 0) {
41821                this.activeMenu.scrollTop(scroll + offset);
41822              } else if (offset + itemHeight > elementHeight) {
41823                this.activeMenu.scrollTop(scroll + offset - elementHeight + itemHeight);
41824              }
41825            }
41826          },
41827          blur: function(event2, fromFocus) {
41828            if (!fromFocus) {
41829              clearTimeout(this.timer);
41830            }
41831            if (!this.active) {
41832              return;
41833            }
41834            this._removeClass(
41835              this.active.children(".ui-menu-item-wrapper"),
41836              null,
41837              "ui-state-active"
41838            );
41839            this._trigger("blur", event2, { item: this.active });
41840            this.active = null;
41841          },
41842          _startOpening: function(submenu) {
41843            clearTimeout(this.timer);
41844            if (submenu.attr("aria-hidden") !== "true") {
41845              return;
41846            }
41847            this.timer = this._delay(function() {
41848              this._close();
41849              this._open(submenu);
41850            }, this.delay);
41851          },
41852          _open: function(submenu) {
41853            var position = $3.extend({
41854              of: this.active
41855            }, this.options.position);
41856            clearTimeout(this.timer);
41857            this.element.find(".ui-menu").not(submenu.parents(".ui-menu")).hide().attr("aria-hidden", "true");
41858            submenu.show().removeAttr("aria-hidden").attr("aria-expanded", "true").position(position);
41859          },
41860          collapseAll: function(event2, all) {
41861            clearTimeout(this.timer);
41862            this.timer = this._delay(function() {
41863              var currentMenu = all ? this.element : $3(event2 && event2.target).closest(this.element.find(".ui-menu"));
41864              if (!currentMenu.length) {
41865                currentMenu = this.element;
41866              }
41867              this._close(currentMenu);
41868              this.blur(event2);
41869              this._removeClass(currentMenu.find(".ui-state-active"), null, "ui-state-active");
41870              this.activeMenu = currentMenu;
41871            }, this.delay);
41872          },
vendor: 4,384 bytes, lines 41873-41981
41873          // With no arguments, closes the currently active menu - if nothing is active
41874          // it closes all menus.  If passed an argument, it will search for menus BELOW
41875          _close: function(startMenu) {
41876            if (!startMenu) {
41877              startMenu = this.active ? this.active.parent() : this.element;
41878            }
41879            startMenu.find(".ui-menu").hide().attr("aria-hidden", "true").attr("aria-expanded", "false");
41880          },
41881          _closeOnDocumentClick: function(event2) {
41882            return !$3(event2.target).closest(".ui-menu").length;
41883          },
41884          _isDivider: function(item) {
41885            return !/[^\-\u2014\u2013\s]/.test(item.text());
41886          },
41887          collapse: function(event2) {
41888            var newItem = this.active && this.active.parent().closest(".ui-menu-item", this.element);
41889            if (newItem && newItem.length) {
41890              this._close();
41891              this.focus(event2, newItem);
41892            }
41893          },
41894          expand: function(event2) {
41895            var newItem = this.active && this.active.children(".ui-menu ").find(this.options.items).first();
41896            if (newItem && newItem.length) {
41897              this._open(newItem.parent());
41898              this._delay(function() {
41899                this.focus(event2, newItem);
41900              });
41901            }
41902          },
41903          next: function(event2) {
41904            this._move("next", "first", event2);
41905          },
41906          previous: function(event2) {
41907            this._move("prev", "last", event2);
41908          },
41909          isFirstItem: function() {
41910            return this.active && !this.active.prevAll(".ui-menu-item").length;
41911          },
41912          isLastItem: function() {
41913            return this.active && !this.active.nextAll(".ui-menu-item").length;
41914          },
41915          _move: function(direction, filter, event2) {
41916            var next;
41917            if (this.active) {
41918              if (direction === "first" || direction === "last") {
41919                next = this.active[direction === "first" ? "prevAll" : "nextAll"](".ui-menu-item").eq(-1);
41920              } else {
41921                next = this.active[direction + "All"](".ui-menu-item").eq(0);
41922              }
41923            }
41924            if (!next || !next.length || !this.active) {
41925              next = this.activeMenu.find(this.options.items)[filter]();
41926            }
41927            this.focus(event2, next);
41928          },
41929          nextPage: function(event2) {
41930            var item, base, height;
41931            if (!this.active) {
41932              this.next(event2);
41933              return;
41934            }
41935            if (this.isLastItem()) {
41936              return;
41937            }
41938            if (this._hasScroll()) {
41939              base = this.active.offset().top;
41940              height = this.element.height();
41941              this.active.nextAll(".ui-menu-item").each(function() {
41942                item = $3(this);
41943                return item.offset().top - base - height < 0;
41944              });
41945              this.focus(event2, item);
41946            } else {
41947              this.focus(event2, this.activeMenu.find(this.options.items)[!this.active ? "first" : "last"]());
41948            }
41949          },
41950          previousPage: function(event2) {
41951            var item, base, height;
41952            if (!this.active) {
41953              this.next(event2);
41954              return;
41955            }
41956            if (this.isFirstItem()) {
41957              return;
41958            }
41959            if (this._hasScroll()) {
41960              base = this.active.offset().top;
41961              height = this.element.height();
41962              this.active.prevAll(".ui-menu-item").each(function() {
41963                item = $3(this);
41964                return item.offset().top - base + height > 0;
41965              });
41966              this.focus(event2, item);
41967            } else {
41968              this.focus(event2, this.activeMenu.find(this.options.items).first());
41969            }
41970          },
41971          _hasScroll: function() {
41972            return this.element.outerHeight() < this.element.prop("scrollHeight");
41973          },
41974          select: function(event2) {
41975            this.active = this.active || $3(event2.target).closest(".ui-menu-item");
41976            var ui = { item: this.active };
41977            if (!this.active.has(".ui-menu").length) {
41978              this.collapseAll(event2, true);
41979            }
41980            this._trigger("select", event2, ui);
41981          },
vendor: 4,374 bytes, lines 41982-42097
41982          _filterMenuItems: function(character) {
41983            var escapedCharacter = character.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&"), regex = new RegExp("^" + escapedCharacter, "i");
41984            return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function() {
41985              return regex.test(
41986                $3.trim($3(this).children(".ui-menu-item-wrapper").text())
41987              );
41988            });
41989          }
41990        });
41991      });
41992      (function(factory) {
41993        if (typeof define === "function" && define.amd) {
41994          define([
41995            "jquery",
41996            "./menu",
41997            "../keycode",
41998            "../position",
41999            "../safe-active-element",
42000            "../version",
42001            "../widget"
42002          ], factory);
42003        } else {
42004          factory(jQuery);
42005        }
42006      })(function($3) {
42007        $3.widget("ui.autocomplete", {
42008          version: "1.12.1",
42009          defaultElement: "<input>",
42010          options: {
42011            appendTo: null,
42012            autoFocus: false,
42013            delay: 300,
42014            minLength: 1,
42015            position: {
42016              my: "left top",
42017              at: "left bottom",
42018              collision: "none"
42019            },
42020            source: null,
42021            // Callbacks
42022            change: null,
42023            close: null,
42024            focus: null,
42025            open: null,
42026            response: null,
42027            search: null,
42028            select: null
42029          },
42030          requestIndex: 0,
42031          pending: 0,
42032          _create: function() {
42033            var suppressKeyPress, suppressKeyPressRepeat, suppressInput, nodeName = this.element[0].nodeName.toLowerCase(), isTextarea = nodeName === "textarea", isInput = nodeName === "input";
42034            this.isMultiLine = isTextarea || !isInput && this._isContentEditable(this.element);
42035            this.valueMethod = this.element[isTextarea || isInput ? "val" : "text"];
42036            this.isNewMenu = true;
42037            this._addClass("ui-autocomplete-input");
42038            this.element.attr("autocomplete", "off");
42039            this._on(this.element, {
42040              keydown: function(event2) {
42041                if (this.element.prop("readOnly")) {
42042                  suppressKeyPress = true;
42043                  suppressInput = true;
42044                  suppressKeyPressRepeat = true;
42045                  return;
42046                }
42047                suppressKeyPress = false;
42048                suppressInput = false;
42049                suppressKeyPressRepeat = false;
42050                var keyCode = $3.ui.keyCode;
42051                switch (event2.keyCode) {
42052                  case keyCode.PAGE_UP:
42053                    suppressKeyPress = true;
42054                    this._move("previousPage", event2);
42055                    break;
42056                  case keyCode.PAGE_DOWN:
42057                    suppressKeyPress = true;
42058                    this._move("nextPage", event2);
42059                    break;
42060                  case keyCode.UP:
42061                    suppressKeyPress = true;
42062                    this._keyEvent("previous", event2);
42063                    break;
42064                  case keyCode.DOWN:
42065                    suppressKeyPress = true;
42066                    this._keyEvent("next", event2);
42067                    break;
42068                  case keyCode.ENTER:
42069                    if (this.menu.active) {
42070                      suppressKeyPress = true;
42071                      event2.preventDefault();
42072                      this.menu.select(event2);
42073                    }
42074                    break;
42075                  case keyCode.TAB:
42076                    if (this.menu.active) {
42077                      this.menu.select(event2);
42078                    }
42079                    break;
42080                  case keyCode.ESCAPE:
42081                    if (this.menu.element.is(":visible")) {
42082                      if (!this.isMultiLine) {
42083                        this._value(this.term);
42084                      }
42085                      this.close(event2);
42086                      event2.preventDefault();
42087                    }
42088                    break;
42089                  default:
42090                    suppressKeyPressRepeat = true;
42091                    this._searchTimeout(event2);
42092                    break;
42093                }
42094              },
42095              keypress: function(event2) {
42096                if (suppressKeyPress) {
42097                  suppressKeyPress = false;
vendor: 14,896 bytes, lines 42098-42489
42098                  if (!this.isMultiLine || this.menu.element.is(":visible")) {
42099                    event2.preventDefault();
42100                  }
42101                  return;
42102                }
42103                if (suppressKeyPressRepeat) {
42104                  return;
42105                }
42106                var keyCode = $3.ui.keyCode;
42107                switch (event2.keyCode) {
42108                  case keyCode.PAGE_UP:
42109                    this._move("previousPage", event2);
42110                    break;
42111                  case keyCode.PAGE_DOWN:
42112                    this._move("nextPage", event2);
42113                    break;
42114                  case keyCode.UP:
42115                    this._keyEvent("previous", event2);
42116                    break;
42117                  case keyCode.DOWN:
42118                    this._keyEvent("next", event2);
42119                    break;
42120                }
42121              },
42122              input: function(event2) {
42123                if (suppressInput) {
42124                  suppressInput = false;
42125                  event2.preventDefault();
42126                  return;
42127                }
42128                this._searchTimeout(event2);
42129              },
42130              focus: function() {
42131                this.selectedItem = null;
42132                this.previous = this._value();
42133              },
42134              blur: function(event2) {
42135                if (this.cancelBlur) {
42136                  delete this.cancelBlur;
42137                  return;
42138                }
42139                clearTimeout(this.searching);
42140                this.close(event2);
42141                this._change(event2);
42142              }
42143            });
42144            this._initSource();
42145            this.menu = $3("<ul>").appendTo(this._appendTo()).menu({
42146              // disable ARIA support, the live region takes care of that
42147              role: null
42148            }).hide().menu("instance");
42149            this._addClass(this.menu.element, "ui-autocomplete", "ui-front");
42150            this._on(this.menu.element, {
42151              mousedown: function(event2) {
42152                event2.preventDefault();
42153                this.cancelBlur = true;
42154                this._delay(function() {
42155                  delete this.cancelBlur;
42156                  if (this.element[0] !== $3.ui.safeActiveElement(this.document[0])) {
42157                    this.element.trigger("focus");
42158                  }
42159                });
42160              },
42161              menufocus: function(event2, ui) {
42162                var label, item;
42163                if (this.isNewMenu) {
42164                  this.isNewMenu = false;
42165                  if (event2.originalEvent && /^mouse/.test(event2.originalEvent.type)) {
42166                    this.menu.blur();
42167                    this.document.one("mousemove", function() {
42168                      $3(event2.target).trigger(event2.originalEvent);
42169                    });
42170                    return;
42171                  }
42172                }
42173                item = ui.item.data("ui-autocomplete-item");
42174                if (false !== this._trigger("focus", event2, { item })) {
42175                  if (event2.originalEvent && /^key/.test(event2.originalEvent.type)) {
42176                    this._value(item.value);
42177                  }
42178                }
42179                label = ui.item.attr("aria-label") || item.value;
42180                if (label && $3.trim(label).length) {
42181                  this.liveRegion.children().hide();
42182                  $3("<div>").text(label).appendTo(this.liveRegion);
42183                }
42184              },
42185              menuselect: function(event2, ui) {
42186                var item = ui.item.data("ui-autocomplete-item"), previous = this.previous;
42187                if (this.element[0] !== $3.ui.safeActiveElement(this.document[0])) {
42188                  this.element.trigger("focus");
42189                  this.previous = previous;
42190                  this._delay(function() {
42191                    this.previous = previous;
42192                    this.selectedItem = item;
42193                  });
42194                }
42195                if (false !== this._trigger("select", event2, { item })) {
42196                  this._value(item.value);
42197                }
42198                this.term = this._value();
42199                this.close(event2);
42200                this.selectedItem = item;
42201              }
42202            });
42203            this.liveRegion = $3("<div>", {
42204              role: "status",
42205              "aria-live": "assertive",
42206              "aria-relevant": "additions"
42207            }).appendTo(this.document[0].body);
42208            this._addClass(this.liveRegion, null, "ui-helper-hidden-accessible");
42209            this._on(this.window, {
42210              beforeunload: function() {
42211                this.element.removeAttr("autocomplete");
42212              }
42213            });
42214          },
42215          _destroy: function() {
42216            clearTimeout(this.searching);
42217            this.element.removeAttr("autocomplete");
42218            this.menu.element.remove();
42219            this.liveRegion.remove();
42220          },
42221          _setOption: function(key, value) {
42222            this._super(key, value);
42223            if (key === "source") {
42224              this._initSource();
42225            }
42226            if (key === "appendTo") {
42227              this.menu.element.appendTo(this._appendTo());
42228            }
42229            if (key === "disabled" && value && this.xhr) {
42230              this.xhr.abort();
42231            }
42232          },
42233          _isEventTargetInWidget: function(event2) {
42234            var menuElement = this.menu.element[0];
42235            return event2.target === this.element[0] || event2.target === menuElement || $3.contains(menuElement, event2.target);
42236          },
42237          _closeOnClickOutside: function(event2) {
42238            if (!this._isEventTargetInWidget(event2)) {
42239              this.close();
42240            }
42241          },
42242          _appendTo: function() {
42243            var element = this.options.appendTo;
42244            if (element) {
42245              element = element.jquery || element.nodeType ? $3(element) : this.document.find(element).eq(0);
42246            }
42247            if (!element || !element[0]) {
42248              element = this.element.closest(".ui-front, dialog");
42249            }
42250            if (!element.length) {
42251              element = this.document[0].body;
42252            }
42253            return element;
42254          },
42255          _initSource: function() {
42256            var array, url, that = this;
42257            if ($3.isArray(this.options.source)) {
42258              array = this.options.source;
42259              this.source = function(request, response) {
42260                response($3.ui.autocomplete.filter(array, request.term));
42261              };
42262            } else if (typeof this.options.source === "string") {
42263              url = this.options.source;
42264              this.source = function(request, response) {
42265                if (that.xhr) {
42266                  that.xhr.abort();
42267                }
42268                that.xhr = $3.ajax({
42269                  url,
42270                  data: request,
42271                  dataType: "json",
42272                  success: function(data) {
42273                    response(data);
42274                  },
42275                  error: function() {
42276                    response([]);
42277                  }
42278                });
42279              };
42280            } else {
42281              this.source = this.options.source;
42282            }
42283          },
42284          _searchTimeout: function(event2) {
42285            clearTimeout(this.searching);
42286            this.searching = this._delay(function() {
42287              var equalValues = this.term === this._value(), menuVisible = this.menu.element.is(":visible"), modifierKey = event2.altKey || event2.ctrlKey || event2.metaKey || event2.shiftKey;
42288              if (!equalValues || equalValues && !menuVisible && !modifierKey) {
42289                this.selectedItem = null;
42290                this.search(null, event2);
42291              }
42292            }, this.options.delay);
42293          },
42294          search: function(value, event2) {
42295            value = value != null ? value : this._value();
42296            this.term = this._value();
42297            if (value.length < this.options.minLength) {
42298              return this.close(event2);
42299            }
42300            if (this._trigger("search", event2) === false) {
42301              return;
42302            }
42303            return this._search(value);
42304          },
42305          _search: function(value) {
42306            this.pending++;
42307            this._addClass("ui-autocomplete-loading");
42308            this.cancelSearch = false;
42309            this.source({ term: value }, this._response());
42310          },
42311          _response: function() {
42312            var index = ++this.requestIndex;
42313            return $3.proxy(function(content) {
42314              if (index === this.requestIndex) {
42315                this.__response(content);
42316              }
42317              this.pending--;
42318              if (!this.pending) {
42319                this._removeClass("ui-autocomplete-loading");
42320              }
42321            }, this);
42322          },
42323          __response: function(content) {
42324            if (content) {
42325              content = this._normalize(content);
42326            }
42327            this._trigger("response", null, { content });
42328            if (!this.options.disabled && content && content.length && !this.cancelSearch) {
42329              this._suggest(content);
42330              this._trigger("open");
42331            } else {
42332              this._close();
42333            }
42334          },
42335          close: function(event2) {
42336            this.cancelSearch = true;
42337            this._close(event2);
42338          },
42339          _close: function(event2) {
42340            this._off(this.document, "mousedown");
42341            if (this.menu.element.is(":visible")) {
42342              this.menu.element.hide();
42343              this.menu.blur();
42344              this.isNewMenu = true;
42345              this._trigger("close", event2);
42346            }
42347          },
42348          _change: function(event2) {
42349            if (this.previous !== this._value()) {
42350              this._trigger("change", event2, { item: this.selectedItem });
42351            }
42352          },
42353          _normalize: function(items) {
42354            if (items.length && items[0].label && items[0].value) {
42355              return items;
42356            }
42357            return $3.map(items, function(item) {
42358              if (typeof item === "string") {
42359                return {
42360                  label: item,
42361                  value: item
42362                };
42363              }
42364              return $3.extend({}, item, {
42365                label: item.label || item.value,
42366                value: item.value || item.label
42367              });
42368            });
42369          },
42370          _suggest: function(items) {
42371            var ul = this.menu.element.empty();
42372            this._renderMenu(ul, items);
42373            this.isNewMenu = true;
42374            this.menu.refresh();
42375            ul.show();
42376            this._resizeMenu();
42377            ul.position($3.extend({
42378              of: this.element
42379            }, this.options.position));
42380            if (this.options.autoFocus) {
42381              this.menu.next();
42382            }
42383            this._on(this.document, {
42384              mousedown: "_closeOnClickOutside"
42385            });
42386          },
42387          _resizeMenu: function() {
42388            var ul = this.menu.element;
42389            ul.outerWidth(Math.max(
42390              // Firefox wraps long text (possibly a rounding bug)
42391              // so we add 1px to avoid the wrapping (#7513)
42392              ul.width("").outerWidth() + 1,
42393              this.element.outerWidth()
42394            ));
42395          },
42396          _renderMenu: function(ul, items) {
42397            var that = this;
42398            $3.each(items, function(index, item) {
42399              that._renderItemData(ul, item);
42400            });
42401          },
42402          _renderItemData: function(ul, item) {
42403            return this._renderItem(ul, item).data("ui-autocomplete-item", item);
42404          },
42405          _renderItem: function(ul, item) {
42406            return $3("<li>").append($3("<div>").text(item.label)).appendTo(ul);
42407          },
42408          _move: function(direction, event2) {
42409            if (!this.menu.element.is(":visible")) {
42410              this.search(null, event2);
42411              return;
42412            }
42413            if (this.menu.isFirstItem() && /^previous/.test(direction) || this.menu.isLastItem() && /^next/.test(direction)) {
42414              if (!this.isMultiLine) {
42415                this._value(this.term);
42416              }
42417              this.menu.blur();
42418              return;
42419            }
42420            this.menu[direction](event2);
42421          },
42422          widget: function() {
42423            return this.menu.element;
42424          },
42425          _value: function() {
42426            return this.valueMethod.apply(this.element, arguments);
42427          },
42428          _keyEvent: function(keyEvent, event2) {
42429            if (!this.isMultiLine || this.menu.element.is(":visible")) {
42430              this._move(keyEvent, event2);
42431              event2.preventDefault();
42432            }
42433          },
42434          // Support: Chrome <=50
42435          // We should be able to just use this.element.prop( "isContentEditable" )
42436          // but hidden elements always report false in Chrome.
42437          // https://code.google.com/p/chromium/issues/detail?id=313082
42438          _isContentEditable: function(element) {
42439            if (!element.length) {
42440              return false;
42441            }
42442            var editable = element.prop("contentEditable");
42443            if (editable === "inherit") {
42444              return this._isContentEditable(element.parent());
42445            }
42446            return editable === "true";
42447          }
42448        });
42449        $3.extend($3.ui.autocomplete, {
42450          escapeRegex: function(value) {
42451            return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
42452          },
42453          filter: function(array, term) {
42454            var matcher = new RegExp($3.ui.autocomplete.escapeRegex(term), "i");
42455            return $3.grep(array, function(value) {
42456              return matcher.test(value.label || value.value || value);
42457            });
42458          }
42459        });
42460        $3.widget("ui.autocomplete", $3.ui.autocomplete, {
42461          options: {
42462            messages: {
42463              noResults: "No search results.",
42464              results: function(amount) {
42465                return amount + (amount > 1 ? " results are" : " result is") + " available, use up and down arrow keys to navigate.";
42466              }
42467            }
42468          },
42469          __response: function(content) {
42470            var message;
42471            this._superApply(arguments);
42472            if (this.options.disabled || this.cancelSearch) {
42473              return;
42474            }
42475            if (content && content.length) {
42476              message = this.options.messages.results(content.length);
42477            } else {
42478              message = this.options.messages.noResults;
42479            }
42480            this.liveRegion.children().hide();
42481            $3("<div>").text(message).appendTo(this.liveRegion);
42482          }
42483        });
42484        return $3.ui.autocomplete;
42485      });
42486    }
42487  });
42488
42489  
42489// apps/base/assets/javascripts/vendor/jquery.ujs.js
42490  var require_jquery_ujs = __commonJS({
42491    "apps/base/assets/javascripts/vendor/jquery.ujs.js"() {
42492      "use strict";
42493      init_esbuild_shims();
42494      (function($3, undefined2) {
42495        "use strict";
42496        if ($3.rails !== undefined2) {
42497          $3.error("jquery-ujs has already been loaded!");
42498        }
42499        var rails;
42500        var $document = $3(document);
42501        $3.rails = rails = {
42502          // Link elements bound by jquery-ujs
42503          linkClickSelector: "a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]",
42504          // Button elements bound by jquery-ujs
42505          buttonClickSelector: "button[data-remote]:not([form]):not(form button), button[data-confirm]:not([form]):not(form button)",
42506          // Select elements bound by jquery-ujs
42507          inputChangeSelector: "select[data-remote], input[data-remote], textarea[data-remote]",
42508          // Form elements bound by jquery-ujs
42509          formSubmitSelector: "form",
42510          // Form input elements bound by jquery-ujs
42511          formInputClickSelector: "form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])",
42512          // Form input elements disabled during form submission
42513          disableSelector: "input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled",
42514          // Form input elements re-enabled after form submission
42515          enableSelector: "input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled",
42516          // Form required input elements
42517          requiredInputSelector: "input[name][required]:not([disabled]), textarea[name][required]:not([disabled])",
42518          // Form file input elements
42519          fileInputSelector: "input[name][type=file]:not([disabled])",
42520          // Link onClick disable selector with possible reenable after remote submission
42521          linkDisableSelector: "a[data-disable-with], a[data-disable]",
42522          // Button onClick disable selector with possible reenable after remote submission
42523          buttonDisableSelector: "button[data-remote][data-disable-with], button[data-remote][data-disable]",
42524          // Up-to-date Cross-Site Request Forgery token
42525          csrfToken: function() {
42526            return $3("meta[name=csrf-token]").attr("content");
42527          },
42528          // URL param that must contain the CSRF token
42529          csrfParam: function() {
42530            return $3("meta[name=csrf-param]").attr("content");
42531          },
42532          // Make sure that every Ajax request sends the CSRF token
42533          CSRFProtection: function(xhr) {
42534            var token = rails.csrfToken();
42535            if (token) xhr.setRequestHeader("X-CSRF-Token", token);
42536          },
42537          // Make sure that all forms have actual up-to-date tokens (cached forms contain old ones)
42538          refreshCSRFTokens: function() {
42539            $3('form input[name="' + rails.csrfParam() + '"]').val(rails.csrfToken());
42540          },
42541          // Triggers an event on an element and returns false if the event result is false
42542          fire: function(obj, name, data) {
42543            var event2 = $3.Event(name);
42544            obj.trigger(event2, data);
42545            return event2.result !== false;
42546          },
42547          // Default confirm dialog, may be overridden with custom confirm dialog in $.rails.confirm
42548          confirm: function(message) {
42549            return confirm(message);
42550          },
42551          // Default ajax function, may be overridden with custom function in $.rails.ajax
42552          ajax: function(options) {
42553            return $3.ajax(options);
42554          },
42555          // Default way to get an element's href. May be overridden at $.rails.href.
42556          href: function(element) {
42557            return element[0].href;
42558          },
42559          // Checks "data-remote" if true to handle the request through a XHR request.
42560          isRemote: function(element) {
42561            return element.data("remote") !== undefined2 && element.data("remote") !== false;
42562          },
42563          // Submits "remote" forms and links with ajax
42564          handleRemote: function(element) {
42565            var method, url, data, withCredentials, dataType, options;
42566            if (rails.fire(element, "ajax:before")) {
42567              withCredentials = element.data("with-credentials") || null;
42568              dataType = element.data("type") || $3.ajaxSettings && $3.ajaxSettings.dataType;
42569              if (element.is("form")) {
42570                method = element.data("ujs:submit-button-formmethod") || element.attr("method");
42571                url = element.data("ujs:submit-button-formaction") || element.attr("action");
42572                data = $3(element[0]).serializeArray();
42573                var button = element.data("ujs:submit-button");
42574                if (button) {
42575                  data.push(button);
42576                  element.data("ujs:submit-button", null);
42577                }
42578                element.data("ujs:submit-button-formmethod", null);
42579                element.data("ujs:submit-button-formaction", null);
42580              } else if (element.is(rails.inputChangeSelector)) {
42581                method = element.data("method");
42582                url = element.data("url");
42583                data = element.serialize();
42584                if (element.data("params")) data = data + "&" + element.data("params");
42585              } else if (element.is(rails.buttonClickSelector)) {
42586                method = element.data("method") || "get";
42587                url = element.data("url");
42588                data = element.serialize();
42589                if (element.data("params")) data = data + "&" + element.data("params");
42590              } else {
42591                method = element.data("method");
42592                url = rails.href(element);
42593                data = element.data("params") || null;
42594              }
42595              options = {
42596                type: method || "GET",
42597                data,
42598                dataType,
42599                // stopping the "ajax:beforeSend" event will cancel the ajax request
42600                beforeSend: function(xhr, settings) {
42601                  if (settings.dataType === undefined2) {
42602                    xhr.setRequestHeader("accept", "*/*;q=0.5, " + settings.accepts.script);
42603                  }
42604                  if (rails.fire(element, "ajax:beforeSend", [xhr, settings])) {
42605                    element.trigger("ajax:send", xhr);
42606                  } else {
42607                    return false;
42608                  }
42609                },
42610                success: function(data2, status, xhr) {
42611                  element.trigger("ajax:success", [data2, status, xhr]);
42612                },
42613                complete: function(xhr, status) {
42614                  element.trigger("ajax:complete", [xhr, status]);
42615                },
42616                error: function(xhr, status, error) {
42617                  element.trigger("ajax:error", [xhr, status, error]);
42618                },
42619                crossDomain: rails.isCrossDomain(url)
42620              };
42621              if (withCredentials) {
42622                options.xhrFields = {
42623                  withCredentials
42624                };
42625              }
42626              if (url) {
42627                options.url = url;
42628              }
42629              return rails.ajax(options);
42630            } else {
42631              return false;
42632            }
42633          },
42634          // Determines if the request is a cross domain request.
42635          isCrossDomain: function(url) {
42636            var originAnchor = document.createElement("a");
42637            originAnchor.href = location.href;
42638            var urlAnchor = document.createElement("a");
42639            try {
42640              urlAnchor.href = url;
42641              urlAnchor.href = urlAnchor.href;
42642              return !((!urlAnchor.protocol || urlAnchor.protocol === ":") && !urlAnchor.host || originAnchor.protocol + "//" + originAnchor.host === urlAnchor.protocol + "//" + urlAnchor.host);
42643            } catch (e) {
42644              return true;
42645            }
42646          },
42647          // Handles "data-method" on links such as:
42648          // <a href="/users/5" data-method="delete" rel="nofollow" data-confirm="Are you sure?">Delete</a>
42649          handleMethod: function(link) {
42650            var href = rails.href(link), method = link.data("method"), target = link.attr("target"), csrfToken = rails.csrfToken(), csrfParam = rails.csrfParam(), form = $3('<form method="post" action="' + href + '"></form>'), metadataInput = '<input name="_method" value="' + method + '" type="hidden" />';
42651            if (csrfParam !== undefined2 && csrfToken !== undefined2 && !rails.isCrossDomain(href)) {
42652              metadataInput += '<input name="' + csrfParam + '" value="' + csrfToken + '" type="hidden" />';
42653            }
42654            if (target) {
42655              form.attr("target", target);
42656            }
42657            form.hide().append(metadataInput).appendTo("body");
42658            form.submit();
42659          },
42660          // Helper function that returns form elements that match the specified CSS selector
42661          // If form is actually a "form" element this will return associated elements outside the from that have
42662          // the html form attribute set
42663          formElements: function(form, selector) {
42664            return form.is("form") ? $3(form[0].elements).filter(selector) : form.find(selector);
42665          },
42666          /* Disables form elements:
42667            - Caches element value in 'ujs:enable-with' data store
42668            - Replaces element text with value of 'data-disable-with' attribute
42669            - Sets disabled property to true
42670          */
42671          disableFormElements: function(form) {
42672            rails.formElements(form, rails.disableSelector).each(function() {
42673              rails.disableFormElement($3(this));
42674            });
42675          },
42676          disableFormElement: function(element) {
42677            var method, replacement;
42678            method = element.is("button") ? "html" : "val";
42679            replacement = element.data("disable-with");
42680            if (replacement !== undefined2) {
42681              element.data("ujs:enable-with", element[method]());
42682              element[method](replacement);
42683            }
42684            element.prop("disabled", true);
42685            element.data("ujs:disabled", true);
42686          },
42687          /* Re-enables disabled form elements:
42688            - Replaces element text with cached value from 'ujs:enable-with' data store (created in `disableFormElements`)
42689            - Sets disabled property to false
42690          */
42691          enableFormElements: function(form) {
42692            rails.formElements(form, rails.enableSelector).each(function() {
42693              rails.enableFormElement($3(this));
42694            });
42695          },
42696          enableFormElement: function(element) {
42697            var method = element.is("button") ? "html" : "val";
42698            if (element.data("ujs:enable-with") !== undefined2) {
42699              element[method](element.data("ujs:enable-with"));
42700              element.removeData("ujs:enable-with");
42701            }
42702            element.prop("disabled", false);
42703            element.removeData("ujs:disabled");
42704          },
42705          /* For 'data-confirm' attribute:
42706                - Fires `confirm` event
42707                - Shows the confirmation dialog
42708                - Fires the `confirm:complete` event
42709          
42710                Returns `true` if no function stops the chain and user chose yes; `false` otherwise.
42711                Attaching a handler to the element's `confirm` event that returns a `falsy` value cancels the confirmation dialog.
42712                Attaching a handler to the element's `confirm:complete` event that returns a `falsy` value makes this function
42713                return false. The `confirm:complete` event is fired 
42713whether or not the user answered true or false to the dialog.
42714             */
42715          allowAction: function(element) {
42716            var message = element.data("confirm"), answer = false, callback;
42717            if (!message) {
42718              return true;
42719            }
42720            if (rails.fire(element, "confirm")) {
42721              try {
42722                answer = rails.confirm(message);
42723              } catch (e) {
42724                (console.error || console.log).call(console, e.stack || e);
42725              }
42726              callback = rails.fire(element, "confirm:complete", [answer]);
42727            }
42728            return answer && callback;
42729          },
42730          // Helper function which checks for blank inputs in a form that match the specified CSS selector
42731          blankInputs: function(form, specifiedSelector, nonBlank) {
42732            var foundInputs = $3(), input, valueToCheck, radiosForNameWithNoneSelected, radioName, selector = specifiedSelector || "input,textarea", requiredInputs = form.find(selector), checkedRadioButtonNames = {};
42733            requiredInputs.each(function() {
42734              input = $3(this);
42735              if (input.is("input[type=radio]")) {
42736                radioName = input.attr("name");
42737                if (!checkedRadioButtonNames[radioName]) {
42738                  if (form.find('input[type=radio]:checked[name="' + radioName + '"]').length === 0) {
42739                    radiosForNameWithNoneSelected = form.find(
42740                      'input[type=radio][name="' + radioName + '"]'
42741                    );
42742                    foundInputs = foundInputs.add(radiosForNameWithNoneSelected);
42743                  }
42744                  checkedRadioButtonNames[radioName] = radioName;
42745                }
42746              } else {
42747                valueToCheck = input.is("input[type=checkbox],input[type=radio]") ? input.is(":checked") : !!input.val();
42748                if (valueToCheck === nonBlank) {
42749                  foundInputs = foundInputs.add(input);
42750                }
42751              }
42752            });
42753            return foundInputs.length ? foundInputs : false;
42754          },
42755          // Helper function which checks for non-blank inputs in a form that match the specified CSS selector
42756          nonBlankInputs: function(form, specifiedSelector) {
42757            return rails.blankInputs(form, specifiedSelector, true);
42758          },
42759          // Helper function, needed to provide consistent behavior in IE
42760          stopEverything: function(e) {
42761            $3(e.target).trigger("ujs:everythingStopped");
42762            e.stopImmediatePropagation();
42763            return false;
42764          },
42765          //  Replace element's html with the 'data-disable-with' after storing original html
42766          //  and prevent clicking on it
42767          disableElement: function(element) {
42768            var replacement = element.data("disable-with");
42769            if (replacement !== undefined2) {
42770              element.data("ujs:enable-with", element.html());
42771              element.html(replacement);
42772            }
42773            element.bind("click.railsDisable", function(e) {
42774              return rails.stopEverything(e);
42775            });
42776            element.data("ujs:disabled", true);
42777          },
42778          // Restore element to its original state which was disabled by 'disableElement' above
42779          enableElement: function(element) {
42780            if (element.data("ujs:enable-with") !== undefined2) {
42781              element.html(element.data("ujs:enable-with"));
42782              element.removeData("ujs:enable-with");
42783            }
42784            element.unbind("click.railsDisable");
42785            element.removeData("ujs:disabled");
42786          }
42787        };
42788        if (rails.fire($document, "rails:attachBindings")) {
42789          $3.ajaxPrefilter(function(options, originalOptions, xhr) {
42790            if (!options.crossDomain) {
42791              rails.CSRFProtection(xhr);
42792            }
42793          });
42794          $3(window).on("pageshow.rails", function() {
42795            $3($3.rails.enableSelector).each(function() {
42796              var element = $3(this);
42797              if (element.data("ujs:disabled")) {
42798                $3.rails.enableFormElement(element);
42799              }
42800            });
42801            $3($3.rails.linkDisableSelector).each(function() {
42802              var element = $3(this);
42803              if (element.data("ujs:disabled")) {
42804                $3.rails.enableElement(element);
42805              }
42806            });
42807          });
42808          $document.on("ajax:complete", rails.linkDisableSelector, function() {
42809            rails.enableElement($3(this));
42810          });
42811          $document.on("ajax:complete", rails.buttonDisableSelector, function() {
42812            rails.enableFormElement($3(this));
42813          });
42814          $document.on("click.rails", rails.linkClickSelector, function(e) {
42815            var link = $3(this), method = link.data("method"), data = link.data("params"), metaClick = e.metaKey || e.ctrlKey;
42816            if (!rails.allowAction(link)) return rails.stopEverything(e);
42817            if (!metaClick && link.is(rails.linkDisableSelector)) rails.disableElement(link);
42818            if (rails.isRemote(link)) {
42819              if (metaClick && (!method || method === "GET") && !data) {
42820                return true;
42821              }
42822              var handleRemote = rails.handleRemote(link);
42823              if (handleRemote === false) {
42824                rails.enableElement(link);
42825              } else {
42826                handleRemote.fail(function() {
42827                  rails.enableElement(link);
42828                });
42829              }
42830              return false;
42831            } else if (method) {
42832              rails.handleMethod(link);
42833              return false;
42834            }
42835          });
42836          $document.on("click.rails", rails.buttonClickSelector, function(e) {
42837            var button = $3(this);
42838            if (!rails.allowAction(button) || !rails.isRemote(button)) return rails.stopEverything(e);
42839            if (button.is(rails.buttonDisableSelector)) rails.disableFormElement(button);
42840            var handleRemote = rails.handleRemote(button);
42841            if (handleRemote === false) {
42842              rails.enableFormElement(button);
42843            } else {
42844              handleRemote.fail(function() {
42845                rails.enableFormElement(button);
42846              });
42847            }
42848            return false;
42849          });
42850          $document.on("change.rails", rails.inputChangeSelector, function(e) {
42851            var link = $3(this);
42852            if (!rails.allowAction(link) || !rails.isRemote(link)) return rails.stopEverything(e);
42853            rails.handleRemote(link);
42854            return false;
42855          });
42856          $document.on("submit.rails", rails.formSubmitSelector, function(e) {
42857            var form = $3(this), remote = rails.isRemote(form), blankRequiredInputs, nonBlankFileInputs;
42858            if (!rails.allowAction(form)) return rails.stopEverything(e);
42859            if (form.attr("novalidate") === undefined2) {
42860              if (form.data("ujs:formnovalidate-button") === undefined2) {
42861                blankRequiredInputs = rails.blankInputs(form, rails.requiredInputSelector, false);
42862                if (blankRequiredInputs && rails.fire(form, "ajax:aborted:required", [blankRequiredInputs])) {
42863                  return rails.stopEverything(e);
42864                }
42865              } else {
42866                form.data("ujs:formnovalidate-button", undefined2);
42867              }
42868            }
42869            if (remote) {
42870              nonBlankFileInputs = rails.nonBlankInputs(form, rails.fileInputSelector);
42871              if (nonBlankFileInputs) {
42872                setTimeout(function() {
42873                  rails.disableFormElements(form);
42874                }, 13);
42875                var aborted = rails.fire(form, "ajax:aborted:file", [nonBlankFileInputs]);
42876                if (!aborted) {
42877                  setTimeout(function() {
42878                    rails.enableFormElements(form);
42879                  }, 13);
42880                }
42881                return aborted;
42882              }
42883              rails.handleRemote(form);
42884              return false;
42885            } else {
42886              setTimeout(function() {
42887                rails.disableFormElements(form);
42888              }, 13);
42889            }
42890          });
42891          $document.on("click.rails", rails.formInputClickSelector, function(event2) {
42892            var button = $3(this);
42893            if (!rails.allowAction(button)) return rails.stopEverything(event2);
42894            var name = button.attr("name"), data = name ? { name, value: button.val() } : null;
42895            var form = button.closest("form");
42896            if (form.length === 0) {
42897              form = $3("#" + button.attr("form"));
42898            }
42899            form.data("ujs:submit-button", data);
42900            form.data("ujs:formnovalidate-button", button.attr("formnovalidate"));
42901            form.data("ujs:submit-button-formaction", button.attr("formaction"));
42902            form.data("ujs:submit-button-formmethod", button.attr("formmethod"));
42903          });
42904          $document.on("ajax:send.rails", rails.formSubmitSelector, function(event2) {
42905            if (this === event2.target) rails.disableFormElements($3(this));
42906          });
42907          $document.on("ajax:complete.rails", rails.formSubmitSelector, function(event2) {
42908            if (this === event2.target) rails.enableFormElements($3(this));
42909          });
42910          $3(function() {
42911            rails.refreshCSRFTokens();
42912          });
42913        }
42914      })(jQuery);
42915    }
42916  });
42917
42918  
vendor: 16,156 bytes, lines 42918-43335
42918// apps/base/assets/javascripts/vendor/magnific-popup.js
42919  var require_magnific_popup = __commonJS({
42920    "apps/base/assets/javascripts/vendor/magnific-popup.js"(exports) {
42921      "use strict";
42922      init_esbuild_shims();
42923      (function(factory) {
42924        if (typeof define === "function" && define.amd) {
42925          define(["jquery"], factory);
42926        } else if (typeof exports === "object") {
42927          factory(require_jquery());
42928        } else {
42929          factory(window.jQuery || window.Zepto);
42930        }
42931      })(function($3) {
42932        var CLOSE_EVENT = "Close", BEFORE_CLOSE_EVENT = "BeforeClose", AFTER_CLOSE_EVENT = "AfterClose", BEFORE_APPEND_EVENT = "BeforeAppend", MARKUP_PARSE_EVENT = "MarkupParse", OPEN_EVENT = "Open", CHANGE_EVENT = "Change", NS = "mfp", EVENT_NS = "." + NS, READY_CLASS = "mfp-ready", REMOVING_CLASS = "mfp-removing", PREVENT_CLOSE_CLASS = "mfp-prevent-close";
42933        var mfp, MagnificPopup = function() {
42934        }, _isJQ = !!window.jQuery, _prevStatus, _window = $3(window), _document, _prevContentType, _wrapClasses, _currPopupType;
42935        var _mfpOn = function(name, f) {
42936          mfp.ev.on(NS + name + EVENT_NS, f);
42937        }, _getEl = function(className, appendTo, html, raw) {
42938          var el = document.createElement("div");
42939          el.className = "mfp-" + className;
42940          if (html) {
42941            el.innerHTML = html;
42942          }
42943          if (!raw) {
42944            el = $3(el);
42945            if (appendTo) {
42946              el.appendTo(appendTo);
42947            }
42948          } else if (appendTo) {
42949            appendTo.appendChild(el);
42950          }
42951          return el;
42952        }, _mfpTrigger = function(e, data) {
42953          mfp.ev.triggerHandler(NS + e, data);
42954          if (mfp.st.callbacks) {
42955            e = e.charAt(0).toLowerCase() + e.slice(1);
42956            if (mfp.st.callbacks[e]) {
42957              mfp.st.callbacks[e].apply(mfp, $3.isArray(data) ? data : [data]);
42958            }
42959          }
42960        }, _getCloseBtn = function(type) {
42961          if (type !== _currPopupType || !mfp.currTemplate.closeBtn) {
42962            mfp.currTemplate.closeBtn = $3(mfp.st.closeMarkup.replace("%title%", mfp.st.tClose));
42963            _currPopupType = type;
42964          }
42965          return mfp.currTemplate.closeBtn;
42966        }, _checkInstance = function() {
42967          if (!$3.magnificPopup.instance) {
42968            mfp = new MagnificPopup();
42969            mfp.init();
42970            $3.magnificPopup.instance = mfp;
42971          }
42972        }, supportsTransitions = function() {
42973          var s = document.createElement("p").style, v = ["ms", "O", "Moz", "Webkit"];
42974          if (s["transition"] !== void 0) {
42975            return true;
42976          }
42977          while (v.length) {
42978            if (v.pop() + "Transition" in s) {
42979              return true;
42980            }
42981          }
42982          return false;
42983        };
42984        MagnificPopup.prototype = {
42985          constructor: MagnificPopup,
42986          /**
42987           * Initializes Magnific Popup plugin. 
42988           * This function is triggered only once when $.fn.magnificPopup or $.magnificPopup is executed
42989           */
42990          init: function() {
42991            var appVersion = navigator.appVersion;
42992            mfp.isLowIE = mfp.isIE8 = document.all && !document.addEventListener;
42993            mfp.isAndroid = /android/gi.test(appVersion);
42994            mfp.isIOS = /iphone|ipad|ipod/gi.test(appVersion);
42995            mfp.supportsTransition = supportsTransitions();
42996            mfp.probablyMobile = mfp.isAndroid || mfp.isIOS || /(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent);
42997            _document = $3(document);
42998            mfp.popupsCache = {};
42999          },
43000          /**
43001           * Opens popup
43002           * @param  data [description]
43003           */
43004          open: function(data) {
43005            var i;
43006            if (data.isObj === false) {
43007              mfp.items = data.items.toArray();
43008              mfp.index = 0;
43009              var items = data.items, item;
43010              for (i = 0; i < items.length; i++) {
43011                item = items[i];
43012                if (item.parsed) {
43013                  item = item.el[0];
43014                }
43015                if (item === data.el[0]) {
43016                  mfp.index = i;
43017                  break;
43018                }
43019              }
43020            } else {
43021              mfp.items = $3.isArray(data.items) ? data.items : [data.items];
43022              mfp.index = data.index || 0;
43023            }
43024            if (mfp.isOpen) {
43025              mfp.updateItemHTML();
43026              return;
43027            }
43028            mfp.types = [];
43029            _wrapClasses = "";
43030            if (data.mainEl && data.mainEl.length) {
43031              mfp.ev = data.mainEl.eq(0);
43032            } else {
43033              mfp.ev = _document;
43034            }
43035            if (data.key) {
43036              if (!mfp.popupsCache[data.key]) {
43037                mfp.popupsCache[data.key] = {};
43038              }
43039              mfp.currTemplate = mfp.popupsCache[data.key];
43040            } else {
43041              mfp.currTemplate = {};
43042            }
43043            mfp.st = $3.extend(true, {}, $3.magnificPopup.defaults, data);
43044            mfp.fixedContentPos = mfp.st.fixedContentPos === "auto" ? !mfp.probablyMobile : mfp.st.fixedContentPos;
43045            if (mfp.st.modal) {
43046              mfp.st.closeOnContentClick = false;
43047              mfp.st.closeOnBgClick = false;
43048              mfp.st.showCloseBtn = false;
43049              mfp.st.enableEscapeKey = false;
43050            }
43051            if (!mfp.bgOverlay) {
43052              mfp.bgOverlay = _getEl("bg").on("click" + EVENT_NS, function() {
43053                mfp.close();
43054              });
43055              mfp.wrap = _getEl("wrap").attr("tabindex", -1).on("click" + EVENT_NS, function(e) {
43056                if (mfp._checkIfClose(e.target)) {
43057                  mfp.close();
43058                }
43059              });
43060              mfp.container = _getEl("container", mfp.wrap);
43061            }
43062            mfp.contentContainer = _getEl("content");
43063            if (mfp.st.preloader) {
43064              mfp.preloader = _getEl("preloader", mfp.container, mfp.st.tLoading);
43065            }
43066            var modules = $3.magnificPopup.modules;
43067            for (i = 0; i < modules.length; i++) {
43068              var n = modules[i];
43069              n = n.charAt(0).toUpperCase() + n.slice(1);
43070              mfp["init" + n].call(mfp);
43071            }
43072            _mfpTrigger("BeforeOpen");
43073            if (mfp.st.showCloseBtn) {
43074              if (!mfp.st.closeBtnInside) {
43075                mfp.wrap.append(_getCloseBtn());
43076              } else {
43077                _mfpOn(MARKUP_PARSE_EVENT, function(e, template, values, item2) {
43078                  values.close_replaceWith = _getCloseBtn(item2.type);
43079                });
43080                _wrapClasses += " mfp-close-btn-in";
43081              }
43082            }
43083            if (mfp.st.alignTop) {
43084              _wrapClasses += " mfp-align-top";
43085            }
43086            if (mfp.fixedContentPos) {
43087              mfp.wrap.css({
43088                overflow: mfp.st.overflowY,
43089                overflowX: "hidden",
43090                overflowY: mfp.st.overflowY
43091              });
43092            } else {
43093              mfp.wrap.css({
43094                top: _window.scrollTop(),
43095                position: "absolute"
43096              });
43097            }
43098            if (mfp.st.fixedBgPos === false || mfp.st.fixedBgPos === "auto" && !mfp.fixedContentPos) {
43099              mfp.bgOverlay.css({
43100                height: _document.height(),
43101                position: "absolute"
43102              });
43103            }
43104            if (mfp.st.enableEscapeKey) {
43105              _document.on("keyup" + EVENT_NS, function(e) {
43106                if (e.keyCode === 27) {
43107                  mfp.close();
43108                }
43109              });
43110            }
43111            _window.on("resize" + EVENT_NS, function() {
43112              mfp.updateSize();
43113            });
43114            if (!mfp.st.closeOnContentClick) {
43115              _wrapClasses += " mfp-auto-cursor";
43116            }
43117            if (_wrapClasses)
43118              mfp.wrap.addClass(_wrapClasses);
43119            var windowHeight = mfp.wH = _window.height();
43120            var windowStyles = {};
43121            if (mfp.fixedContentPos) {
43122              if (mfp._hasScrollBar(windowHeight)) {
43123                var s = mfp._getScrollbarSize();
43124                if (s) {
43125                  windowStyles.marginRight = s;
43126                }
43127              }
43128            }
43129            if (mfp.fixedContentPos) {
43130              if (!mfp.isIE7) {
43131                windowStyles.overflow = "hidden";
43132              } else {
43133                $3("body, html").css("overflow", "hidden");
43134              }
43135            }
43136            var classesToadd = mfp.st.mainClass;
43137            if (mfp.isIE7) {
43138              classesToadd += " mfp-ie7";
43139            }
43140            if (classesToadd) {
43141              mfp._addClassToMFP(classesToadd);
43142            }
43143            mfp.updateItemHTML();
43144            _mfpTrigger("BuildControls");
43145            $3("html").css(windowStyles);
43146            mfp.bgOverlay.add(mfp.wrap).prependTo(mfp.st.prependTo || $3(document.body));
43147            mfp._lastFocusedEl = document.activeElement;
43148            setTimeout(function() {
43149              if (mfp.content) {
43150                mfp._addClassToMFP(READY_CLASS);
43151                mfp._setFocus();
43152              } else {
43153                mfp.bgOverlay.addClass(READY_CLASS);
43154              }
43155              _document.on("focusin" + EVENT_NS, mfp._onFocusIn);
43156            }, 16);
43157            mfp.isOpen = true;
43158            mfp.updateSize(windowHeight);
43159            _mfpTrigger(OPEN_EVENT);
43160            return data;
43161          },
43162          /**
43163           * Closes the popup
43164           */
43165          close: function() {
43166            if (!mfp.isOpen) return;
43167            _mfpTrigger(BEFORE_CLOSE_EVENT);
43168            mfp.isOpen = false;
43169            if (mfp.st.removalDelay && !mfp.isLowIE && mfp.supportsTransition) {
43170              mfp._addClassToMFP(REMOVING_CLASS);
43171              setTimeout(function() {
43172                mfp._close();
43173              }, mfp.st.removalDelay);
43174            } else {
43175              mfp._close();
43176            }
43177          },
43178          /**
43179           * Helper for close() function
43180           */
43181          _close: function() {
43182            _mfpTrigger(CLOSE_EVENT);
43183            var classesToRemove = REMOVING_CLASS + " " + READY_CLASS + " ";
43184            mfp.bgOverlay.detach();
43185            mfp.wrap.detach();
43186            mfp.container.empty();
43187            if (mfp.st.mainClass) {
43188              classesToRemove += mfp.st.mainClass + " ";
43189            }
43190            mfp._removeClassFromMFP(classesToRemove);
43191            if (mfp.fixedContentPos) {
43192              var windowStyles = { marginRight: "" };
43193              if (mfp.isIE7) {
43194                $3("body, html").css("overflow", "");
43195              } else {
43196                windowStyles.overflow = "";
43197              }
43198              $3("html").css(windowStyles);
43199            }
43200            _document.off("keyup" + EVENT_NS + " focusin" + EVENT_NS);
43201            mfp.ev.off(EVENT_NS);
43202            mfp.wrap.attr("class", "mfp-wrap").removeAttr("style");
43203            mfp.bgOverlay.attr("class", "mfp-bg");
43204            mfp.container.attr("class", "mfp-container");
43205            if (mfp.st.showCloseBtn && (!mfp.st.closeBtnInside || mfp.currTemplate[mfp.currItem.type] === true)) {
43206              if (mfp.currTemplate.closeBtn)
43207                mfp.currTemplate.closeBtn.detach();
43208            }
43209            if (mfp.st.autoFocusLast && mfp._lastFocusedEl) {
43210              $3(mfp._lastFocusedEl).focus();
43211            }
43212            mfp.currItem = null;
43213            mfp.content = null;
43214            mfp.currTemplate = null;
43215            mfp.prevHeight = 0;
43216            _mfpTrigger(AFTER_CLOSE_EVENT);
43217          },
43218          updateSize: function(winHeight) {
43219            if (mfp.isIOS) {
43220              var zoomLevel = document.documentElement.clientWidth / window.innerWidth;
43221              var height = window.innerHeight * zoomLevel;
43222              mfp.wrap.css("height", height);
43223              mfp.wH = height;
43224            } else {
43225              mfp.wH = winHeight || _window.height();
43226            }
43227            if (!mfp.fixedContentPos) {
43228              mfp.wrap.css("height", mfp.wH);
43229            }
43230            _mfpTrigger("Resize");
43231          },
43232          /**
43233           * Set content of popup based on current index
43234           */
43235          updateItemHTML: function() {
43236            var item = mfp.items[mfp.index];
43237            mfp.contentContainer.detach();
43238            if (mfp.content)
43239              mfp.content.detach();
43240            if (!item.parsed) {
43241              item = mfp.parseEl(mfp.index);
43242            }
43243            var type = item.type;
43244            _mfpTrigger("BeforeChange", [mfp.currItem ? mfp.currItem.type : "", type]);
43245            mfp.currItem = item;
43246            if (!mfp.currTemplate[type]) {
43247              var markup = mfp.st[type] ? mfp.st[type].markup : false;
43248              _mfpTrigger("FirstMarkupParse", markup);
43249              if (markup) {
43250                mfp.currTemplate[type] = $3(markup);
43251              } else {
43252                mfp.currTemplate[type] = true;
43253              }
43254            }
43255            if (_prevContentType && _prevContentType !== item.type) {
43256              mfp.container.removeClass("mfp-" + _prevContentType + "-holder");
43257            }
43258            var newContent = mfp["get" + type.charAt(0).toUpperCase() + type.slice(1)](item, mfp.currTemplate[type]);
43259            mfp.appendContent(newContent, type);
43260            item.preloaded = true;
43261            _mfpTrigger(CHANGE_EVENT, item);
43262            _prevContentType = item.type;
43263            mfp.container.prepend(mfp.contentContainer);
43264            _mfpTrigger("AfterChange");
43265          },
43266          /**
43267           * Set HTML content of popup
43268           */
43269          appendContent: function(newContent, type) {
43270            mfp.content = newContent;
43271            if (newContent) {
43272              if (mfp.st.showCloseBtn && mfp.st.closeBtnInside && mfp.currTemplate[type] === true) {
43273                if (!mfp.content.find(".mfp-close").length) {
43274                  mfp.content.append(_getCloseBtn());
43275                }
43276              } else {
43277                mfp.content = newContent;
43278              }
43279            } else {
43280              mfp.content = "";
43281            }
43282            _mfpTrigger(BEFORE_APPEND_EVENT);
43283            mfp.container.addClass("mfp-" + type + "-holder");
43284            mfp.contentContainer.append(mfp.content);
43285          },
43286          /**
43287           * Creates Magnific Popup data object based on given data
43288           * @param  {int} index Index of item to parse
43289           */
43290          parseEl: function(index) {
43291            var item = mfp.items[index], type;
43292            if (item.tagName) {
43293              item = { el: $3(item) };
43294            } else {
43295              type = item.type;
43296              item = { data: item, src: item.src };
43297            }
43298            if (item.el) {
43299              var types = mfp.types;
43300              for (var i = 0; i < types.length; i++) {
43301                if (item.el.hasClass("mfp-" + types[i])) {
43302                  type = types[i];
43303                  break;
43304                }
43305              }
43306              item.src = item.el.attr("data-mfp-src");
43307              if (!item.src) {
43308                item.src = item.el.attr("href");
43309              }
43310            }
43311            item.type = type || mfp.st.type || "inline";
43312            item.index = index;
43313            item.parsed = true;
43314            mfp.items[index] = item;
43315            _mfpTrigger("ElementParse", item);
43316            return mfp.items[index];
43317          },
43318          /**
43319           * Initializes single popup or a group of popups
43320           */
43321          addGroup: function(el, options) {
43322            var eHandler = function(e) {
43323              e.mfpEl = this;
43324              mfp._openClick(e, el, options);
43325            };
43326            if (!options) {
43327              options = {};
43328            }
43329            var eName = "click.magnificPopup";
43330            options.mainEl = el;
43331            if (options.items) {
43332              options.isObj = true;
43333              el.off(eName).on(eName, eHandler);
43334            } else {
43335              options.isObj = false;
43336              if (options.delegate) {
43337                el.off(eName).on(eName, options.delegate, eHandler);
43338              } else {
43339                options.items = el;
43340                el.off(eName).on(eName, eHandler);
43341              }
43342            }
43343          },
43344          _openClick: function(e, el, options) {
43345            var midClick = options.midClick !== void 0 ? options.midClick : $3.magnificPopup.defaults.midClick;
43346            if (!midClick && (e.which === 2 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey)) {
43347              return;
43348            }
43349            var disableOn = options.disableOn !== void 0 ? options.disableOn : $3.magnificPopup.defaults.disableOn;
43350            if (disableOn) {
43351              if ($3.isFunction(disableOn)) {
43352                if (!disableOn.call(mfp)) {
43353                  return true;
43354                }
43355              } else {
43356                if (_window.width() < disableOn) {
43357                  return true;
43358                }
43359              }
43360            }
43361            if (e.type) {
43362              e.preventDefault();
43363              if (mfp.isOpen) {
43364                e.stopPropagation();
43365              }
43366            }
43367            options.el = $3(e.mfpEl);
43368            if (options.delegate) {
43369              options.items = el.find(options.delegate);
43370            }
43371            mfp.open(options);
43372          },
43373          /**
43374           * Updates text on preloader
43375           */
43376          updateStatus: function(status, text) {
43377            if (mfp.preloader) {
43378              if (_prevStatus !== status) {
43379                mfp.container.removeClass("mfp-s-" + _prevStatus);
43380              }
43381              if (!text && status === "loading") {
43382                text = mfp.st.tLoading;
43383              }
43384              var data = {
43385                status,
43386                text
43387              };
43388              _mfpTrigger("UpdateStatus", data);
43389              status = data.status;
43390              text = data.text;
43391              mfp.preloader.html(text);
43392              mfp.preloader.find("a").on("click", function(e) {
43393                e.stopImmediatePropagation();
43394              });
43395              mfp.container.addClass("mfp-s-" + status);
43396              _prevStatus = status;
43397            }
43398          },
43399          /*
43400            "Private" helpers that aren't private at all
43401           */
43402          // Check to close popup or not
43403          // "target" is an element that was clicked
43404          _checkIfClose: function(target) {
43405            if ($3(target).hasClass(PREVENT_CLOSE_CLASS)) {
43406              return;
43407            }
43408            var closeOnContent = mfp.st.closeOnContentClick;
43409            var closeOnBg = mfp.st.closeOnBgClick;
43410            if (closeOnContent && closeOnBg) {
43411              return true;
43412            } else {
43413              if (!mfp.content || $3(target).hasClass("mfp-close") || mfp.preloader && target === mfp.preloader[0]) {
43414                return true;
43415              }
43416              if (target !== mfp.content[0] && !$3.contains(mfp.content[0], target)) {
43417                if (closeOnBg) {
43418                  if ($3.contains(document, target)) {
43419                    return true;
43420                  }
43421                }
43422              } else if (closeOnContent) {
43423                return true;
43424              }
43425            }
43426            return false;
43427          },
43428          _addClassToMFP: function(cName) {
43429            mfp.bgOverlay.addClass(cName);
43430            mfp.wrap.addClass(cName);
43431          },
43432          _removeClassFromMFP: function(cName) {
43433            this.bgOverlay.removeClass(cName);
43434            mfp.wrap.removeClass(cName);
43435          },
43436          _hasScrollBar: function(winHeight) {
43437            return (mfp.isIE7 ? _document.height() : document.body.scrollHeight) > (winHeight || _window.height());
43438          },
43439          _setFocus: function() {
43440            (mfp.st.focus ? mfp.content.find(mfp.st.focus).eq(0) : mfp.wrap).focus();
43441          },
43442          _onFocusIn: function(e) {
43443            if (e.target !== mfp.wrap[0] && !$3.contains(mfp.wrap[0], e.target)) {
43444              mfp._setFocus();
43445              return false;
43446            }
43447          },
43448          _parseMarkup: function(template, values, item) {
43449            var arr;
43450            if (item.data) {
43451              values = $3.extend(item.data, values);
43452            }
43453            _mfpTrigger(MARKUP_PARSE_EVENT, [template, values, item]);
43454            $3.each(values, function(key, value) {
43455              if (value === void 0 || value === false) {
43456                return true;
43457              }
43458              arr = key.split("_");
43459              if (arr.length > 1) {
43460                var el = template.find(EVENT_NS + "-" + arr[0]);
43461                if (el.length > 0) {
43462                  var attr = arr[1];
43463                  if (attr === "replaceWith") {
43464                    if (el[0] !== value[0]) {
43465                      el.replaceWith(value);
43466                    }
43467                  } else if (attr === "img") {
43468                    if (el.is("img")) {
43469                      el.attr("src", value);
43470                    } else {
43471                      el.replaceWith($3("<img>").attr("src", value).attr("class", el.attr("class")));
43472                    }
43473                  } else {
43474                    el.attr(arr[1], value);
43475                  }
43476                }
43477              } else {
43478                template.find(EVENT_NS + "-" + key).html(value);
43479              }
43480            });
43481          },
43482          _getScrollbarSize: function() {
43483            if (mfp.scrollbarSize === void 0) {
43484              var scrollDiv = document.createElement("div");
43485              scrollDiv.style.cssText = "width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;";
43486              document.body.appendChild(scrollDiv);
43487              mfp.scrollbarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth;
43488              document.body.removeChild(scrollDiv);
43489            }
43490            return mfp.scrollbarSize;
43491          }
43492        };
43493        $3.magnificPopup = {
43494          instance: null,
43495          proto: MagnificPopup.prototype,
43496          modules: [],
43497          open: function(options, index) {
43498            _checkInstance();
43499            if (!options) {
43500              options = {};
43501            } else {
43502              options = $3.extend(true, {}, options);
43503            }
43504            options.isObj = true;
43505            options.index = index || 0;
43506            return this.instance.open(options);
43507          },
43508          close: function() {
43509            return $3.magnificPopup.instance && $3.magnificPopup.instance.close();
43510          },
43511          registerModule: function(name, module2) {
43512            if (module2.options) {
43513              $3.magnificPopup.defaults[name] = module2.options;
43514            }
43515            $3.extend(this.proto, module2.proto);
43516            this.modules.push(name);
43517          },
43518          defaults: {
43519            // Info about options is in docs:
vendor: 22,172 bytes, lines 43520-44085
43520            // http://dimsemenov.com/plugins/magnific-popup/documentation.html#options
43521            disableOn: 0,
43522            key: null,
43523            midClick: false,
43524            mainClass: "",
43525            preloader: true,
43526            focus: "",
43527            // CSS selector of input to focus after popup is opened
43528            closeOnContentClick: false,
43529            closeOnBgClick: true,
43530            closeBtnInside: true,
43531            showCloseBtn: true,
43532            enableEscapeKey: true,
43533            modal: false,
43534            alignTop: false,
43535            removalDelay: 0,
43536            prependTo: null,
43537            fixedContentPos: "auto",
43538            fixedBgPos: "auto",
43539            overflowY: "auto",
43540            closeMarkup: '<button title="%title%" type="button" class="mfp-close">&#215;</button>',
43541            tClose: "Close (Esc)",
43542            tLoading: "Loading...",
43543            autoFocusLast: true
43544          }
43545        };
43546        $3.fn.magnificPopup = function(options) {
43547          _checkInstance();
43548          var jqEl = $3(this);
43549          if (typeof options === "string") {
43550            if (options === "open") {
43551              var items, itemOpts = _isJQ ? jqEl.data("magnificPopup") : jqEl[0].magnificPopup, index = parseInt(arguments[1], 10) || 0;
43552              if (itemOpts.items) {
43553                items = itemOpts.items[index];
43554              } else {
43555                items = jqEl;
43556                if (itemOpts.delegate) {
43557                  items = items.find(itemOpts.delegate);
43558                }
43559                items = items.eq(index);
43560              }
43561              mfp._openClick({ mfpEl: items }, jqEl, itemOpts);
43562            } else {
43563              if (mfp.isOpen)
43564                mfp[options].apply(mfp, Array.prototype.slice.call(arguments, 1));
43565            }
43566          } else {
43567            options = $3.extend(true, {}, options);
43568            if (_isJQ) {
43569              jqEl.data("magnificPopup", options);
43570            } else {
43571              jqEl[0].magnificPopup = options;
43572            }
43573            mfp.addGroup(jqEl, options);
43574          }
43575          return jqEl;
43576        };
43577        var INLINE_NS = "inline", _hiddenClass, _inlinePlaceholder, _lastInlineElement, _putInlineElementsBack = function() {
43578          if (_lastInlineElement) {
43579            _inlinePlaceholder.after(_lastInlineElement.addClass(_hiddenClass)).detach();
43580            _lastInlineElement = null;
43581          }
43582        };
43583        $3.magnificPopup.registerModule(INLINE_NS, {
43584          options: {
43585            hiddenClass: "hide",
43586            // will be appended with `mfp-` prefix
43587            markup: "",
43588            tNotFound: "Content not found"
43589          },
43590          proto: {
43591            initInline: function() {
43592              mfp.types.push(INLINE_NS);
43593              _mfpOn(CLOSE_EVENT + "." + INLINE_NS, function() {
43594                _putInlineElementsBack();
43595              });
43596            },
43597            getInline: function(item, template) {
43598              _putInlineElementsBack();
43599              if (item.src) {
43600                var inlineSt = mfp.st.inline, el = $3(item.src);
43601                if (el.length) {
43602                  var parent = el[0].parentNode;
43603                  if (parent && parent.tagName) {
43604                    if (!_inlinePlaceholder) {
43605                      _hiddenClass = inlineSt.hiddenClass;
43606                      _inlinePlaceholder = _getEl(_hiddenClass);
43607                      _hiddenClass = "mfp-" + _hiddenClass;
43608                    }
43609                    _lastInlineElement = el.after(_inlinePlaceholder).detach().removeClass(_hiddenClass);
43610                  }
43611                  mfp.updateStatus("ready");
43612                } else {
43613                  mfp.updateStatus("error", inlineSt.tNotFound);
43614                  el = $3("<div>");
43615                }
43616                item.inlineElement = el;
43617                return el;
43618              }
43619              mfp.updateStatus("ready");
43620              mfp._parseMarkup(template, {}, item);
43621              return template;
43622            }
43623          }
43624        });
43625        var AJAX_NS = "ajax", _ajaxCur, _removeAjaxCursor = function() {
43626          if (_ajaxCur) {
43627            $3(document.body).removeClass(_ajaxCur);
43628          }
43629        }, _destroyAjaxRequest = function() {
43630          _removeAjaxCursor();
43631          if (mfp.req) {
43632            mfp.req.abort();
43633          }
43634        };
43635        $3.magnificPopup.registerModule(AJAX_NS, {
43636          options: {
43637            settings: null,
43638            cursor: "mfp-ajax-cur",
43639            tError: '<a href="%url%">The content</a> could not be loaded.'
43640          },
43641          proto: {
43642            initAjax: function() {
43643              mfp.types.push(AJAX_NS);
43644              _ajaxCur = mfp.st.ajax.cursor;
43645              _mfpOn(CLOSE_EVENT + "." + AJAX_NS, _destroyAjaxRequest);
43646              _mfpOn("BeforeChange." + AJAX_NS, _destroyAjaxRequest);
43647            },
43648            getAjax: function(item) {
43649              if (_ajaxCur) {
43650                $3(document.body).addClass(_ajaxCur);
43651              }
43652              mfp.updateStatus("loading");
43653              var opts = $3.extend({
43654                url: item.src,
43655                success: function(data, textStatus, jqXHR) {
43656                  var temp = {
43657                    data,
43658                    xhr: jqXHR
43659                  };
43660                  _mfpTrigger("ParseAjax", temp);
43661                  mfp.appendContent($3(temp.data), AJAX_NS);
43662                  item.finished = true;
43663                  _removeAjaxCursor();
43664                  mfp._setFocus();
43665                  setTimeout(function() {
43666                    mfp.wrap.addClass(READY_CLASS);
43667                  }, 16);
43668                  mfp.updateStatus("ready");
43669                  _mfpTrigger("AjaxContentAdded");
43670                },
43671                error: function() {
43672                  _removeAjaxCursor();
43673                  item.finished = item.loadError = true;
43674                  mfp.updateStatus("error", mfp.st.ajax.tError.replace("%url%", item.src));
43675                }
43676              }, mfp.st.ajax.settings);
43677              mfp.req = $3.ajax(opts);
43678              return "";
43679            }
43680          }
43681        });
43682        var _imgInterval, _getTitle = function(item) {
43683          if (item.data && item.data.title !== void 0)
43684            return item.data.title;
43685          var src = mfp.st.image.titleSrc;
43686          if (src) {
43687            if ($3.isFunction(src)) {
43688              return src.call(mfp, item);
43689            } else if (item.el) {
43690              return item.el.attr(src) || "";
43691            }
43692          }
43693          return "";
43694        };
43695        $3.magnificPopup.registerModule("image", {
43696          options: {
43697            markup: '<div class="mfp-figure"><div class="mfp-close"></div><figure><div class="mfp-img"></div><figcaption><div class="mfp-bottom-bar"><div class="mfp-title"></div><div class="mfp-counter"></div></div></figcaption></figure></div>',
43698            cursor: "mfp-zoom-out-cur",
43699            titleSrc: "title",
43700            verticalFit: true,
43701            tError: '<a href="%url%">The image</a> could not be loaded.'
43702          },
43703          proto: {
43704            initImage: function() {
43705              var imgSt = mfp.st.image, ns = ".image";
43706              mfp.types.push("image");
43707              _mfpOn(OPEN_EVENT + ns, function() {
43708                if (mfp.currItem.type === "image" && imgSt.cursor) {
43709                  $3(document.body).addClass(imgSt.cursor);
43710                }
43711              });
43712              _mfpOn(CLOSE_EVENT + ns, function() {
43713                if (imgSt.cursor) {
43714                  $3(document.body).removeClass(imgSt.cursor);
43715                }
43716                _window.off("resize" + EVENT_NS);
43717              });
43718              _mfpOn("Resize" + ns, mfp.resizeImage);
43719              if (mfp.isLowIE) {
43720                _mfpOn("AfterChange", mfp.resizeImage);
43721              }
43722            },
43723            resizeImage: function() {
43724              var item = mfp.currItem;
43725              if (!item || !item.img) return;
43726              if (mfp.st.image.verticalFit) {
43727                var decr = 0;
43728                if (mfp.isLowIE) {
43729                  decr = parseInt(item.img.css("padding-top"), 10) + parseInt(item.img.css("padding-bottom"), 10);
43730                }
43731                item.img.css("max-height", mfp.wH - decr);
43732              }
43733            },
43734            _onImageHasSize: function(item) {
43735              if (item.img) {
43736                item.hasSize = true;
43737                if (_imgInterval) {
43738                  clearInterval(_imgInterval);
43739                }
43740                item.isCheckingImgSize = false;
43741                _mfpTrigger("ImageHasSize", item);
43742                if (item.imgHidden) {
43743                  if (mfp.content)
43744                    mfp.content.removeClass("mfp-loading");
43745                  item.imgHidden = false;
43746                }
43747              }
43748            },
43749            /**
43750             * Function that loops until the image has size to display elements that rely on it asap
43751             */
43752            findImageSize: function(item) {
43753              var counter = 0, img = item.img[0], mfpSetInterval = function(delay) {
43754                if (_imgInterval) {
43755                  clearInterval(_imgInterval);
43756                }
43757                _imgInterval = setInterval(function() {
43758                  if (img.naturalWidth > 0) {
43759                    mfp._onImageHasSize(item);
43760                    return;
43761                  }
43762                  if (counter > 200) {
43763                    clearInterval(_imgInterval);
43764                  }
43765                  counter++;
43766                  if (counter === 3) {
43767                    mfpSetInterval(10);
43768                  } else if (counter === 40) {
43769                    mfpSetInterval(50);
43770                  } else if (counter === 100) {
43771                    mfpSetInterval(500);
43772                  }
43773                }, delay);
43774              };
43775              mfpSetInterval(1);
43776            },
43777            getImage: function(item, template) {
43778              var guard = 0, onLoadComplete = function() {
43779                if (item) {
43780                  if (item.img[0].complete) {
43781                    item.img.off(".mfploader");
43782                    if (item === mfp.currItem) {
43783                      mfp._onImageHasSize(item);
43784                      mfp.updateStatus("ready");
43785                    }
43786                    item.hasSize = true;
43787                    item.loaded = true;
43788                    _mfpTrigger("ImageLoadComplete");
43789                  } else {
43790                    guard++;
43791                    if (guard < 200) {
43792                      setTimeout(onLoadComplete, 100);
43793                    } else {
43794                      onLoadError();
43795                    }
43796                  }
43797                }
43798              }, onLoadError = function() {
43799                if (item) {
43800                  item.img.off(".mfploader");
43801                  if (item === mfp.currItem) {
43802                    mfp._onImageHasSize(item);
43803                    mfp.updateStatus("error", imgSt.tError.replace("%url%", item.src));
43804                  }
43805                  item.hasSize = true;
43806                  item.loaded = true;
43807                  item.loadError = true;
43808                }
43809              }, imgSt = mfp.st.image;
43810              var el = template.find(".mfp-img");
43811              if (el.length) {
43812                var img = document.createElement("img");
43813                img.className = "mfp-img";
43814                if (item.el && item.el.find("img").length) {
43815                  img.alt = item.el.find("img").attr("alt");
43816                }
43817                item.img = $3(img).on("load.mfploader", onLoadComplete).on("error.mfploader", onLoadError);
43818                img.src = item.src;
43819                if (el.is("img")) {
43820                  item.img = item.img.clone();
43821                }
43822                img = item.img[0];
43823                if (img.naturalWidth > 0) {
43824                  item.hasSize = true;
43825                } else if (!img.width) {
43826                  item.hasSize = false;
43827                }
43828              }
43829              mfp._parseMarkup(template, {
43830                title: _getTitle(item),
43831                img_replaceWith: item.img
43832              }, item);
43833              mfp.resizeImage();
43834              if (item.hasSize) {
43835                if (_imgInterval) clearInterval(_imgInterval);
43836                if (item.loadError) {
43837                  template.addClass("mfp-loading");
43838                  mfp.updateStatus("error", imgSt.tError.replace("%url%", item.src));
43839                } else {
43840                  template.removeClass("mfp-loading");
43841                  mfp.updateStatus("ready");
43842                }
43843                return template;
43844              }
43845              mfp.updateStatus("loading");
43846              item.loading = true;
43847              if (!item.hasSize) {
43848                item.imgHidden = true;
43849                template.addClass("mfp-loading");
43850                mfp.findImageSize(item);
43851              }
43852              return template;
43853            }
43854          }
43855        });
43856        var hasMozTransform, getHasMozTransform = function() {
43857          if (hasMozTransform === void 0) {
43858            hasMozTransform = document.createElement("p").style.MozTransform !== void 0;
43859          }
43860          return hasMozTransform;
43861        };
43862        $3.magnificPopup.registerModule("zoom", {
43863          options: {
43864            enabled: false,
43865            easing: "ease-in-out",
43866            duration: 300,
43867            opener: function(element) {
43868              return element.is("img") ? element : element.find("img");
43869            }
43870          },
43871          proto: {
43872            initZoom: function() {
43873              var zoomSt = mfp.st.zoom, ns = ".zoom", image;
43874              if (!zoomSt.enabled || !mfp.supportsTransition) {
43875                return;
43876              }
43877              var duration = zoomSt.duration, getElToAnimate = function(image2) {
43878                var newImg = image2.clone().removeAttr("style").removeAttr("class").addClass("mfp-animated-image"), transition = "all " + zoomSt.duration / 1e3 + "s " + zoomSt.easing, cssObj = {
43879                  position: "fixed",
43880                  zIndex: 9999,
43881                  left: 0,
43882                  top: 0,
43883                  "-webkit-backface-visibility": "hidden"
43884                }, t2 = "transition";
43885                cssObj["-webkit-" + t2] = cssObj["-moz-" + t2] = cssObj["-o-" + t2] = cssObj[t2] = transition;
43886                newImg.css(cssObj);
43887                return newImg;
43888              }, showMainContent = function() {
43889                mfp.content.css("visibility", "visible");
43890              }, openTimeout, animatedImg;
43891              _mfpOn("BuildControls" + ns, function() {
43892                if (mfp._allowZoom()) {
43893                  clearTimeout(openTimeout);
43894                  mfp.content.css("visibility", "hidden");
43895                  image = mfp._getItemToZoom();
43896                  if (!image) {
43897                    showMainContent();
43898                    return;
43899                  }
43900                  animatedImg = getElToAnimate(image);
43901                  animatedImg.css(mfp._getOffset());
43902                  mfp.wrap.append(animatedImg);
43903                  openTimeout = setTimeout(function() {
43904                    animatedImg.css(mfp._getOffset(true));
43905                    openTimeout = setTimeout(function() {
43906                      showMainContent();
43907                      setTimeout(function() {
43908                        animatedImg.remove();
43909                        image = animatedImg = null;
43910                        _mfpTrigger("ZoomAnimationEnded");
43911                      }, 16);
43912                    }, duration);
43913                  }, 16);
43914                }
43915              });
43916              _mfpOn(BEFORE_CLOSE_EVENT + ns, function() {
43917                if (mfp._allowZoom()) {
43918                  clearTimeout(openTimeout);
43919                  mfp.st.removalDelay = duration;
43920                  if (!image) {
43921                    image = mfp._getItemToZoom();
43922                    if (!image) {
43923                      return;
43924                    }
43925                    animatedImg = getElToAnimate(image);
43926                  }
43927                  animatedImg.css(mfp._getOffset(true));
43928                  mfp.wrap.append(animatedImg);
43929                  mfp.content.css("visibility", "hidden");
43930                  setTimeout(function() {
43931                    animatedImg.css(mfp._getOffset());
43932                  }, 16);
43933                }
43934              });
43935              _mfpOn(CLOSE_EVENT + ns, function() {
43936                if (mfp._allowZoom()) {
43937                  showMainContent();
43938                  if (animatedImg) {
43939                    animatedImg.remove();
43940                  }
43941                  image = null;
43942                }
43943              });
43944            },
43945            _allowZoom: function() {
43946              return mfp.currItem.type === "image";
43947            },
43948            _getItemToZoom: function() {
43949              if (mfp.currItem.hasSize) {
43950                return mfp.currItem.img;
43951              } else {
43952                return false;
43953              }
43954            },
43955            // Get element postion relative to viewport
43956            _getOffset: function(isLarge) {
43957              var el;
43958              if (isLarge) {
43959                el = mfp.currItem.img;
43960              } else {
43961                el = mfp.st.zoom.opener(mfp.currItem.el || mfp.currItem);
43962              }
43963              var offset = el.offset();
43964              var paddingTop = parseInt(el.css("padding-top"), 10);
43965              var paddingBottom = parseInt(el.css("padding-bottom"), 10);
43966              offset.top -= $3(window).scrollTop() - paddingTop;
43967              var obj = {
43968                width: el.width(),
43969                // fix Zepto height+padding issue
43970                height: (_isJQ ? el.innerHeight() : el[0].offsetHeight) - paddingBottom - paddingTop
43971              };
43972              if (getHasMozTransform()) {
43973                obj["-moz-transform"] = obj["transform"] = "translate(" + offset.left + "px," + offset.top + "px)";
43974              } else {
43975                obj.left = offset.left;
43976                obj.top = offset.top;
43977              }
43978              return obj;
43979            }
43980          }
43981        });
43982        var IFRAME_NS = "iframe", _emptyPage = "//about:blank", _fixIframeBugs = function(isShowing) {
43983          if (mfp.currTemplate[IFRAME_NS]) {
43984            var el = mfp.currTemplate[IFRAME_NS].find("iframe");
43985            if (el.length) {
43986              if (!isShowing) {
43987                el[0].src = _emptyPage;
43988              }
43989              if (mfp.isIE8) {
43990                el.css("display", isShowing ? "block" : "none");
43991              }
43992            }
43993          }
43994        };
43995        $3.magnificPopup.registerModule(IFRAME_NS, {
43996          options: {
43997            markup: '<div class="mfp-iframe-scaler"><div class="mfp-close"></div><iframe class="mfp-iframe" src="//about:blank" frameborder="0" allowfullscreen></iframe></div>',
43998            srcAction: "iframe_src",
43999            // we don't care and support only one default type of URL by default
44000            patterns: {
44001              youtube: {
44002                index: "youtube.com",
44003                id: "v=",
44004                src: "//www.youtube.com/embed/%id%?autoplay=1"
44005              },
44006              vimeo: {
44007                index: "vimeo.com/",
44008                id: "/",
44009                src: "//player.vimeo.com/video/%id%?autoplay=1"
44010              },
44011              gmaps: {
44012                index: "//maps.google.",
44013                src: "%id%&output=embed"
44014              }
44015            }
44016          },
44017          proto: {
44018            initIframe: function() {
44019              mfp.types.push(IFRAME_NS);
44020              _mfpOn("BeforeChange", function(e, prevType, newType) {
44021                if (prevType !== newType) {
44022                  if (prevType === IFRAME_NS) {
44023                    _fixIframeBugs();
44024                  } else if (newType === IFRAME_NS) {
44025                    _fixIframeBugs(true);
44026                  }
44027                }
44028              });
44029              _mfpOn(CLOSE_EVENT + "." + IFRAME_NS, function() {
44030                _fixIframeBugs();
44031              });
44032            },
44033            getIframe: function(item, template) {
44034              var embedSrc = item.src;
44035              var iframeSt = mfp.st.iframe;
44036              $3.each(iframeSt.patterns, function() {
44037                if (embedSrc.indexOf(this.index) > -1) {
44038                  if (this.id) {
44039                    if (typeof this.id === "string") {
44040                      embedSrc = embedSrc.substr(embedSrc.lastIndexOf(this.id) + this.id.length, embedSrc.length);
44041                    } else {
44042                      embedSrc = this.id.call(this, embedSrc);
44043                    }
44044                  }
44045                  embedSrc = this.src.replace("%id%", embedSrc);
44046                  return false;
44047                }
44048              });
44049              var dataObj = {};
44050              if (iframeSt.srcAction) {
44051                dataObj[iframeSt.srcAction] = embedSrc;
44052              }
44053              mfp._parseMarkup(template, dataObj, item);
44054              mfp.updateStatus("ready");
44055              return template;
44056            }
44057          }
44058        });
44059        var _getLoopedId = function(index) {
44060          var numSlides = mfp.items.length;
44061          if (index > numSlides - 1) {
44062            return index - numSlides;
44063          } else if (index < 0) {
44064            return numSlides + index;
44065          }
44066          return index;
44067        }, _replaceCurrTotal = function(text, curr, total) {
44068          return text.replace(/%curr%/gi, curr + 1).replace(/%total%/gi, total);
44069        };
44070        $3.magnificPopup.registerModule("gallery", {
44071          options: {
44072            enabled: false,
44073            arrowMarkup: '<button title="%title%" type="button" class="mfp-arrow mfp-arrow-%dir%"></button>',
44074            preload: [0, 2],
44075            navigateByImgClick: true,
44076            arrows: true,
44077            tPrev: "Previous (Left arrow key)",
44078            tNext: "Next (Right arrow key)",
44079            tCounter: "%curr% of %total%"
44080          },
44081          proto: {
44082            initGallery: function() {
44083              var gSt = mfp.st.gallery, ns = ".mfp-gallery";
44084              mfp.direction = true;
44085              if (!gSt || !gSt.enabled) return false;
44086              _wrapClasses += " mfp-gallery";
44087              _mfpOn(OPEN_EVENT + ns, function() {
44088                if (gSt.navigateByImgClick) {
44089                  mfp.wrap.on("click" + ns, ".mfp-img", function() {
44090                    if (mfp.items.length > 1) {
44091                      mfp.next();
44092                      return false;
44093                    }
44094                  });
44095                }
44096                _document.on("keydown" + ns, function(e) {
44097                  if (e.keyCode === 37) {
44098                    mfp.prev();
44099                  } else if (e.keyCode === 39) {
44100                    mfp.next();
44101                  }
44102                });
44103              });
44104              _mfpOn("UpdateStatus" + ns, function(e, data) {
44105                if (data.text) {
44106                  data.text = _replaceCurrTotal(data.text, mfp.currItem.index, mfp.items.length);
44107                }
44108              });
44109              _mfpOn(MARKUP_PARSE_EVENT + ns, function(e, element, values, item) {
44110                var l = mfp.items.length;
44111                values.counter = l > 1 ? _replaceCurrTotal(gSt.tCounter, item.index, l) : "";
44112              });
44113              _mfpOn("BuildControls" + ns, function() {
44114                if (mfp.items.length > 1 && gSt.arrows && !mfp.arrowLeft) {
44115                  var markup = gSt.arrowMarkup, arrowLeft = mfp.arrowLeft = $3(markup.replace(/%title%/gi, gSt.tPrev).replace(/%dir%/gi, "left")).addClass(PREVENT_CLOSE_CLASS), arrowRight = mfp.arrowRight = $3(markup.replace(/%title%/gi, gSt.tNext).replace(/%dir%/gi, "right")).addClass(PREVENT_CLOSE_CLASS);
44116                  arrowLeft.click(function() {
44117                    mfp.prev();
44118                  });
44119                  arrowRight.click(function() {
44120                    mfp.next();
44121                  });
44122                  mfp.container.append(arrowLeft.add(arrowRight));
44123                }
44124              });
44125              _mfpOn(CHANGE_EVENT + ns, function() {
44126                if (mfp._preloadTimeout) clearTimeout(mfp._preloadTimeout);
44127                mfp._preloadTimeout = setTimeout(function() {
44128                  mfp.preloadNearbyImages();
44129                  mfp._preloadTimeout = null;
44130                }, 16);
44131              });
44132              _mfpOn(CLOSE_EVENT + ns, function() {
44133                _document.off(ns);
44134                mfp.wrap.off("click" + ns);
44135                mfp.arrowRight = mfp.arrowLeft = null;
44136              });
44137            },
44138            next: function() {
44139              mfp.direction = true;
44140              mfp.index = _getLoopedId(mfp.index + 1);
44141              mfp.updateItemHTML();
44142            },
44143            prev: function() {
44144              mfp.direction = false;
44145              mfp.index = _getLoopedId(mfp.index - 1);
44146              mfp.updateItemHTML();
44147            },
44148            goTo: function(newIndex) {
44149              mfp.direction = newIndex >= mfp.index;
44150              mfp.index = newIndex;
44151              mfp.updateItemHTML();
44152            },
44153            preloadNearbyImages: function() {
44154              var p = mfp.st.gallery.preload, preloadBefore = Math.min(p[0], mfp.items.length), preloadAfter = Math.min(p[1], mfp.items.length), i;
44155              for (i = 1; i <= (mfp.direction ? preloadAfter : preloadBefore); i++) {
44156                mfp._preloadItem(mfp.index + i);
44157              }
44158              for (i = 1; i <= (mfp.direction ? preloadBefore : preloadAfter); i++) {
44159                mfp._preloadItem(mfp.index - i);
44160              }
44161            },
44162            _preloadItem: function(index) {
44163              index = _getLoopedId(index);
44164              if (mfp.items[index].preloaded) {
44165                return;
44166              }
44167              var item = mfp.items[index];
44168              if (!item.parsed) {
44169                item = mfp.parseEl(index);
44170              }
44171              _mfpTrigger("LazyLoad", item);
44172              if (item.type === "image") {
44173                item.img = $3('<img class="mfp-img" />').on("load.mfploader", function() {
44174                  item.hasSize = true;
44175                }).on("error.mfploader", function() {
44176                  item.hasSize = true;
44177                  item.loadError = true;
44178                  _mfpTrigger("LazyLoadError", item);
44179                }).attr("src", item.src);
44180              }
44181              item.preloaded = true;
44182            }
44183          }
44184        });
44185        var RETINA_NS = "retina";
44186        $3.magnificPopup.registerModule(RETINA_NS, {
44187          options: {
44188            replaceSrc: function(item) {
44189              return item.src.replace(/\.\w+$/, function(m) {
44190                return "@2x" + m;
44191              });
44192            },
44193            ratio: 1
44194            // Function or number.  Set to 1 to disable.
44195          },
44196          proto: {
44197            initRetina: function() {
44198              if (window.devicePixelRatio > 1) {
44199                var st = mfp.st.retina, ratio = st.ratio;
44200                ratio = !isNaN(ratio) ? ratio : ratio();
44201                if (ratio > 1) {
44202                  _mfpOn("ImageHasSize." + RETINA_NS, function(e, item) {
44203                    item.img.css({
44204                      "max-width": item.img[0].naturalWidth / ratio,
44205                      "width": "100%"
44206                    });
44207                  });
44208                  _mfpOn("ElementParse." + RETINA_NS, function(e, item) {
44209                    item.src = st.replaceSrc(item, ratio);
44210                  });
44211                }
44212              }
44213            }
44214          }
44215        });
44216        _checkInstance();
44217      });
44218    }
44219  });
44220
44221  
44221// apps/base/assets/javascripts/vendor/media-query-events.js
44222  var require_media_query_events = __commonJS({
44223    "apps/base/assets/javascripts/vendor/media-query-events.js"() {
44224      "use strict";
44225      init_esbuild_shims();
44226      $(document).ready(function() {
44227        var Z63 = (function(parent, $3) {
44228          var MediaQueryListener = function() {
44229            this.afterElement = window.getComputedStyle ? window.getComputedStyle(document.body, ":after") : false;
44230            if (!this.afterElement) {
44231              return;
44232            }
44233            this.currentBreakpoint = "";
44234            this.lastBreakpoint = this.afterElement.getPropertyValue("content");
44235            this.init();
44236          };
44237          MediaQueryListener.prototype = {
44238            init: function() {
44239              var self2 = this;
44240              if (!self2.afterElement) {
44241                return;
44242              }
44243              self2.currentBreakpoint = self2.afterElement.getPropertyValue("content").replace(/^["']|["']$/g, "");
44244              window.breakpoint = self2.currentBreakpoint;
44245              self2.lastBreakpoint = self2.currentBreakpoint;
44246              self2._resizeListener();
44247            },
44248            _resizeListener: function() {
44249              var self2 = this;
44250              $3(window).on("resize orientationchange load", function() {
44251                self2.currentBreakpoint = self2.afterElement.getPropertyValue("content").replace(/^["']|["']$/g, "");
44252                window.breakpoint = self2.currentBreakpoint;
44253                if (self2.currentBreakpoint !== self2.lastBreakpoint) {
44254                  self2.lastBreakpoint = self2.currentBreakpoint;
44255                  $3(window).trigger("breakpoint-change", self2.currentBreakpoint);
44256                }
44257              });
44258            }
44259          };
44260          parent.mediaqueryListener = parent.mediaqueryListener || new MediaQueryListener();
44261          return parent;
44262        })(Z63 || {}, jQuery);
44263      });
44264    }
44265  });
44266
44267  
44267// apps/base/assets/javascripts/vendor/nouislider.js
44268  var require_nouislider = __commonJS({
44269    "apps/base/assets/javascripts/vendor/nouislider.js"(exports, module) {
44270      "use strict";
44271      init_esbuild_shims();
44272      (function(factory) {
44273        if (typeof define === "function" && define.amd) {
44274          define([], factory);
44275        } else if (typeof exports === "object") {
44276          module.exports = factory();
44277        } else {
44278          window.noUiSlider = factory();
44279        }
44280      })(function() {
44281        "use strict";
44282        function unique(array) {
44283          return array.filter(function(a) {
44284            return !this[a] ? this[a] = true : false;
44285          }, {});
44286        }
44287        function closest(value, to) {
44288          return Math.round(value / to) * to;
44289        }
44290        function offset(elem) {
44291          var rect = elem.getBoundingClientRect(), doc = elem.ownerDocument, docElem = doc.documentElement, pageOffset = getPageOffset();
44292          if (/webkit.*Chrome.*Mobile/i.test(navigator.userAgent)) {
44293            pageOffset.x = 0;
44294          }
44295          return {
44296            top: rect.top + pageOffset.y - docElem.clientTop,
44297            left: rect.left + pageOffset.x - docElem.clientLeft
44298          };
44299        }
44300        function isNumeric(a) {
44301          return typeof a === "number" && !isNaN(a) && isFinite(a);
44302        }
44303        function accurateNumber(number) {
44304          var p = Math.pow(10, 7);
44305          return Number((Math.round(number * p) / p).toFixed(7));
44306        }
44307        function addClassFor(element, className, duration) {
44308          addClass(element, className);
44309          setTimeout(function() {
44310            removeClass(element, className);
44311          }, duration);
44312        }
44313        function limit(a) {
44314          return Math.max(Math.min(a, 100), 0);
44315        }
44316        function asArray(a) {
44317          return Array.isArray(a) ? a : [a];
44318        }
44319        function countDecimals(numStr) {
44320          var pieces = numStr.split(".");
44321          return pieces.length > 1 ? pieces[1].length : 0;
44322        }
44323        function addClass(el, className) {
44324          if (el.classList) {
44325            el.classList.add(className);
44326          } else {
44327            el.className += " " + className;
44328          }
44329        }
44330        function removeClass(el, className) {
44331          if (el.classList) {
44332            el.classList.remove(className);
44333          } else {
44334            el.className = el.className.replace(new RegExp("(^|\\b)" + className.split(" ").join("|") + "(\\b|$)", "gi"), " ");
44335          }
44336        }
44337        function hasClass(el, className) {
44338          if (el.classList) {
44339            el.classList.contains(className);
44340          } else {
44341            new RegExp("(^| )" + className + "( |$)", "gi").test(el.className);
44342          }
44343        }
44344        function getPageOffset() {
44345          var supportPageOffset = window.pageXOffset !== void 0, isCSS1Compat = (document.compatMode || "") === "CSS1Compat", x = supportPageOffset ? window.pageXOffset : isCSS1Compat ? document.documentElement.scrollLeft : document.body.scrollLeft, y = supportPageOffset ? window.pageYOffset : isCSS1Compat ? document.documentElement.scrollTop : document.body.scrollTop;
44346          return {
44347            x,
44348            y
44349          };
44350        }
44351        function stopPropagation(e) {
44352          e.stopPropagation();
44353        }
44354        function addCssPrefix(cssPrefix) {
44355          return function(className) {
44356            return cssPrefix + className;
44357          };
44358        }
44359        var actions = window.navigator.pointerEnabled ? {
44360          start: "pointerdown",
44361          move: "pointermove",
44362          end: "pointerup"
44363        } : window.navigator.msPointerEnabled ? {
44364          start: "MSPointerDown",
44365          move: "MSPointerMove",
44366          end: "MSPointerUp"
44367        } : {
44368          start: "mousedown touchstart",
44369          move: "mousemove touchmove",
44370          end: "mouseup touchend"
44371        }, defaultCssPrefix = "noUi-";
44372        function subRangeRatio(pa, pb) {
44373          return 100 / (pb - pa);
44374        }
44375        function fromPercentage(range, value) {
44376          return value * 100 / (range[1] - range[0]);
44377        }
44378        function toPercentage(range, value) {
44379          return fromPercentage(range, range[0] < 0 ? value + Math.abs(range[0]) : value - range[0]);
44380        }
44381        function isPercentage(range, value) {
44382          return value * (range[1] - range[0]) / 100 + range[0];
44383        }
44384        function getJ(value, arr) {
44385          var j = 1;
44386          while (value >= arr[j]) {
44387            j += 1;
44388          }
44389          return j;
44390        }
44391        function toStepping(xVal, xPct, value) {
44392          if (value >= xVal.slice(-1)[0]) {
44393            return 100;
44394          }
44395          var j = getJ(value, xVal), va, vb, pa, pb;
44396          va = xVal[j - 1];
44397          vb = xVal[j];
44398          pa = xPct[j - 1];
44399          pb = xPct[j];
44400          return pa + toPercentage([va, vb], value) / subRangeRatio(pa, pb);
44401        }
44402        function fromStepping(xVal, xPct, value) {
44403          if (value >= 100) {
44404            return xVal.slice(-1)[0];
44405          }
44406          var j = getJ(value, xPct), va, vb, pa, pb;
44407          va = xVal[j - 1];
44408          vb = xVal[j];
44409          pa = xPct[j - 1];
44410          pb = xPct[j];
44411          return isPercentage([va, vb], (value - pa) * subRangeRatio(pa, pb));
44412        }
44413        function getStep(xPct, xSteps, snap, value) {
44414          if (value === 100) {
44415            return value;
44416          }
44417          var j = getJ(value, xPct), a, b;
44418          if (snap) {
44419            a = xPct[j - 1];
44420            b = xPct[j];
44421            if (value - a > (b - a) / 2) {
44422              return b;
44423            }
44424            return a;
44425          }
44426          if (!xSteps[j - 1]) {
44427            return value;
44428          }
44429          return xPct[j - 1] + closest(
44430            value - xPct[j - 1],
44431            xSteps[j - 1]
44432          );
44433        }
44434        function handleEntryPoint(index, value, that) {
44435          var percentage;
44436          if (typeof value === "number") {
44437            value = [value];
44438          }
44439          if (Object.prototype.toString.call(value) !== "[object Array]") {
44440            throw new Error("noUiSlider: 'range' contains invali
44440d value.");
44441          }
44442          if (index === "min") {
44443            percentage = 0;
44444          } else if (index === "max") {
44445            percentage = 100;
44446          } else {
44447            percentage = parseFloat(index);
44448          }
44449          if (!isNumeric(percentage) || !isNumeric(value[0])) {
44450            throw new Error("noUiSlider: 'range' value isn't numeric.");
44451          }
44452          that.xPct.push(percentage);
44453          that.xVal.push(value[0]);
44454          if (!percentage) {
44455            if (!isNaN(value[1])) {
44456              that.xSteps[0] = value[1];
44457            }
44458          } else {
44459            that.xSteps.push(isNaN(value[1]) ? false : value[1]);
44460          }
44461        }
44462        function handleStepPoint(i, n, that) {
44463          if (!n) {
44464            return true;
44465          }
44466          that.xSteps[i] = fromPercentage([
44467            that.xVal[i],
44468            that.xVal[i + 1]
44469          ], n) / subRangeRatio(
44470            that.xPct[i],
44471            that.xPct[i + 1]
44472          );
44473        }
44474        function Spectrum(entry, snap, direction, singleStep) {
44475          this.xPct = [];
44476          this.xVal = [];
44477          this.xSteps = [singleStep || false];
44478          this.xNumSteps = [false];
44479          this.snap = snap;
44480          this.direction = direction;
44481          var index, ordered = [
44482            /* [0, 'min'], [1, '50%'], [2, 'max'] */
44483          ];
44484          for (index in entry) {
44485            if (entry.hasOwnProperty(index)) {
44486              ordered.push([entry[index], index]);
44487            }
44488          }
44489          if (ordered.length && typeof ordered[0][0] === "object") {
44490            ordered.sort(function(a, b) {
44491              return a[0][0] - b[0][0];
44492            });
44493          } else {
44494            ordered.sort(function(a, b) {
44495              return a[0] - b[0];
44496            });
44497          }
44498          for (index = 0; index < ordered.length; index++) {
44499            handleEntryPoint(ordered[index][1], ordered[index][0], this);
44500          }
44501          this.xNumSteps = this.xSteps.slice(0);
44502          for (index = 0; index < this.xNumSteps.length; index++) {
44503            handleStepPoint(index, this.xNumSteps[index], this);
44504          }
44505        }
44506        Spectrum.prototype.getMargin = function(value) {
44507          return this.xPct.length === 2 ? fromPercentage(this.xVal, value) : false;
44508        };
44509        Spectrum.prototype.toStepping = function(value) {
44510          value = toStepping(this.xVal, this.xPct, value);
44511          if (this.direction) {
44512            value = 100 - value;
44513          }
44514          return value;
44515        };
44516        Spectrum.prototype.fromStepping = function(value) {
44517          if (this.direction) {
44518            value = 100 - value;
44519          }
44520          return accurateNumber(fromStepping(this.xVal, this.xPct, value));
44521        };
44522        Spectrum.prototype.getStep = function(value) {
44523          if (this.direction) {
44524            value = 100 - value;
44525          }
44526          value = getStep(this.xPct, this.xSteps, this.snap, value);
44527          if (this.direction) {
44528            value = 100 - value;
44529          }
44530          return value;
44531        };
44532        Spectrum.prototype.getApplicableStep = function(value) {
44533          var j = getJ(value, this.xPct), offset2 = value === 100 ? 2 : 1;
44534          return [this.xNumSteps[j - 2], this.xVal[j - offset2], this.xNumSteps[j - offset2]];
44535        };
44536        Spectrum.prototype.convert = function(value) {
44537          return this.getStep(this.toStepping(value));
44538        };
44539        var defaultFormatter = { "to": function(value) {
44540          return value !== void 0 && value.toFixed(2);
44541        }, "from": Number };
44542        function testStep(parsed, entry) {
44543          if (!isNumeric(entry)) {
44544            throw new Error("noUiSlider: 'step' is not numeric.");
44545          }
44546          parsed.singleStep = entry;
44547        }
44548        function testRange(parsed, entry) {
44549          if (typeof entry !== "object" || Array.isArray(entry)) {
44550            throw new Error("noUiSlider: 'range' is not an object.");
44551          }
44552          if (entry.min === void 0 || entry.max === void 0) {
44553            throw new Error("noUiSlider: Missing 'min' or 'max' in 'range'.");
44554          }
44555          if (entry.min === entry.max) {
44556            throw new Error("noUiSlider: 'range' 'min' and 'max' cannot be equal.");
44557          }
44558          parsed.spectrum = new Spectrum(entry, parsed.snap, parsed.dir, parsed.singleStep);
44559        }
44560        function testStart(parsed, entry) {
44561          entry = asArray(entry);
44562          if (!Array.isArray(entry) || !entry.length || entry.length > 2) {
44563            throw new Error("noUiSlider: 'start' option is incorrect.");
44564          }
44565          parsed.handles = entry.length;
44566          parsed.start = entry;
44567        }
44568        function testSnap(parsed, entry) {
44569          parsed.snap = entry;
44570          if (typeof entry !== "boolean") {
44571            throw new Error("noUiSlider: 'snap' option must be a boolean.");
44572          }
44573        }
44574        function testAnimate(parsed, entry) {
44575          parsed.animate = entry;
44576          if (typeof entry !== "boolean") {
44577            throw new Error("noUiSlider: 'animate' option must be a boolean.");
44578          }
44579        }
44580        function testConnect(parsed, entry) {
44581          if (entry === "lower" && parsed.handles === 1) {
44582            parsed.connect = 1;
44583          } else if (entry === "upper" && parsed.handles === 1) {
44584            parsed.connect = 2;
44585          } else if (entry === true && parsed.handles === 2) {
44586            parsed.connect = 3;
44587          } else if (entry === false) {
44588            parsed.connect = 0;
44589          } else {
44590            throw new Error("noUiSlider: 'connect' option doesn't match handle count.");
44591          }
44592        }
44593        function testOrientation(parsed, entry) {
44594          switch (entry) {
44595            case "horizontal":
44596              parsed.ort = 0;
44597              break;
44598            case "vertical":
44599              parsed.ort = 1;
44600              break;
44601            default:
44602              throw new Error("noUiSlider: 'orientation' option is invali
44602d.");
44603          }
44604        }
44605        function testMargin(parsed, entry) {
44606          if (!isNumeric(entry)) {
44607            throw new Error("noUiSlider: 'margin' option must be numeric.");
44608          }
44609          parsed.margin = parsed.spectrum.getMargin(entry);
44610          if (!parsed.margin) {
44611            throw new Error("noUiSlider: 'margin' option is only supported on linear sliders.");
44612          }
44613        }
44614        function testLimit(parsed, entry) {
44615          if (!isNumeric(entry)) {
44616            throw new Error("noUiSlider: 'limit' option must be numeric.");
44617          }
44618          parsed.limit = parsed.spectrum.getMargin(entry);
44619          if (!parsed.limit) {
44620            throw new Error("noUiSlider: 'limit' option is only supported on linear sliders.");
44621          }
44622        }
44623        function testDirection(parsed, entry) {
44624          switch (entry) {
44625            case "ltr":
44626              parsed.dir = 0;
44627              break;
44628            case "rtl":
44629              parsed.dir = 1;
44630              parsed.connect = [0, 2, 1, 3][parsed.connect];
44631              break;
44632            default:
44633              throw new Error("noUiSlider: 'direction' option was not recognized.");
44634          }
44635        }
44636        function testBehaviour(parsed, entry) {
44637          if (typeof entry !== "string") {
44638            throw new Error("noUiSlider: 'behaviour' must be a string containing options.");
44639          }
44640          var tap = entry.indexOf("tap") >= 0, drag = entry.indexOf("drag") >= 0, fixed = entry.indexOf("fixed") >= 0, snap = entry.indexOf("snap") >= 0, hover = entry.indexOf("hover") >= 0;
44641          if (drag && !parsed.connect) {
44642            throw new Error("noUiSlider: 'drag' behaviour must be used with 'connect': true.");
44643          }
44644          parsed.events = {
44645            tap: tap || snap,
44646            drag,
44647            fixed,
44648            snap,
44649            hover
44650          };
44651        }
44652        function testTooltips(parsed, entry) {
44653          var i;
44654          if (entry === false) {
44655            return;
44656          } else if (entry === true) {
44657            parsed.tooltips = [];
44658            for (i = 0; i < parsed.handles; i++) {
44659              parsed.tooltips.push(true);
44660            }
44661          } else {
44662            parsed.tooltips = asArray(entry);
44663            if (parsed.tooltips.length !== parsed.handles) {
44664              throw new Error("noUiSlider: must pass a formatter for all handles.");
44665            }
44666            parsed.tooltips.forEach(function(formatter) {
44667              if (typeof formatter !== "boolean" && (typeof formatter !== "object" || typeof formatter.to !== "function")) {
44668                throw new Error("noUiSlider: 'tooltips' must be passed a formatter or 'false'.");
44669              }
44670            });
44671          }
44672        }
44673        function testFormat(parsed, entry) {
44674          parsed.format = entry;
44675          if (typeof entry.to === "function" && typeof entry.from === "function") {
44676            return true;
44677          }
44678          throw new Error("noUiSlider: 'format' requires 'to' and 'from' methods.");
44679        }
44680        function testCssPrefix(parsed, entry) {
44681          if (entry !== void 0 && typeof entry !== "string") {
44682            throw new Error("noUiSlider: 'cssPrefix' must be a string.");
44683          }
44684          parsed.cssPrefix = entry;
44685        }
44686        function testOptions(options) {
44687          var parsed = {
44688            margin: 0,
44689            limit: 0,
44690            animate: true,
44691            format: defaultFormatter
44692          }, tests;
44693          tests = {
44694            "step": { r: false, t: testStep },
44695            "start": { r: true, t: testStart },
44696            "connect": { r: true, t: testConnect },
44697            "direction": { r: true, t: testDirection },
44698            "snap": { r: false, t: testSnap },
44699            "animate": { r: false, t: testAnimate },
44700            "range": { r: true, t: testRange },
44701            "orientation": { r: false, t: testOrientation },
44702            "margin": { r: false, t: testMargin },
44703            "limit": { r: false, t: testLimit },
44704            "behaviour": { r: true, t: testBehaviour },
44705            "format": { r: false, t: testFormat },
44706            "tooltips": { r: false, t: testTooltips },
44707            "cssPrefix": { r: false, t: testCssPrefix }
44708          };
44709          var defaults = {
44710            "connect": false,
44711            "direction": "ltr",
44712            "behaviour": "tap",
44713            "orientation": "horizontal"
44714          };
44715          Object.keys(tests).forEach(function(name) {
44716            if (options[name] === void 0 && defaults[name] === void 0) {
44717              if (tests[name].r) {
44718                throw new Error("noUiSlider: '" + name + "' is required.");
44719              }
44720              return true;
44721            }
44722            tests[name].t(parsed, options[name] === void 0 ? defaults[name] : options[name]);
44723          });
44724          parsed.pips = options.pips;
44725          parsed.style = parsed.ort ? "top" : "left";
44726          return parsed;
44727        }
44728        function closure(target, options) {
44729          var scope_Target = target, scope_Locations = [-1, -1], scope_Base, scope_Handles, scope_Spectrum = options.spectrum, scope_Values = [], scope_Events = {}, scope_Self;
44730          var cssClasses = [
44731            /*  0 */
44732            "target",
44733            "base",
44734            "origin",
44735            "handle",
44736            "horizontal",
44737            "vertical",
44738            "background",
44739            "connect",
44740            "ltr",
44741            "rtl",
44742            "draggable",
44743            "",
44744            "state-drag",
44745            "",
44746            "state-tap",
44747            "active",
44748            "",
44749            "stacking",
44750            "tooltip",
44751            "",
44752            "pips",
44753            "marker",
44754            "value"
44755          ].map(addCssPrefix(options.cssPrefix || defaultCssPrefix));
44756          function getPositions(a, b, delimit) {
44757            var c = a + b[0], d = a + b[1];
44758            if (delimit) {
44759              if (c < 0) {
44760                d += Math.abs(c);
44761              }
44762              if (d > 100) {
44763                c -= d - 100;
44764              }
44765              return [limit(c), limit(d)];
44766            }
44767            return [c, d];
44768          }
44769          function fixEvent(e, pageOffset) {
44770            e.preventDefault();
44771            var touch = e.type.indexOf("touch") === 0, mouse = e.type.indexOf("mouse") === 0, pointer = e.type.indexOf("pointer") === 0, x, y, event2 = e;
44772            if (e.type.indexOf("MSPointer") === 0) {
44773              pointer = true;
44774            }
44775            if (touch) {
44776              x = e.changedTouches[0].pageX;
44777              y = e.changedTouches[0].pageY;
44778            }
44779            pageOffset = pageOffset || getPageOffset();
44780            if (mouse || pointer) {
44781              x = e.clientX + pageOffset.x;
44782              y = e.clientY + pageOffset.y;
44783            }
44784            event2.pageOffset = pageOffset;
44785            event2.points = [x, y];
44786            event2.cursor = mouse || pointer;
44787            return event2;
44788          }
44789          function addHandle(direction, index) {
44790            var origin = document.createElement("div"), handle = document.createElement("div"), additions = ["-lower", "-upper"];
44791            if (direction) {
44792              additions.reverse();
44793            }
44794            addClass(handle, cssClasses[3]);
44795            addClass(handle, cssClasses[3] + additions[index]);
44796            addClass(origin, cssClasses[2]);
44797            origin.appendChild(handle);
44798            return origin;
44799          }
44800          function addConnection(connect, target2, handles) {
44801            switch (connect) {
44802              case 1:
44803                addClass(target2, cssClasses[7]);
44804                addClass(handles[0], cssClasses[6]);
44805                break;
44806              case 3:
44807                addClass(handles[1], cssClasses[6]);
44808              /* falls through */
44809              case 2:
44810                addClass(handles[0], cssClasses[7]);
44811              /* falls through */
44812              case 0:
44813                addClass(target2, cssClasses[6]);
44814                break;
44815            }
44816          }
44817          function addHandles(nrHandles, direction, base) {
44818            var index, handles = [];
44819            for (index = 0; index < nrHandles; index += 1) {
44820              handles.push(base.appendChild(addHandle(direction, index)));
44821            }
44822            return handles;
44823          }
44824          function addSlider(direction, orientation, target2) {
44825            addClass(target2, cssClasses[0]);
44826            addClass(target2, cssClasses[8 + direction]);
44827            addClass(target2, cssClasses[4 + orientation]);
44828            var div = document.createElement("div");
44829            addClass(div, cssClasses[1]);
44830            target2.appendChild(div);
44831            return div;
44832          }
44833          function addTooltip(handle, index) {
44834            if (!options.tooltips[index]) {
44835              return false;
44836            }
44837            var element = document.createElement("div");
44838            element.className = cssClasses[18];
44839            return handle.firstChild.appendChild(element);
44840          }
44841          function tooltips() {
44842            if (options.dir) {
44843              options.tooltips.reverse();
44844            }
44845            var tips = scope_Handles.map(addTooltip);
44846            if (options.dir) {
44847              tips.reverse();
44848              options.tooltips.reverse();
44849            }
44850            bindEvent("update", function(f, o, r) {
44851              if (tips[o]) {
44852                tips[o].innerHTML = options.tooltips[o] === true ? f[o] : options.tooltips[o].to(r[o]);
44853              }
44854            });
44855          }
44856          function getGroup(mode, values, stepped) {
44857            if (mode === "range" || mode === "steps") {
44858              return scope_Spectrum.xVal;
44859            }
44860            if (mode === "count") {
44861              var spread = 100 / (values - 1), v, i = 0;
44862              values = [];
44863              while ((v = i++ * spread) <= 100) {
44864                values.push(v);
44865              }
44866              mode = "positions";
44867            }
44868            if (mode === "positions") {
44869              return values.map(function(value) {
44870                return scope_Spectrum.fromStepping(stepped ? scope_Spectrum.getStep(value) : value);
44871              });
44872            }
44873            if (mode === "values") {
44874              if (stepped) {
44875                return values.map(function(value) {
44876                  return scope_Spectrum.fromStepping(scope_Spectrum.getStep(scope_Spectrum.toStepping(value)));
44877                });
44878              }
44879              return values;
44880            }
44881          }
44882          function generateSpread(density, mode, group) {
44883            function safeIncrement(value, increment) {
44884              return (value + increment).toFixed(7) / 1;
44885            }
44886            var originalSpectrumDirection = scope_Spectrum.direction, indexes = {}, firstInRange = scope_Spectrum.xVal[0], lastInRange = scope_Spectrum.xVal[scope_Spectrum.xVal.length - 1], ignoreFirst = false, ignoreLast = false, prevPct = 0;
44887            scope_Spectrum.direction = 0;
44888            group = unique(group.slice().sort(function(a, b) {
44889              return a - b;
44890            }));
44891            if (group[0] !== firstInRange) {
44892              group.unshift(firstInRange);
44893              ignoreFirst = true;
44894            }
44895            if (group[group.length - 1] !== lastInRange) {
44896              group.push(lastInRange);
44897              ignoreLast = true;
44898            }
44899            group.forEach(function(current, index) {
44900              var step, i, q, low = current, high = group[index + 1], newPct, pctDifference, pctPos, type, steps, realSteps, stepsize;
44901              if (mode === "steps") {
44902                step = scope_Spectrum.xNumSteps[index];
44903              }
44904              if (!step) {
44905                step = high - low;
44906              }
44907              if (low === false || high === void 0) {
44908                return;
44909              }
44910              for (i = low; i <= high; i = safeIncrement(i, step)) {
44911                newPct = scope_Spectrum.toStepping(i);
44912                pctDifference = newPct - prevPct;
44913                steps = pctDifference / density;
44914                realSteps = Math.round(steps);
44915                stepsize = pctDifference / realSteps;
44916                for (q = 1; q <= realSteps; q += 1) {
44917                  pctPos = prevPct + q * stepsize;
44918                  indexes[pctPos.toFixed(5)] = ["x", 0];
44919                }
44920                type = group.indexOf(i) > -1 ? 1 : mode === "steps" ? 2 : 0;
44921                if (!index && ignoreFirst) {
44922                  type = 0;
44923                }
44924                if (!(i === high && ignoreLast)) {
44925                  indexes[newPct.toFixed(5)] = [i, type];
44926                }
44927                prevPct = newPct;
44928              }
44929            });
44930            scope_Spectrum.direction = originalSpectrumDirection;
44931            return indexes;
44932          }
44933          function addMarking(spread, filterFunc, formatter) {
44934            var style = ["horizontal", "vertical"][options.ort], element = document.createElement("div");
44935            addClass(element, cssClasses[20]);
44936            addClass(element, cssClasses[20] + "-" + style);
44937            function getSize(type) {
44938              return ["-normal", "-large", "-sub"][type];
44939            }
44940            function getTags(offset2, source, values) {
44941              return 'class="' + source + " " + source + "-" + style + " " + source + getSize(values[1]) + '" style="' + options.style + ": " + offset2 + '%"';
44942            }
44943            function addSpread(offset2, values) {
44944              if (scope_Spectrum.direction) {
44945                offset2 = 100 - offset2;
44946              }
44947              values[1] = values[1] && filterFunc ? filterFunc(values[0], values[1]) : values[1];
44948              element.innerHTML += "<div " + getTags(offset2, cssClasses[21], values) + "></div>";
44949              if (values[1]) {
44950                element.innerHTML += "<div " + getTags(offset2, cssClasses[22], values) + ">" + formatter.to(values[0]) + "</div>";
44951              }
44952            }
44953            Object.keys(spread).forEach(function(a) {
44954              addSpread(a, spread[a]);
44955            });
44956            return element;
44957          }
44958          function pips(grid) {
44959            var mode = grid.mode, density = grid.density || 1, filter = grid.filter || false, values = grid.values || false, stepped = grid.stepped || false, group = getGroup(mode, values, stepped), spread = generateSpread(density, mode, group), format = grid.format || {
44960              to: Math.round
44961            };
44962            return scope_Target.appendChild(addMarking(
44963              spread,
44964              filter,
44965              format
44966            ));
44967          }
44968          function baseSize() {
44969            return scope_Base["offset" + ["Width", "Height"][options.ort]];
44970          }
44971          function fireEvent(event2, handleNumber, tap2) {
44972            if (handleNumber !== void 0 && options.handles !== 1) {
44973              handleNumber = Math.abs(handleNumber - options.dir);
44974            }
44975            Object.keys(scope_Events).forEach(function(targetEvent) {
44976              var eventType = targetEvent.split(".")[0];
44977              if (event2 === eventType) {
44978                scope_Events[targetEvent].forEach(function(callback) {
44979                  callback.call(scope_Self, asArray(valueGet()), handleNumber, asArray(inSliderOrder(Array.prototype.slice.call(scope_Values))), tap2 || false);
44980                });
44981              }
44982            });
44983          }
44984          function inSliderOrder(values) {
44985            if (values.length === 1) {
44986              return values[0];
44987            }
44988            if (options.dir) {
44989              return values.reverse();
44990            }
44991            return values;
44992          }
44993          function attach(events2, element, callback, data) {
44994            var method = function(e) {
44995              if (scope_Target.hasAttribute("disabled")) {
44996                return false;
44997              }
44998              if (hasClass(scope_Target, cssClasses[14])) {
44999                return false;
45000              }
45001              e = fixEvent(e, data.pageOffset);
45002              if (events2 === actions.start && e.buttons !== void 0 && e.buttons > 1) {
45003                return false;
45004              }
45005              if (data.hover && e.buttons) {
45006                return false;
45007              }
45008              e.calcPoint = e.points[options.ort];
45009              callback(e, data);
45010            }, methods = [];
45011            events2.split(" ").forEach(function(eventName) {
45012              element.addEventListener(eventName, method, false);
45013              methods.push([eventName, method]);
45014            });
45015            return methods;
45016          }
45017          function move(event2, data) {
45018            if (navigator.appVersion.indexOf("MSIE 9") === -1 && event2.buttons === 0 && data.buttonsProperty !== 0) {
45019              return end(event2, data);
45020            }
45021            var handles = data.handles || scope_Handles, positions, state = false, proposal = (event2.calcPoint - data.start) * 100 / data.baseSize, handleNumber = handles[0] === scope_Handles[0] ? 0 : 1, i;
45022            positions = getPositions(proposal, data.positions, handles.length > 1);
45023            state = setHandle(handles[0], positions[handleNumber], handles.length === 1);
45024            if (handles.length > 1) {
45025              state = setHandle(handles[1], positions[handleNumber ? 0 : 1], false) || state;
45026              if (state) {
45027                for (i = 0; i < data.handles.length; i++) {
45028                  fireEvent("slide", i);
45029                }
45030              }
45031            } else if (state) {
45032              fireEvent("slide", handleNumber);
45033            }
45034          }
45035          function end(event2, data) {
45036            var active = scope_Base.querySelector("." + cssClasse
45036s[15]), handleNumber = data.handles[0] === scope_Handles[0] ? 0 : 1;
45037            if (active !== null) {
45038              removeClass(active, cssClasses[15]);
45039            }
45040            if (event2.cursor) {
45041              document.body.style.cursor = "";
45042              document.body.removeEventListener("selectstart", document.body.noUiListener);
45043            }
45044            var d = document.documentElement;
45045            d.noUiListeners.forEach(function(c) {
45046              d.removeEventListener(c[0], c[1]);
45047            });
45048            removeClass(scope_Target, cssClasses[12]);
45049            fireEvent("set", handleNumber);
45050            fireEvent("change", handleNumber);
45051            if (data.handleNumber !== void 0) {
45052              fireEvent("end", data.handleNumber);
45053            }
45054          }
45055          function documentLeave(event2, data) {
45056            if (event2.type === "mouseout" && event2.target.nodeName === "HTML" && event2.relatedTarget === null) {
45057              end(event2, data);
45058            }
45059          }
45060          function start(event2, data) {
45061            var d = document.documentElement;
45062            if (data.handles.length === 1) {
45063              addClass(data.handles[0].children[0], cssClasses[15]);
45064              if (data.handles[0].hasAttribute("disabled")) {
45065                return false;
45066              }
45067            }
45068            event2.preventDefault();
45069            event2.stopPropagation();
45070            var moveEvent = attach(actions.move, d, move, {
45071              start: event2.calcPoint,
45072              baseSize: baseSize(),
45073              pageOffset: event2.pageOffset,
45074              handles: data.handles,
45075              handleNumber: data.handleNumber,
45076              buttonsProperty: event2.buttons,
45077              positions: [
45078                scope_Locations[0],
45079                scope_Locations[scope_Handles.length - 1]
45080              ]
45081            }), endEvent = attach(actions.end, d, end, {
45082              handles: data.handles,
45083              handleNumber: data.handleNumber
45084            });
45085            var outEvent = attach("mouseout", d, documentLeave, {
45086              handles: data.handles,
45087              handleNumber: data.handleNumber
45088            });
45089            d.noUiListeners = moveEvent.concat(endEvent, outEvent);
45090            if (event2.cursor) {
45091              document.body.style.cursor = getComputedStyle(event2.target).cursor;
45092              if (scope_Handles.length > 1) {
45093                addClass(scope_Target, cssClasses[12]);
45094              }
45095              var f = function() {
45096                return false;
45097              };
45098              document.body.noUiListener = f;
45099              document.body.addEventListener("selectstart", f, false);
45100            }
45101            if (data.handleNumber !== void 0) {
45102              fireEvent("start", data.handleNumber);
45103            }
45104          }
45105          function tap(event2) {
45106            var location2 = event2.calcPoint, total = 0, handleNumber, to;
45107            event2.stopPropagation();
45108            scope_Handles.forEach(function(a) {
45109              total += offset(a)[options.style];
45110            });
45111            handleNumber = location2 < total / 2 || scope_Handles.length === 1 ? 0 : 1;
45112            location2 -= offset(scope_Base)[options.style];
45113            to = location2 * 100 / baseSize();
45114            if (!options.events.snap) {
45115              addClassFor(scope_Target, cssClasses[14], 300);
45116            }
45117            if (scope_Handles[handleNumber].hasAttribute("disabled")) {
45118              return false;
45119            }
45120            setHandle(scope_Handles[handleNumber], to);
45121            fireEvent("slide", handleNumber, true);
45122            fireEvent("set", handleNumber, true);
45123            fireEvent("change", handleNumber, true);
45124            if (options.events.snap) {
45125              start(event2, { handles: [scope_Handles[handleNumber]] });
45126            }
45127          }
45128          function hover(event2) {
45129            var location2 = event2.calcPoint - offset(scope_Base)[options.style], to = scope_Spectrum.getStep(location2 * 100 / baseSize()), value = scope_Spectrum.fromStepping(to);
45130            Object.keys(scope_Events).forEach(function(targetEvent) {
45131              if ("hover" === targetEvent.split(".")[0]) {
45132                scope_Events[targetEvent].forEach(function(callback) {
45133                  callback.call(scope_Self, value);
45134                });
45135              }
45136            });
45137          }
45138          function events(behaviour) {
45139            var i, drag;
45140            if (!behaviour.fixed) {
45141              for (i = 0; i < scope_Handles.length; i += 1) {
45142                attach(actions.start, scope_Handles[i].children[0], start, {
45143                  handles: [scope_Handles[i]],
45144                  handleNumber: i
45145                });
45146              }
45147            }
45148            if (behaviour.tap) {
45149              attach(actions.start, scope_Base, tap, {
45150                handles: scope_Handles
45151              });
45152            }
45153            if (behaviour.hover) {
45154              attach(actions.move, scope_Base, hover, { hover: true });
45155              for (i = 0; i < scope_Handles.length; i += 1) {
45156                ["mousemove MSPointerMove pointermove"].forEach(function(eventName) {
45157                  scope_Handles[i].children[0].addEventListener(eventName, stopPropagation, false);
45158                });
45159              }
45160            }
45161            if (behaviour.drag) {
45162              drag = [scope_Base.querySelector("." + cssClasses[7])];
45163              addClass(drag[0], cssClasses[10]);
45164              if (behaviour.fixed) {
45165                drag.push(scope_Handles[drag[0] === scope_Handles[0] ? 1 : 0].children[0]);
45166              }
45167              drag.forEach(function(element) {
45168                attach(actions.start, element, start, {
45169                  handles: scope_Handles
45170                });
45171              });
45172            }
45173          }
45174          function setHandle(handle, to, noLimitOption) {
45175            var trigger = handle !== scope_Handles[0] ? 1 : 0, lowerMargin = scope_Locations[0] + options.margin, upperMargin = scope_Locations[1] - options.margin, lowerLimit = scope_Locations[0] + options.limit, upperLimit = scope_Locations[1] - options.limit;
45176            if (scope_Handles.length > 1) {
45177              to = trigger ? Math.max(to, lowerMargin) : Math.min(to, upperMargin);
45178            }
45179            if (noLimitOption !== false && options.limit && scope_Handles.length > 1) {
45180              to = trigger ? Math.min(to, lowerLimit) : Math.max(to, upperLimit);
45181            }
45182            to = scope_Spectrum.getStep(to);
45183            to = limit(parseFloat(to.toFixed(7)));
45184            if (to === scope_Locations[trigger]) {
45185              return false;
45186            }
45187            if (window.requestAnimationFrame) {
45188              window.requestAnimationFrame(function() {
45189                handle.style[options.style] = to + "%";
45190              });
45191            } else {
45192              handle.style[options.style] = to + "%";
45193            }
45194            if (!handle.previousSibling) {
45195              removeClass(handle, cssClasses[17]);
45196              if (to > 50) {
45197                addClass(handle, cssClasses[17]);
45198              }
45199            }
45200            scope_Locations[trigger] = to;
45201            scope_Values[trigger] = scope_Spectrum.fromStepping(to);
45202            fireEvent("update", trigger);
45203            return true;
45204          }
45205          function setValues(count, values) {
45206            var i, trigger, to;
45207            if (options.limit) {
45208              count += 1;
45209            }
45210            for (i = 0; i < count; i += 1) {
45211              trigger = i % 2;
45212              to = values[trigger];
45213              if (to !== null && to !== false) {
45214                if (typeof to === "number") {
45215                  to = String(to);
45216                }
45217                to = options.format.from(to);
45218                if (to === false || isNaN(to) || setHandle(scope_Handles[trigger], scope_Spectrum.toStepping(to), i === 3 - options.dir) === false) {
45219                  fireEvent("update", trigger);
45220                }
45221              }
45222            }
45223          }
45224          function valueSet(input) {
45225            var count, values = asArray(input), i;
45226            if (options.dir && options.handles > 1) {
45227              values.reverse();
45228            }
45229            if (options.animate && scope_Locations[0] !== -1) {
45230              addClassFor(scope_Target, cssClasses[14], 300);
45231            }
45232            count = scope_Handles.length > 1 ? 3 : 1;
45233            if (values.length === 1) {
45234              count = 1;
45235            }
45236            setValues(count, values);
45237            for (i = 0; i < scope_Handles.length; i++) {
45238              fireEvent("set", i);
45239            }
45240          }
45241          function valueGet() {
45242            var i, retour = [];
45243            for (i = 0; i < options.handles; i += 1) {
45244              retour[i] = options.format.to(scope_Values[i]);
45245            }
45246            return inSliderOrder(retour);
45247          }
45248          function destroy() {
45249            cssClasses.forEach(function(cls) {
45250              if (!cls) {
45251                return;
45252              }
45253              removeClass(scope_Target, cls);
45254            });
45255            scope_Target.innerHTML = "";
45256            delete scope_Target.noUiSlider;
45257          }
45258          function getCurrentStep() {
45259            var retour = scope_Locations.map(function(location2, index) {
45260              var step = scope_Spectrum.getApplicableStep(location2), stepDecimals = countDecimals(String(step[2])), value = scope_Values[index], increment = location2 === 100 ? null : step[2], prev = Number((value - step[2]).toFixed(stepDecimals)), decrement = location2 === 0 ? null : prev >= step[1] ? step[2] : step[0] || false;
45261              return [decrement, increment];
45262            });
45263            return inSliderOrder(retour);
45264          }
45265          function bindEvent(namespacedEvent, callback) {
45266            scope_Events[namespacedEvent] = scope_Events[namespacedEvent] || [];
45267            scope_Events[namespacedEvent].push(callback);
45268            if (namespacedEvent.split(".")[0] === "update") {
45269              scope_Handles.forEach(function(a, index) {
45270                fireEvent("update", index);
45271              });
45272            }
45273          }
45274          function removeEvent(namespacedEvent) {
45275            var event2 = namespacedEvent.split(".")[0], namespace = namespacedEvent.substring(event2.length);
45276            Object.keys(scope_Events).forEach(function(bind) {
45277              var tEvent = bind.split(".")[0], tNamespace = bind.substring(tEvent.length);
45278              if ((!event2 || event2 === tEvent) && (!namespace || namespace === tNamespace)) {
45279                delete scope_Events[bind];
45280              }
45281            });
45282          }
45283          function updateOptions(optionsToUpdate) {
45284            var v = valueGet(), i, newOptions = testOptions({
45285              start: [0, 0],
45286              margin: optionsToUpdate.margin,
45287              limit: optionsToUpdate.limit,
45288              step: optionsToUpdate.step,
45289              range: optionsToUpdate.range,
45290              animate: optionsToUpdate.animate,
45291              snap: optionsToUpdate.snap === void 0 ? options.snap : optionsToUpdate.snap
45292            });
45293            ["margin", "limit", "step", "range", "animate"].forEach(function(name) {
45294              if (optionsToUpdate[name] !== void 0) {
45295                options[name] = optionsToUpdate[name];
45296              }
45297            });
45298            scope_Spectrum = newOptions.spectrum;
45299            scope_Locations = [-1, -1];
45300            valueSet(v);
45301            for (i = 0; i < scope_Handles.length; i++) {
45302              fireEvent("update", i);
45303            }
45304          }
45305          if (scope_Target.noUiSlider) {
45306            throw new Error("Slider was already initialized.");
45307          }
45308          scope_Base = addSlider(options.dir, options.ort, scope_Target);
45309          scope_Handles = addHandles(options.handles, options.dir, scope_Base);
45310          addConnection(options.connect, scope_Target, scope_Handles);
45311          if (options.pips) {
45312            pips(options.pips);
45313          }
45314          if (options.tooltips) {
45315            tooltips();
45316          }
45317          scope_Self = {
45318            destroy,
45319            steps: getCurrentStep,
45320            on: bindEvent,
45321            off: removeEvent,
45322            get: valueGet,
45323            set: valueSet,
45324            updateOptions
45325          };
45326          events(options.events);
45327          return scope_Self;
45328        }
45329        function initialize(target, originalOptions) {
45330          if (!target.nodeName) {
45331            throw new Error("noUiSlider.create requires a single element.");
45332          }
45333          var options = testOptions(originalOptions, target), slider = closure(target, options);
45334          slider.set(options.start);
45335          target.noUiSlider = slider;
45336          return slider;
45337        }
45338        return {
45339          create: initialize
45340        };
45341      });
45342    }
45343  });
45344
45345  
45345// apps/base/assets/javascripts/vendor/pikaday.js
45346  var require_pikaday2 = __commonJS({
45347    "apps/base/assets/javascripts/vendor/pikaday.js"(exports, module) {
45348      "use strict";
45349      init_esbuild_shims();
45350      (function(root, factory) {
45351        "use strict";
45352        var moment2;
45353        if (typeof exports === "object") {
45354          try {
45355            moment2 = require_moment();
45356          } catch (e) {
45357          }
45358          module.exports = factory(moment2);
45359        } else if (typeof define === "function" && define.amd) {
45360          define(function(req) {
45361            var id = "moment";
45362            try {
45363              moment2 = req(id);
45364            } catch (e) {
45365            }
45366            return factory(moment2);
45367          });
45368        } else {
45369          root.Pikaday = factory(root.moment);
45370        }
45371      })(exports, function(moment2) {
45372        "use strict";
45373        var hasMoment = typeof moment2 === "function", hasEventListeners = !!window.addEventListener, document2 = window.document, sto = window.setTimeout, addEvent = function(el, e, callback, capture) {
45374          if (hasEventListeners) {
45375            el.addEventListener(e, callback, !!capture);
45376          } else {
45377            el.attachEvent("on" + e, callback);
45378          }
45379        }, removeEvent = function(el, e, callback, capture) {
45380          if (hasEventListeners) {
45381            el.removeEventListener(e, callback, !!capture);
45382          } else {
45383            el.detachEvent("on" + e, callback);
45384          }
45385        }, fireEvent = function(el, eventName, data) {
45386          var ev;
45387          if (document2.createEvent) {
45388            ev = document2.createEvent("HTMLEvents");
45389            ev.initEvent(eventName, true, false);
45390            ev = extend(ev, data);
45391            el.dispatchEvent(ev);
45392          } else if (document2.createEventObject) {
45393            ev = document2.createEventObject();
45394            ev = extend(ev, data);
45395            el.fireEvent("on" + eventName, ev);
45396          }
45397        }, trim = function(str) {
45398          return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, "");
45399        }, hasClass = function(el, cn) {
45400          return (" " + el.className + " ").indexOf(" " + cn + " ") !== -1;
45401        }, addClass = function(el, cn) {
45402          if (!hasClass(el, cn)) {
45403            el.className = el.className === "" ? cn : el.className + " " + cn;
45404          }
45405        }, removeClass = function(el, cn) {
45406          el.className = trim((" " + el.className + " ").replace(" " + cn + " ", " "));
45407        }, isArray = function(obj) {
45408          return /Array/.test(Object.prototype.toString.call(obj));
45409        }, isDate = function(obj) {
45410          return /Date/.test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime());
45411        }, isWeekend = function(date) {
45412          var day = date.getDay();
45413          return day === 0 || day === 6;
45414        }, isLeapYear = function(year) {
45415          return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
45416        }, getDaysInMonth = function(year, month) {
45417          return [31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
45418        }, setToStartOfDay = function(date) {
45419          if (isDate(date)) date.setHours(0, 0, 0, 0);
45420        }, compareDates = function(a, b) {
45421          return a.getTime() === b.getTime();
45422        }, extend = function(to, from, overwrite) {
45423          var prop, hasProp;
45424          for (prop in from) {
45425            hasProp = to[prop] !== void 0;
45426            if (hasProp && typeof from[prop] === "object" && from[prop] !== null && from[prop].nodeName === void 0) {
45427              if (isDate(from[prop])) {
45428                if (overwrite) {
45429                  to[prop] = new Date(from[prop].getTime());
45430                }
45431              } else if (isArray(from[prop])) {
45432                if (overwrite) {
45433                  to[prop] = from[prop].slice(0);
45434                }
45435              } else {
45436                to[prop] = extend({}, from[prop], overwrite);
45437              }
45438            } else if (overwrite || !hasProp) {
45439              to[prop] = from[prop];
45440            }
45441          }
45442          return to;
45443        }
45443, adjustCalendar = function(calendar) {
45444          if (calendar.month < 0) {
45445            calendar.year -= Math.ceil(Math.abs(calendar.month) / 12);
45446            calendar.month += 12;
45447          }
45448          if (calendar.month > 11) {
45449            calendar.year += Math.floor(Math.abs(calendar.month) / 12);
45450            calendar.month -= 12;
45451          }
45452          return calendar;
45453        }, defaults = {
45454          // bind the picker to a form field
45455          field: null,
45456          // automatically show/hide the picker on `field` focus (default `true` if `field` is set)
45457          bound: void 0,
45458          // position of the datepicker, relative to the field (default to bottom & left)
45459          // ('bottom' & 'left' keywords are not used, 'top' & 'right' are modifier on the bottom/left position)
45460          position: "bottom left",
45461          // automatically fit in the viewport even if it means repositioning from the position option
45462          reposition: true,
45463          // the default output format for `.toString()` and `field` value
45464          format: "YYYY-MM-DD",
45465          // the initial date to view when first opened
45466          defaultDate: null,
45467          // make the `defaultDate` the initial selected value
45468          setDefaultDate: false,
45469          // first day of week (0: Sunday, 1: Monday etc)
45470          firstDay: 0,
45471          // the minimum/earliest date that can be selected
45472          minDate: null,
45473          // the maximum/latest date that can be selected
45474          maxDate: null,
45475          // number of years either side, or array of upper/lower range
45476          yearRange: 10,
45477          // show week numbers at head of row
45478          showWeekNumber: false,
45479          // used internally (don't config outside)
45480          minYear: 0,
45481          maxYear: 9999,
45482          minMonth: void 0,
45483          maxMonth: void 0,
45484          startRange: null,
45485          endRange: null,
45486          isRTL: false,
45487          // Additional text to append to the year in the calendar title
45488          yearSuffix: "",
45489          // Render the month after year in the calendar title
45490          showMonthAfterYear: false,
45491          // how many months are visible
45492          numberOfMonths: 1,
45493          // when numberOfMonths is used, this will help you to choose where the main calendar will be (default `left`, can be set to `right`)
45494          // only used for the first display or when a selected date is not visible
45495          mainCalendar: "left",
45496          // Specify a DOM element to render the calendar in
45497          container: void 0,
45498          // internationalization
45499          i18n: {
45500            previousMonth: "Previous Month",
45501            nextMonth: "Next Month",
45502            months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "
vendor: 19,387 bytes, lines 45502-45983
45502November", "December"],
45503            weekdays: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
45504            weekdaysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
45505          },
45506          // Theme Classname
45507          theme: null,
45508          // callback function
45509          onSelect: null,
45510          onOpen: null,
45511          onClose: null,
45512          onDraw: null
45513        }, renderDayName = function(opts, day, abbr) {
45514          day += opts.firstDay;
45515          while (day >= 7) {
45516            day -= 7;
45517          }
45518          return abbr ? opts.i18n.weekdaysShort[day] : opts.i18n.weekdays[day];
45519        }, renderDay = function(opts) {
45520          if (opts.isEmpty) {
45521            return '<td class="is-empty"></td>';
45522          }
45523          var arr = [];
45524          if (opts.isDisabled) {
45525            arr.push("is-disabled");
45526          }
45527          if (opts.isToday) {
45528            arr.push("is-today");
45529          }
45530          if (opts.isSelected) {
45531            arr.push("is-selected");
45532          }
45533          if (opts.isInRange) {
45534            arr.push("is-inrange");
45535          }
45536          if (opts.isStartRange) {
45537            arr.push("is-startrange");
45538          }
45539          if (opts.isEndRange) {
45540            arr.push("is-endrange");
45541          }
45542          return '<td data-day="' + opts.day + '" class="' + arr.join(" ") + '"><button class="pika-button pika-day" type="button" data-pika-year="' + opts.year + '" data-pika-month="' + opts.month + '" data-pika-day="' + opts.day + '">' + opts.day + "</button></td>";
45543        }, renderWeek = function(d, m, y) {
45544          var onejan = new Date(y, 0, 1), weekNum = Math.ceil(((new Date(y, m, d) - onejan) / 864e5 + onejan.getDay() + 1) / 7);
45545          return '<td class="pika-week">' + weekNum + "</td>";
45546        }, renderRow = function(days, isRTL) {
45547          return "<tr>" + (isRTL ? days.reverse() : days).join("") + "</tr>";
45548        }, renderBody = function(rows) {
45549          return "<tbody>" + rows.join("") + "</tbody>";
45550        }, renderHead = function(opts) {
45551          var i, arr = [];
45552          if (opts.showWeekNumber) {
45553            arr.push("<th></th>");
45554          }
45555          for (i = 0; i < 7; i++) {
45556            arr.push('<th scope="col"><abbr title="' + renderDayName(opts, i) + '">' + renderDayName(opts, i, true) + "</abbr></th>");
45557          }
45558          return "<thead>" + (opts.isRTL ? arr.reverse() : arr).join("") + "</thead>";
45559        }, renderTitle = function(instance, c, year, month, refYear) {
45560          var i, j, arr, opts = instance._o, isMinYear = year === opts.minYear, isMaxYear = year === opts.maxYear, html = '<div class="pika-title">', monthHtml, yearHtml, prev = true, next = true;
45561          for (arr = [], i = 0; i < 12; i++) {
45562            arr.push('<option value="' + (year === refYear ? i - c : 12 + i - c) + '"' + (i === month ? " selected" : "") + (isMinYear && i < opts.minMonth || isMaxYear && i > opts.maxMonth ? "disabled" : "") + ">" + opts.i18n.months[i] + "</option>");
45563          }
45564          monthHtml = '<div class="pika-label">' + opts.i18n.months[month] + '<select class="pika-select pika-select-month" tabindex="-1">' + arr.join("") + "</select></div>";
45565          if (isArray(opts.yearRange)) {
45566            i = opts.yearRange[0];
45567            j = opts.yearRange[1] + 1;
45568          } else {
45569            i = year - opts.yearRange;
45570            j = 1 + year + opts.yearRange;
45571          }
45572          for (arr = []; i < j && i <= opts.maxYear; i++) {
45573            if (i >= opts.minYear) {
45574              arr.push('<option value="' + i + '"' + (i === year ? " selected" : "") + ">" + i + "</option>");
45575            }
45576          }
45577          yearHtml = '<div class="pika-label">' + year + opts.yearSuffix + '<select class="pika-select pika-select-year" tabindex="-1">' + arr.join("") + "</select></div>";
45578          if (opts.showMonthAfterYear) {
45579            html += yearHtml + monthHtml;
45580          } else {
45581            html += monthHtml + yearHtml;
45582          }
45583          if (isMinYear && (month === 0 || opts.minMonth >= month)) {
45584            prev = false;
45585          }
45586          if (isMaxYear && (month === 11 || opts.maxMonth <= month)) {
45587            next = false;
45588          }
45589          if (c === 0) {
45590            html += '<button class="pika-prev' + (prev ? "" : " is-disabled") + '" type="button">' + opts.i18n.previousMonth + "</button>";
45591          }
45592          if (c === instance._o.numberOfMonths - 1) {
45593            html += '<button class="pika-next' + (next ? "" : " is-disabled") + '" type="button">' + opts.i18n.nextMonth + "</button>";
45594          }
45595          return html += "</div>";
45596        }, renderTable = function(opts, data) {
45597          return '<table cellpadding="0" cellspacing="0" class="pika-table">' + renderHead(opts) + renderBody(data) + "</table>";
45598        }, Pikaday3 = function(options) {
45599          var self2 = this, opts = self2.config(options);
45600          self2._onMouseDown = function(e) {
45601            if (!self2._v) {
45602              return;
45603            }
45604            e = e || window.event;
45605            var target = e.target || e.srcElement;
45606            if (!target) {
45607              return;
45608            }
45609            if (!hasClass(target.parentNode, "is-disabled")) {
45610              if (hasClass(target, "pika-button") && !hasClass(target, "is-empty")) {
45611                self2.setDate(new Date(target.getAttribute("data-pika-year"), target.getAttribute("data-pika-month"), target.getAttribute("data-pika-day")));
45612                if (opts.bound) {
45613                  sto(function() {
45614                    self2.hide();
45615                    if (opts.field) {
45616                      opts.field.blur();
45617                    }
45618                  }, 100);
45619                }
45620                return;
45621              } else if (hasClass(target, "pika-prev")) {
45622                self2.prevMonth();
45623              } else if (hasClass(target, "pika-next")) {
45624                self2.nextMonth();
45625              }
45626            }
45627            if (!hasClass(target, "pika-select")) {
45628              if (e.preventDefault) {
45629                e.preventDefault();
45630              } else {
45631                e.returnValue = false;
45632                return false;
45633              }
45634            } else {
45635              self2._c = true;
45636            }
45637          };
45638          self2._onChange = function(e) {
45639            e = e || window.event;
45640            var target = e.target || e.srcElement;
45641            if (!target) {
45642              return;
45643            }
45644            if (hasClass(target, "pika-select-month")) {
45645              self2.gotoMonth(target.value);
45646            } else if (hasClass(target, "pika-select-year")) {
45647              self2.gotoYear(target.value);
45648            }
45649          };
45650          self2._onInputChange = function(e) {
45651            var date;
45652            if (e.firedBy === self2) {
45653              return;
45654            }
45655            if (hasMoment) {
45656              date = moment2(opts.field.value, opts.format);
45657              date = date && date.isValid() ? date.toDate() : null;
45658            } else {
45659              date = new Date(Date.parse(opts.field.value));
45660            }
45661            if (isDate(date)) {
45662              self2.setDate(date);
45663            }
45664            if (!self2._v) {
45665              self2.show();
45666            }
45667          };
45668          self2._onInputFocus = function() {
45669            self2.show();
45670          };
45671          self2._onInputClick = function() {
45672            self2.show();
45673          };
45674          self2._onInputBlur = function() {
45675            var pEl = document2.activeElement;
45676            do {
45677              if (hasClass(pEl, "pika-single")) {
45678                return;
45679              }
45680            } while (pEl = pEl.parentNode);
45681            if (!self2._c) {
45682              self2._b = sto(function() {
45683                self2.hide();
45684              }, 50);
45685            }
45686            self2._c = false;
45687          };
45688          self2._onClick = function(e) {
45689            e = e || window.event;
45690            var target = e.target || e.srcElement, pEl = target;
45691            if (!target) {
45692              return;
45693            }
45694            if (!hasEventListeners && hasClass(target, "pika-select")) {
45695              if (!target.onchange) {
45696                target.setAttribute("onchange", "return;");
45697                addEvent(target, "change", self2._onChange);
45698              }
45699            }
45700            do {
45701              if (hasClass(pEl, "pika-single") || pEl === opts.trigger) {
45702                return;
45703              }
45704            } while (pEl = pEl.parentNode);
45705            if (self2._v && target !== opts.trigger && pEl !== opts.trigger) {
45706              self2.hide();
45707            }
45708          };
45709          self2.el = document2.createElement("div");
45710          self2.el.className = "pika-single" + (opts.isRTL ? " is-rtl" : "") + (opts.theme ? " " + opts.theme : "");
45711          addEvent(self2.el, "ontouchend" in document2 ? "touchend" : "mousedown", self2._onMouseDown, true);
45712          addEvent(self2.el, "change", self2._onChange);
45713          if (opts.field) {
45714            if (opts.container) {
45715              opts.container.appendChild(self2.el);
45716            } else if (opts.bound) {
45717              document2.body.appendChild(self2.el);
45718            } else {
45719              opts.field.parentNode.insertBefore(self2.el, opts.field.nextSibling);
45720            }
45721            addEvent(opts.field, "change", self2._onInputChange);
45722            if (!opts.defaultDate) {
45723              if (hasMoment && opts.field.value) {
45724                opts.defaultDate = moment2(opts.field.value, opts.format).toDate();
45725              } else {
45726                opts.defaultDate = new Date(Date.parse(opts.field.value));
45727              }
45728              opts.setDefaultDate = true;
45729            }
45730          }
45731          var defDate = opts.defaultDate;
45732          if (isDate(defDate)) {
45733            if (opts.setDefaultDate) {
45734              self2.setDate(defDate, true);
45735            } else {
45736              self2.gotoDate(defDate);
45737            }
45738          } else {
45739            self2.gotoDate(/* @__PURE__ */ new Date());
45740          }
45741          if (opts.bound) {
45742            this.hide();
45743            self2.el.className += " is-bound";
45744            addEvent(opts.trigger, "click", self2._onInputClick);
45745            addEvent(opts.trigger, "focus", self2._onInputFocus);
45746            addEvent(opts.trigger, "blur", self2._onInputBlur);
45747          } else {
45748            this.show();
45749          }
45750        };
45751        Pikaday3.prototype = {
45752          /**
45753           * configure functionality
45754           */
45755          config: function(options) {
45756            if (!this._o) {
45757              this._o = extend({}, defaults, true);
45758            }
45759            var opts = extend(this._o, options, true);
45760            opts.isRTL = !!opts.isRTL;
45761            opts.field = opts.field && opts.field.nodeName ? opts.field : null;
45762            opts.theme = typeof opts.theme === "string" && opts.theme ? opts.theme : null;
45763            opts.bound = !!(opts.bound !== void 0 ? opts.field && opts.bound : opts.field);
45764            opts.trigger = opts.trigger && opts.trigger.nodeName ? opts.trigger : opts.field;
45765            opts.disableWeekends = !!opts.disableWeekends;
45766            opts.disableDayFn = typeof opts.disableDayFn === "function" ? opts.disableDayFn : null;
45767            var nom = parseInt(opts.numberOfMonths, 10) || 1;
45768            opts.numberOfMonths = nom > 4 ? 4 : nom;
45769            if (!isDate(opts.minDate)) {
45770              opts.minDate = false;
45771            }
45772            if (!isDate(opts.maxDate)) {
45773              opts.maxDate = false;
45774            }
45775            if (opts.minDate && opts.maxDate && opts.maxDate < opts.minDate) {
45776              opts.maxDate = opts.minDate = false;
45777            }
45778            if (opts.minDate) {
45779              this.setMinDate(opts.minDate);
45780            }
45781            if (opts.maxDate) {
45782              setToStartOfDay(opts.maxDate);
45783              opts.maxYear = opts.maxDate.getFullYear();
45784              opts.maxMonth = opts.maxDate.getMonth();
45785            }
45786            if (isArray(opts.yearRange)) {
45787              var fallback = (/* @__PURE__ */ new Date()).getFullYear() - 10;
45788              opts.yearRange[0] = parseInt(opts.yearRange[0], 10) || fallback;
45789              opts.yearRange[1] = parseInt(opts.yearRange[1], 10) || fallback;
45790            } else {
45791              opts.yearRange = Math.abs(parseInt(opts.yearRange, 10)) || defaults.yearRange;
45792              if (opts.yearRange > 100) {
45793                opts.yearRange = 100;
45794              }
45795            }
45796            return opts;
45797          },
45798          /**
45799           * return a formatted string of the current selection (using Moment.js if available)
45800           */
45801          toString: function(format) {
45802            return !isDate(this._d) ? "" : hasMoment ? moment2(this._d).format(format || this._o.format) : this._d.toDateString();
45803          },
45804          /**
45805           * return a Moment.js object of the current selection (if available)
45806           */
45807          getMoment: function() {
45808            return hasMoment ? moment2(this._d) : null;
45809          },
45810          /**
45811           * set the current selection from a Moment.js object (if available)
45812           */
45813          setMoment: function(date, preventOnSelect) {
45814            if (hasMoment && moment2.isMoment(date)) {
45815              this.setDate(date.toDate(), preventOnSelect);
45816            }
45817          },
45818          /**
45819           * return a Date object of the current selection
45820           */
45821          getDate: function() {
45822            return isDate(this._d) ? new Date(this._d.getTime()) : null;
45823          },
45824          /**
45825           * set the current selection
45826           */
45827          setDate: function(date, preventOnSelect) {
45828            if (!date) {
45829              this._d = null;
45830              if (this._o.field) {
45831                this._o.field.value = "";
45832                fireEvent(this._o.field, "change", { firedBy: this });
45833              }
45834              return this.draw();
45835            }
45836            if (typeof date === "string") {
45837              date = new Date(Date.parse(date));
45838            }
45839            if (!isDate(date)) {
45840              return;
45841            }
45842            var min = this._o.minDate, max = this._o.maxDate;
45843            if (isDate(min) && date < min) {
45844              date = min;
45845            } else if (isDate(max) && date > max) {
45846              date = max;
45847            }
45848            this._d = new Date(date.getTime());
45849            setToStartOfDay(this._d);
45850            this.gotoDate(this._d);
45851            if (this._o.field) {
45852              this._o.field.value = this.toString();
45853              fireEvent(this._o.field, "change", { firedBy: this });
45854            }
45855            if (!preventOnSelect && typeof this._o.onSelect === "function") {
45856              this._o.onSelect.call(this, this.getDate());
45857            }
45858          },
45859          /**
45860           * change view to a specific date
45861           */
45862          gotoDate: function(date) {
45863            var newCalendar = true;
45864            if (!isDate(date)) {
45865              return;
45866            }
45867            if (this.calendars) {
45868              var firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1), lastVisibleDate = new Date(this.calendars[this.calendars.length - 1].year, this.calendars[this.calendars.length - 1].month, 1), visibleDate = date.getTime();
45869              lastVisibleDate.setMonth(lastVisibleDate.getMonth() + 1);
45870              lastVisibleDate.setDate(lastVisibleDate.getDate() - 1);
45871              newCalendar = visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate;
45872            }
45873            if (newCalendar) {
45874              this.calendars = [{
45875                month: date.getMonth(),
45876                year: date.getFullYear()
45877              }];
45878              if (this._o.mainCalendar === "right") {
45879                this.calendars[0].month += 1 - this._o.numberOfMonths;
45880              }
45881            }
45882            this.adjustCalendars();
45883          },
45884          adjustCalendars: function() {
45885            this.calendars[0] = adjustCalendar(this.calendars[0]);
45886            for (var c = 1; c < this._o.numberOfMonths; c++) {
45887              this.calendars[c] = adjustCalendar({
45888                month: this.calendars[0].month + c,
45889                year: this.calendars[0].year
45890              });
45891            }
45892            this.draw();
45893          },
45894          gotoToday: function() {
45895            this.gotoDate(/* @__PURE__ */ new Date());
45896          },
45897          /**
45898           * change view to a specific month (zero-index, e.g. 0: January)
45899           */
45900          gotoMonth: function(month) {
45901            if (!isNaN(month)) {
45902              this.calendars[0].month = parseInt(month, 10);
45903              this.adjustCalendars();
45904            }
45905          },
45906          nextMonth: function() {
45907            this.calendars[0].month++;
45908            this.adjustCalendars();
45909          },
45910          prevMonth: function() {
45911            this.calendars[0].month--;
45912            this.adjustCalendars();
45913          },
45914          /**
45915           * change view to a specific full year (e.g. "2012")
45916           */
45917          gotoYear: function(year) {
45918            if (!isNaN(year)) {
45919              this.calendars[0].year = parseInt(year, 10);
45920              this.adjustCalendars();
45921            }
45922          },
45923          /**
45924           * change the minDate
45925           */
45926          setMinDate: function(value) {
45927            setToStartOfDay(value);
45928            this._o.minDate = value;
45929            this._o.minYear = value.getFullYear();
45930            this._o.minMonth = value.getMonth();
45931          },
45932          /**
45933           * change the maxDate
45934           */
45935          setMaxDate: function(value) {
45936            this._o.maxDate = value;
45937          },
45938          setStartRange: function(value) {
45939            this._o.startRange = value;
45940          },
45941          setEndRange: function(value) {
45942            this._o.endRange = value;
45943          },
45944          /**
45945           * refresh the HTML
45946           */
45947          draw: function(force) {
45948            if (!this._v && !force) {
45949              return;
45950            }
45951            var opts = this._o, minYear = opts.minYear, maxYear = opts.maxYear, minMonth = opts.minMonth, maxMonth = opts.maxMonth, html = "";
45952            if (this._y <= minYear) {
45953              this._y = minYear;
45954              if (!isNaN(minMonth) && this._m < minMonth) {
45955                this._m = minMonth;
45956              }
45957            }
45958            if (this._y >= maxYear) {
45959              this._y = maxYear;
45960              if (!isNaN(maxMonth) && this._m > maxMonth) {
45961                this._m = maxMonth;
45962              }
45963            }
45964            for (var c = 0; c < opts.numberOfMonths; c++) {
45965              html += '<div class="pika-lendar">' + renderTitle(this, c, this.calendars[c].year, this.calendars[c].month, this.calendars[0].year) + this.render(this.calendars[c].year, this.calendars[c].month) + "</div>";
45966            }
45967            this.el.innerHTML = html;
45968            if (opts.bound) {
45969              if (opts.field.type !== "hidden") {
45970                sto(function() {
45971                  opts.trigger.focus();
45972                }, 1);
45973              }
45974            }
45975            if (typeof this._o.onDraw === "function") {
45976              var self2 = this;
45977              sto(function() {
45978                self2._o.onDraw.call(self2);
45979              }, 0);
45980            }
45981          },
45982          adjustPosition: function() {
45983            var field, pEl, width, height, viewportWidth, viewportHe
45983ight, scrollTop, left, top, clientRect;
45984            if (this._o.container) return;
45985            this.el.style.position = "absolute";
45986            field = this._o.trigger;
45987            pEl = field;
45988            width = this.el.offsetWidth;
45989            height = this.el.offsetHeight;
45990            viewportWidth = window.innerWidth || document2.documentElement.clientWidth;
45991            viewportHeight = window.innerHeight || document2.documentElement.clientHeight;
45992            scrollTop = window.pageYOffset || document2.body.scrollTop || document2.documentElement.scrollTop;
45993            if (typeof field.getBoundingClientRect === "function") {
45994              clientRect = field.getBoundingClientRect();
45995              left = clientRect.left + window.pageXOffset;
45996              top = clientRect.bottom + window.pageYOffset;
45997            } else {
45998              left = pEl.offsetLeft;
45999              top = pEl.offsetTop + pEl.offsetHeight;
46000              while (pEl = pEl.offsetParent) {
46001                left += pEl.offsetLeft;
46002                top += pEl.offsetTop;
46003              }
46004            }
46005            if (this._o.reposition && left + width > viewportWidth || this._o.position.indexOf("right") > -1 && left - width + field.offsetWidth > 0) {
46006              left = left - width + field.offsetWidth;
46007            }
46008            if (this._o.reposition && top + height > viewportHeight + scrollTop || this._o.position.indexOf("top") > -1 && top - height - field.offsetHeight > 0) {
46009              top = top - height - field.offsetHeight;
46010            }
46011            this.el.style.left = left + "px";
46012            this.el.style.top = top + "px";
46013          },
46014          /**
46015           * render HTML for a particular month
46016           */
46017          render: function(year, month) {
46018            var opts = this._o, now = /* @__PURE__ */ new Date(), days = getDaysInMonth(year, month), before = new Date(year, month, 1).getDay(), data = [], row = [];
46019            setToStartOfDay(now);
46020            if (opts.firstDay > 0) {
46021              before -= opts.firstDay;
46022              if (before < 0) {
46023                before += 7;
46024              }
46025            }
46026            var cells = days + before, after = cells;
46027            while (after > 7) {
46028              after -= 7;
46029            }
46030            cells += 7 - after;
46031            for (var i = 0, r = 0; i < cells; i++) {
46032              var dayConfig, day = new Date(year, month, 1 + (i - before)), isSelected = isDate(this._d) ? compareDates(day, this._d) : false, isToday = compareDates(day, now), isEmpty = i < before || i >= days + before, isStartRange = opts.startRange && compareDates(opts.startRange, day), isEndRange = opts.endRange && compareDates(opts.endRange, day), isInRange = opts.startRange && opts.endRange && opts.startRange < day && day < opts.endRange, isDisabled = opts.minDate && day < opts.minDate || opts.maxDate && day > opts.maxDate || opts.disableWeekends && isWeekend(day) || opts.disableDayFn && opts.disableDayFn(day), dayConfig = {
46033                day: 1 + (i - before),
46034                month,
46035                year,
46036                isSelected,
46037                isToday,
46038                isDisabled,
46039                isEmpty,
46040                isStartRange,
46041                isEndRange,
46042                isInRange
46043              };
46044              row.push(renderDay(dayConfig));
46045              if (++r === 7) {
46046                if (opts.showWeekNumber) {
46047                  row.unshift(renderWeek(i - before, month, year));
46048                }
46049                data.push(renderRow(row, opts.isRTL));
46050                row = [];
46051                r = 0;
46052              }
46053            }
46054            return renderTable(opts, data);
46055          },
46056          isVisible: function() {
46057            return this._v;
46058          },
46059          show: function() {
46060            if (!this._v) {
46061              removeClass(this.el, "is-hidden");
46062              this._v = true;
46063              this.draw();
46064              if (this._o.bound) {
46065                addEvent(document2, "click", this._onClick);
46066                this.adjustPosition();
46067              }
46068              if (typeof this._o.onOpen === "function") {
46069                this._o.onOpen.call(this);
46070              }
46071            }
46072          },
46073          hide: function() {
46074            var v = this._v;
46075            if (v !== false) {
46076              if (this._o.bound) {
46077                removeEvent(document2, "click", this._onClick);
46078              }
46079              this.el.style.position = "static";
46080              this.el.style.left = "auto";
46081              this.el.style.top = "auto";
46082              addClass(this.el, "is-hidden");
46083              this._v = false;
vendor: 976 bytes, lines 46084-46114
46084              if (v !== void 0 && typeof this._o.onClose === "function") {
46085                this._o.onClose.call(this);
46086              }
46087            }
46088          },
46089          /**
46090           * GAME OVER
46091           */
46092          destroy: function() {
46093            this.hide();
46094            removeEvent(this.el, "mousedown", this._onMouseDown, true);
46095            removeEvent(this.el, "change", this._onChange);
46096            if (this._o.field) {
46097              removeEvent(this._o.field, "change", this._onInputChange);
46098              if (this._o.bound) {
46099                removeEvent(this._o.trigger, "click", this._onInputClick);
46100                removeEvent(this._o.trigger, "focus", this._onInputFocus);
46101                removeEvent(this._o.trigger, "blur", this._onInputBlur);
46102              }
46103            }
46104            if (this.el.parentNode) {
46105              this.el.parentNode.removeChild(this.el);
46106            }
46107          }
46108        };
46109        return Pikaday3;
46110      });
46111    }
46112  });
46113
46114  
46114// apps/base/assets/javascripts/vendor/placeholders.js
46115  var require_placeholders = __commonJS({
46116    "apps/base/assets/javascripts/vendor/placeholders.js"(exports) {
46117      "use strict";
46118      init_esbuild_shims();
46119      (function(global2) {
46120        "use strict";
46121        var test = document.createElement("input");
46122        var nativeSupport = test.placeholder !== void 0;
46123        global2.Placeholders = {
46124          nativeSupport,
46125          disable: nativeSupport ? noop : disablePlaceholders,
46126          enable: nativeSupport ? noop : enablePlaceholders
46127        };
46128        if (nativeSupport) {
46129          return;
46130        }
46131        var validTypes = [
46132          "text",
46133          "search",
46134          "url",
46135          "tel",
46136          "email",
46137          "password",
46138          "number",
46139          "textarea"
46140        ];
46141        var badKeys = [
46142          // The following keys all cause the caret to jump to the end of the input
46143          // value.
46144          27,
46145          // Escape
46146          33,
46147          // Page up
46148          34,
46149          // Page down
46150          35,
46151          // End
46152          36,
46153          // Home
46154          // Arrow keys allow you to move the caret manually, which should be
46155          // prevented when the placeholder is visible.
46156          37,
46157          // Left
46158          38,
46159          // Up
46160          39,
46161          // Right
46162          40,
46163          // Down
46164          // The following keys allow you to modify the placeholder text by removing
46165          // characters, which should be prevented when the placeholder is visible.
46166          8,
46167          // Backspace
46168          46
46169          // Delete
46170        ];
46171        var placeholderStyleColor = "#ccc";
46172        var placeholderClassName = "placeholdersjs";
46173        var classNameRegExp = new RegExp("(?:^|\\s)" + placeholderClassName + "(?!\\S)");
46174        var ATTR_CURRENT_VAL = "data-placeholder-value";
46175        var ATTR_ACTIVE = "data-placeholder-active";
46176        var ATTR_INPUT_TYPE = "data-placeholder-type";
46177        var ATTR_FORM_HANDLED = "data-placeholder-submit";
46178        var ATTR_EVENTS_BOUND = "data-placeholder-bound";
46179        var ATTR_OPTION_FOCUS = "data-placeholder-focus";
46180        var ATTR_OPTION_LIVE = "data-placeholder-live";
46181        var ATTR_MAXLENGTH = "data-placeholder-maxlength";
46182        var UPDATE_INTERVAL = 100;
46183        var head = document.getElementsByTagName("head")[0];
46184        var root = document.documentElement;
46185        var Placeholders = global2.Placeholders;
46186        var keydownVal;
46187        var inputs = document.getElementsByTagName("input");
46188        var textareas = document.getElementsByTagName("textarea");
46189        var hideOnInput = root.getAttribute(ATTR_OPTION_FOCUS) === "false";
46190        var liveUpdates = root.getAttribute(ATTR_OPTION_LIVE) !== "false";
46191        var styleElem = document.createElement("style");
46192        styleElem.type = "text/css";
46193        var styleRules = document.createTextNode(
46194          "." + placeholderClassName + " {color:" + placeholderStyleColor + ";}"
46195        );
46196        if (styleElem.styleSheet) {
46197          styleElem.styleSheet.cssText = styleRules.nodeValue;
46198        } else {
46199          styleElem.appendChild(styleRules);
46200        }
46201        head.insertBefore(styleElem, head.firstChild);
46202        var placeholder;
46203        var elem;
46204        for (var i = 0, len = inputs.length + textareas.length; i < len; i++) {
46205          elem = i < inputs.length ? inputs[i] : textareas[i - inputs.length];
46206          placeholder = elem.attributes.placeholder;
46207          if (placeholder) {
46208            placeholder = placeholder.nodeValue;
46209            if (placeholder && inArray(validTypes, elem.type)) {
46210              newElement(elem);
46211            }
46212          }
46213        }
46214        var timer = setInterval(function() {
46215          for (var i2 = 0, len2 = inputs.length + textareas.length; i2 < len2; i2++) {
46216            elem = i2 < inputs.length ? inputs[i2] : textareas[i2 - inputs.length];
46217            placeholder = elem.attributes.placeholder;
46218            if (placeholder) {
46219              placeholder = placeholder.nodeValue;
46220              if (placeholder && inArray(validTypes, elem.type)) {
46221                if (!elem.getAttribute(ATTR_EVENTS_BOUND)) {
46222                  newElement(elem);
46223                }
46224                if (placeholder !== elem.getAttribute(ATTR_CURRENT_VAL) || elem.type === "password" && !elem.getAttribute(ATTR_INPUT_TYPE)) {
46225                  if (elem.type === "password" && !elem.getAttribute(ATTR_INPUT_TYPE) && changeType(elem, "text")) {
46226                    elem.setAttribute(ATTR_INPUT_TYPE, "password");
46227                  }
46228                  if (elem.value === elem.getAttribute(ATTR_CURRENT_VAL)) {
46229                    elem.value = placeholder;
46230                  }
46231                  elem.setAttribute(ATTR_CURRENT_VAL, placeholder);
46232                }
46233              }
46234            } else if (elem.getAttribute(ATTR_ACTIVE)) {
46235              hidePlaceholder(elem);
46236              elem.removeAttribute(ATTR_CURRENT_VAL);
46237            }
46238          }
46239          if (!liveUpdates) {
46240            clearInterval(timer);
46241          }
46242        }, UPDATE_INTERVAL);
46243        addEventListener(global2, "beforeunload", function() {
46244          Placeholders.disable();
46245        });
46246        function noop() {
46247        }
46248        function safeActiveElement() {
46249          try {
46250            return document.activeElement;
46251          } catch (err) {
46252          }
46253        }
46254        function inArray(arr, item) {
46255          for (var i2 = 0, len2 = arr.length; i2 < len2; i2++) {
46256            if (arr[i2] === item) {
46257              return true;
46258            }
46259          }
46260          return false;
46261        }
46262        function addEventListener(elem2, event2, fn) {
46263          if (elem2.addEventListener) {
46264            return elem2.addEventListener(event2, fn, false);
46265          }
46266          if (elem2.attachEvent) {
46267            return elem2.attachEvent("on" + event2, fn);
46268          }
46269        }
46270        function moveCaret(elem2, index) {
46271          var range;
46272          if (elem2.createTextRange) {
46273            range = elem2.createTextRange();
46274            range.move("character", index);
46275            range.select();
46276          } else if (elem2.selectionStart) {
46277            elem2.focus();
46278            elem2.setSelectionRange(index, index);
46279          }
46280        }
46281        function changeType(elem2, type) {
46282          try {
46283            elem2.type = type;
46284            return true;
46285          } catch (e) {
46286            return false;
46287          }
46288        }
46289        function handleElem(node, callback) {
46290          if (node && node.getAttribute(ATTR_CURRENT_VAL)) {
46291            callback(node);
46292          } else {
46293            var handleInputs = node ? node.getElementsByTagName("input") : inputs;
46294            var handleTextareas = node ? node.getElementsByTagName("textarea") : textareas;
46295            var handleInputsLength = handleInputs ? handleInputs.length : 0;
46296            var handleTextareasLength = handleTextareas ? handleTextareas.length : 0;
46297            var len2 = handleInputsLength + handleTextareasLength;
46298            var elem2;
46299            for (var i2 = 0; i2 < len2; i2++) {
46300              elem2 = i2 < handleInputsLength ? handleInputs[i2] : handleTextareas[i2 - handleInputsLength];
46301              callback(elem2);
46302            }
46303          }
46304        }
46305        function disablePlaceholders(node) {
46306          handleElem(node, hidePlaceholder);
46307        }
46308        function enablePlaceholders(node) {
46309          handleElem(node, showPlaceholder);
46310        }
46311        function hidePlaceholder(elem2, keydownValue) {
46312          var valueChanged = !!keydownValue && elem2.value !== keydownValue;
46313          var isPlaceholderValue = elem2.value === elem2.getAttribute(ATTR_CURRENT_VAL);
46314          if ((valueChanged || isPlaceholderValue) && elem2.getAttribute(ATTR_ACTIVE) === "true") {
46315            elem2.removeAttribute(ATTR_ACTIVE);
46316            elem2.value = elem2.value.replace(elem2.getAttribute(ATTR_CURRENT_VAL), "");
46317            elem2.className = elem2.className.replace(classNameRegExp, "");
46318            var maxLength = elem2.getAttribute(ATTR_MAXLENGTH);
46319            if (parseInt(maxLength, 10) >= 0) {
46320              elem2.setAttribute("maxLength", maxLength);
46321              elem2.removeAttribute(ATTR_MAXLENGTH);
46322            }
46323            var type = elem2.getAttribute(ATTR_INPUT_TYPE);
46324            if (type) {
46325              elem2.type = type;
46326            }
46327            return true;
46328          }
46329          return false;
46330        }
46331        function showPlaceholder(elem2) {
46332          var val = elem2.getAttribute(ATTR_CURRENT_VAL);
46333          if (elem2.value === "" && val) {
46334            elem2.setAttribute(ATTR_ACTIVE, "true");
46335            elem2.value = val;
46336            elem2.className += " " + placeholderClassName;
46337            var maxLength = elem2.getAttribute(ATTR_MAXLENGTH);
46338            if (!maxLength) {
46339              elem2.setAttribute(ATTR_MAXLENGTH, elem2.maxLength);
46340              elem2.removeAttribute("maxLength");
46341            }
46342            var type = elem2.getAttribute(ATTR_INPUT_TYPE);
46343            if (type) {
46344              elem2.type = "text";
46345            } else if (elem2.type === "password" && changeType(elem2, "text")) {
46346              elem2.setAttribute(ATTR_INPUT_TYPE, "password");
46347            }
46348            return true;
46349          }
46350          return false;
46351        }
46352        function makeFocusHandler(elem2) {
46353          return function() {
46354            if (hideOnInput && elem2.value === elem2.getAttribute(ATTR_CURRENT_VAL) && elem2.getAttribute(ATTR_ACTIVE) === "true") {
46355              moveCaret(elem2, 0);
46356            } else {
46357              hidePlaceholder(elem2);
46358            }
46359          };
46360        }
46361        function makeBlurHandler(elem2) {
46362          return function() {
46363            showPlaceholder(elem2);
46364          };
46365        }
46366        function makeSubmitHandler(form) {
46367          return function() {
46368            disablePlaceholders(form);
46369          };
46370        }
46371        function makeKeydownHandler(elem2) {
46372          return function(e) {
46373            keydownVal = elem2.value;
46374            if (elem2.getAttribute(ATTR_ACTIVE) === "true" && keydownVal === elem2.getAttribute(ATTR_CURRENT_VAL) && inArray(badKeys, e.keyCode)) {
46375              if (e.preventDefault) {
46376                e.preventDefault();
46377              }
46378              return false;
46379            }
46380          };
46381        }
46382        function makeKeyupHandler(elem2) {
46383          return function() {
46384            hidePlaceholder(elem2, keydownVal);
46385            if (elem2.value === "") {
46386              elem2.blur();
46387              moveCaret(elem2, 0);
46388            }
46389          };
46390        }
46391        function makeClickHandler(elem2) {
46392          return function() {
46393            if (elem2 === safeActiveElement() && elem2.value === elem2.getAttribute(ATTR_CURRENT_VAL) && elem2.getAttribute(ATTR_ACTIVE) === "true") {
46394              moveCaret(elem2, 0);
46395            }
46396          };
46397        }
46398        function newElement(elem2) {
46399          var form = elem2.form;
46400          if (form && typeof form === "string") {
46401            form = document.getElementById(form);
46402            if (!form.getAttribute(ATTR_FORM_HANDLED)) {
46403              addEventListener(form, "submit", makeSubmitHandler(form));
46404              form.setAttribute(ATTR_FORM_HANDLED, "true");
46405            }
46406          }
46407          addEventListener(elem2, "focus", makeFocusHandler(elem2));
46408          addEventListener(elem2, "blur", makeBlurHandler(elem2));
46409          if (hideOnInput) {
46410            addEventListener(elem2, "keydown", makeKeydownHandler(elem2));
46411            addEventListener(elem2, "keyup", makeKeyupHandler(elem2));
46412            addEventListener(elem2, "click", makeClickHandler(elem2));
46413          }
46414          elem2.setAttribute(ATTR_EVENTS_BOUND, "true");
46415          elem2.setAttribute(ATTR_CURRENT_VAL, placeholder);
46416          if (hideOnInput || elem2 !== safeActiveElement()) {
46417            showPlaceholder(elem2);
46418          }
46419        }
46420      })(exports);
46421    }
46422  });
46423
46424  
46424// apps/base/assets/javascripts/vendor/promise.polyfill.js
46425  var require_promise_polyfill = __commonJS({
46426    "apps/base/assets/javascripts/vendor/promise.polyfill.js"(exports, module) {
46427      "use strict";
46428      init_esbuild_shims();
46429      !(function(e, n) {
46430        "object" == typeof exports && "undefined" != typeof module ? n() : "function" == typeof define && define.amd ? define(n) : n();
46431      })(0, function() {
46432        "use strict";
46433        function e(e2) {
46434          var n2 = this.constructor;
46435          return this.then(
46436            function(t2) {
46437              return n2.resolve(e2()).then(function() {
46438                return t2;
46439              });
46440            },
46441            function(t2) {
46442              return n2.resolve(e2()).then(function() {
46443                return n2.reject(t2);
46444              });
46445            }
46446          );
46447        }
46448        function n(e2) {
46449          return !(!e2 || "undefined" == typeof e2.length);
46450        }
46451        function o(e2) {
46452          if (!(this instanceof o)) throw new TypeError("Promises must be constructed via new");
46453          if ("function" != typeof e2) throw new TypeError("not a function");
46454          this._state = 0, this._handled = false, this._value = void 0, this._deferreds = [], c(e2, this);
46455        }
46456        function r(e2, n2) {
46457          for (; 3 === e2._state; ) e2 = e2._value;
46458          0 !== e2._state ? (e2._handled = true, o._immediateFn(function() {
46459            var t2 = 1 === e2._state ? n2.onFulfilled : n2.onRejected;
46460            if (null !== t2) {
46461              var o2;
46462              try {
46463                o2 = t2(e2._value);
46464              } catch (r2) {
46465                return void f(n2.promise, r2);
46466              }
46467              i(n2.promise, o2);
46468            } else (1 === e2._state ? i : f)(n2.promise, e2._value);
46469          })) : e2._deferreds.push(n2);
46470        }
46471        function i(e2, n2) {
46472          try {
46473            if (n2 === e2) throw new TypeError("A promise cannot be resolved with itself.");
46474            if (n2 && ("object" == typeof n2 || "function" == typeof n2)) {
46475              var t2 = n2.then;
46476              if (n2 instanceof o) return e2._state = 3, e2._value = n2, void u(e2);
46477              if ("function" == typeof t2)
46478                return void c(
46479                  /* @__PURE__ */ (function(e3, n3) {
46480                    return function() {
46481                      e3.apply(n3, arguments);
46482                    };
46483                  })(t2, n2),
46484                  e2
46485                );
46486            }
46487            ;
46488            e2._state = 1, e2._value = n2, u(e2);
46489          } catch (r2) {
46490            f(e2, r2);
46491          }
46492        }
46493        function f(e2, n2) {
46494          ;
46495          e2._state = 2, e2._value = n2, u(e2);
46496        }
46497        function u(e2) {
46498          2 === e2._state && 0 === e2._deferreds.length && o._immediateFn(function() {
46499            e2._handled || o._unhandledRejectionFn(e2._value);
46500          });
46501          for (var n2 = 0, t2 = e2._deferreds.length; t2 > n2; n2++) r(e2, e2._deferreds[n2]);
46502          e2._deferreds = null;
46503        }
46504        function c(e2, n2) {
46505          var t2 = false;
46506          try {
46507            e2(
46508              function(e3) {
46509                t2 || (t2 = true, i(n2, e3));
46510              },
46511              function(e3) {
46512                t2 || (t2 = true, f(n2, e3));
46513              }
46514            );
46515          } catch (o2) {
46516            if (t2) return;
46517            t2 = true, f(n2, o2);
46518          }
46519        }
46520        var a = setTimeout;
46521        o.prototype["catch"] = function(e2) {
46522          return this.then(null, e2);
46523        }, o.prototype.then = function(e2, n2) {
46524          var o2 = new this.constructor(t);
46525          return r(
46526            this,
46527            new (function(e3, n3, t2) {
46528              ;
46529              this.onFulfilled = "function" == typeof e3 ? e3 : null, this.onRejected = "function" == typeof n3 ? n3 : null, this.promise = t2;
46530            })(e2, n2, o2)
46531          ), o2;
46532        }, o.prototype["finally"] = e, o.all = function(e2) {
46533          return new o(function(t2, o2) {
46534            function r2(e3, n2) {
46535              try {
46536                if (n2 && ("object" == typeof n2 || "function" == typeof n2)) {
46537                  var u3 = n2.then;
46538                  if ("function" == typeof u3)
46539                    return void u3.call(
46540                      n2,
46541                      function(n3) {
46542                        r2(e3, n3);
46543                      },
46544                      o2
46545                    );
46546                }
46547                ;
46548                i2[e3] = n2, 0 == --f2 && t2(i2);
46549              } catch (c2) {
46550                o2(c2);
46551              }
46552            }
46553            if (!n(e2)) return o2(new TypeError("Promise.all accepts an array"));
46554            var i2 = Array.prototype.slice.call(e2);
46555            if (0 === i2.length) return t2([]);
46556            for (var f2 = i2.length, u2 = 0; i2.length > u2; u2++) r2(u2, i2[u2]);
46557          });
46558        }, o.resolve = function(e2) {
46559          return e2 && "object" == typeof e2 && e2.constructor === o ? e2 : new o(function(n2) {
46560            n2(e2);
46561          });
46562        }, o.reject = function(e2) {
46563          return new o(function(n2, t2) {
46564            t2(e2);
46565          });
46566        }, o.race = function(e2) {
46567          return new o(function(t2, r2) {
46568            if (!n(e2)) return r2(new TypeError("Promise.race accepts an array"));
46569            for (var i2 = 0, f2 = e2.length; f2 > i2; i2++) o.resolve(e2[i2]).then(t2, r2);
46570          });
46571        }, o._immediateFn = "function" == typeof setImmediate && function(e2) {
46572          setImmediate(e2);
46573        } || function(e2) {
46574          a(e2, 0);
46575        }, o._unhandledRejectionFn = function(e2) {
46576          void 0 !== console && console && console.warn("Possible Unhandled Promise Rejection:", e2);
46577        };
46578        var l = (function() {
46579          if ("undefined" != typeof self) return self;
46580          if ("undefined" != typeof window) return window;
46581          if ("undefined" != typeof global) return global;
46582          throw Error("unable to locate global object");
46583        })();
46584        "Promise" in l ? l.Promise.prototype["finally"] || (l.Promise.prototype["finally"] = e) : l.Promise = o;
46585      });
46586    }
46587  });
46588
46589  
46589// apps/base/assets/javascripts/vendor/scroll-up-bar.js
46590  var require_scroll_up_bar = __commonJS({
46591    "apps/base/assets/javascripts/vendor/scroll-up-bar.js"() {
46592      "use strict";
46593      init_esbuild_shims();
46594      (function($3) {
46595        "use strict";
46596        var _destroyFn;
46597        $3.scrollupbar = function($bar, options) {
46598          options = $3.extend({
46599            enterViewport: $3.noop,
46600            fullyEnterViewport: $3.noop,
46601            exitViewport: $3.noop,
46602            partiallyExitViewport: $3.noop
46603          }, options);
46604          function isFullyInViewport() {
46605            return $window.scrollTop() <= $bar.offset().top;
46606          }
46607          function isInViewport() {
46608            return $window.scrollTop() < $bar.offset().top + $bar.outerHeight();
46609          }
46610          var $window = $3(window), $document = $3(document), minY = $bar.css("position") == "fixed" ? 0 : $bar.offset().top, lastY = $window.scrollTop(), initialPosTop = $bar.position().top, iOS = /(iPad|iPhone|iPod)/g.test(navigator.userAgent), timeout;
46611          $3.scrollupbar.isInViewport = isInViewport();
46612          $3.scrollupbar.isFullyInViewport = isFullyInViewport();
46613          if (!iOS) {
46614            $window.on("scroll.scrollupbar", function() {
46615              var y = $window.scrollTop(), barHeight = $bar.outerHeight();
46616              if (y < 0 || y > $document.height() - $window.height()) {
46617                return;
46618              }
46619              if (timeout) {
46620                clearTimeout(timeout);
46621              }
46622              if (y < lastY) {
46623                if (!$3.scrollupbar.isInViewport && lastY - barHeight >= minY) {
46624                  $bar.css("top", lastY - barHeight);
46625                  $3.scrollupbar.isInViewport = true;
46626                  options.enterViewport();
46627                }
46628                if (isFullyInViewport()) {
46629                  if (y >= minY) {
46630                    $bar.css({
46631                      "position": "fixed",
46632                      "top": 0
46633                    });
46634                  } else {
46635                    $bar.css({
46636                      "position": "absolute",
46637                      "top": initialPosTop
46638                    });
46639                  }
46640                  if (!$3.scrollupbar.isFullyInViewport) {
46641                    $3.scrollupbar.isFullyInViewport = true;
46642                    options.fullyEnterViewport();
46643                  }
46644                }
46645                timeout = setTimeout(function() {
46646                  if (!isFullyInViewport()) {
46647                    $bar.css({
46648                      "position": "fixed",
46649                      "top": $bar.offset().top - y
46650                    });
46651                    $bar.animate({ "top": 0 }, 100, function() {
46652                      $3.scrollupbar.isFullyInViewport = true;
46653                      options.fullyEnterViewport();
46654                    });
46655                  }
46656                }, 400);
46657              } else if (y > lastY) {
46658                if ($3.scrollupbar.isFullyInViewport) {
46659                  $bar.css({
46660                    "position": "absolute",
46661                    "top": lastY > minY ? lastY : initialPosTop
46662                  });
46663                  if (!isFullyInViewport()) {
46664                    $3.scrollupbar.isFullyInViewport = false;
46665                    options.partiallyExitViewport();
46666                  }
46667                }
46668                if ($3.scrollupbar.isInViewport && !isInViewport()) {
46669                  $3.scrollupbar.isInViewport = false;
46670                  options.exitViewport();
46671                }
46672                timeout = setTimeout(function() {
46673                  if (isInViewport() && y - barHeight >= minY) {
46674                    $bar.animate({ "top": y - barHeight }, 100, function() {
46675                      $3.scrollupbar.isInViewport = false;
46676                      options.exitViewport();
46677                    });
46678                  }
46679                }, 400);
46680              }
46681              lastY = y;
46682            });
46683          } else {
46684            $window.on("touchstart.scrollupbar", function() {
46685              lastY = $window.scrollTop();
46686            });
46687            $window.on("touchend.scrollupbar", function() {
46688              var y = $window.scrollTop();
46689              if (y < lastY || y - $bar.outerHeight() < minY) {
46690                if (y <= minY) {
46691                  $bar.css({
46692                    "position": "absolute",
46693                    "top": initialPosTop
46694                  });
46695                  $bar.show(function() {
46696                    $3.scrollupbar.isInViewport = true;
46697                    $3.scrollupbar.isFullyInViewport = true;
46698                    options.enterViewport();
46699                    options.fullyEnterViewport();
46700                  });
46701                } else {
46702                  $bar.css({
46703                    "position": "fixed",
46704                    "top": 0
46705                  });
46706                  $3.scrollupbar.isInViewport = true;
46707                  options.enterViewport();
46708                  $bar.slideDown(function() {
46709                    $3.scrollupbar.isFullyInViewport = true;
46710                    options.fullyEnterViewport();
46711                  });
46712                }
46713              } else if (y > lastY) {
46714                $3.scrollupbar.isFullyInViewport = false;
46715                options.partiallyExitViewport();
46716                $bar.slideUp(function() {
46717                  $3.scrollupbar.isInViewport = false;
46718                  options.exitViewport();
46719                });
46720              }
46721              lastY = y;
46722            });
46723          }
46724          _destroyFn = function() {
46725            $window.off(".scrollupbar");
46726            $bar.css({
46727              "position": "absolute",
46728              "top": initialPosTop
46729            });
46730          };
46731          return $bar;
46732        };
46733        $3.scrollupbar.destroy = function() {
46734          if (_destroyFn) {
46735            return _destroyFn();
46736          }
46737        };
46738        $3.fn.scrollupbar = function(options) {
46739          return $3.scrollupbar(this, options);
46740        };
46741      })(jQuery);
46742    }
46743  });
46744
46745  
46745// apps/base/assets/javascripts/vendor/swfobject.js
46746  var require_swfobject = __commonJS({
46747    "apps/base/assets/javascripts/vendor/swfobject.js"(exports, module) {
46748      "use strict";
46749      init_esbuild_shims();
46750      if (typeof deconcept == "undefined") {
46751        deconcept = new Object();
46752      }
46753      var deconcept;
46754      if (typeof deconcept.util == "undefined") {
46755        deconcept.util = new Object();
46756      }
46757      if (typeof deconcept.SWFObjectUtil == "undefined") {
46758        deconcept.SWFObjectUtil = new Object();
46759      }
46760      deconcept.SWFObject = function(_1, id, w, h, _5, c, _7, _8, _9, _a) {
46761        if (!document.getElementById) {
46762          return;
46763        }
46764        this.DETECT_KEY = _a ? _a : "detectflash";
46765        this.skipDetect = deconcept.util.getRequestParameter(this.DETECT_KEY);
46766        this.params = new Object();
46767        this.variables = new Object();
46768        this.attributes = new Array();
46769        if (_1) {
46770          this.setAttribute("swf", _1);
46771        }
46772        if (id) {
46773          this.setAttribute("id", id);
46774        }
46775        if (w) {
46776          this.setAttribute("width", w);
46777        }
46778        if (h) {
46779          this.setAttribute("height", h);
46780        }
46781        if (_5) {
46782          this.setAttribute("version", new deconcept.PlayerVersion(_5.toString().split(".")));
46783        }
46784        this.installedVer = deconcept.SWFObjectUtil.getPlayerVersion();
46785        if (!window.opera && document.all && this.installedVer.major > 7) {
46786          deconcept.SWFObject.doPrepUnload = true;
46787        }
46788        if (c) {
46789          this.addParam("bgcolor", c);
46790        }
46791        var q = _7 ? _7 : "high";
46792        this.addParam("quality", q);
46793        this.setAttribute("useExpressInstall", false);
46794        this.setAttribute("doExpressInstall", false);
46795        var _c = _8 ? _8 : window.location;
46796        this.setAttribute("xiRedirectUrl", _c);
46797        this.setAttribute("redirectUrl", "");
46798        if (_9) {
46799          this.setAttribute("redirectUrl", _9);
46800        }
46801      };
46802      deconcept.SWFObject.prototype = { useExpressInstall: function(_d) {
46803        this.xiSWFPath = !_d ? "expressinstall.swf" : _d;
46804        this.setAttribute("useExpressInstall", true);
46805      }, setAttribute: function(_e, _f) {
46806        this.attributes[_e] = _f;
46807      }, getAttribute: function(_10) {
46808        return this.attributes[_10];
46809      }, addParam: function(_11, _12) {
46810        this.params[_11] = _12;
46811      }, getParams: function() {
46812        return this.params;
46813      }, addVariable: function(_13, _14) {
46814        this.variables[_13] = _14;
46815      }, getVariable: function(_15) {
46816        return this.variables[_15];
46817      }, getVariables: function() {
46818        return this.variables;
46819      }, getVariablePairs: function() {
46820        var _16 = new Array();
46821        var key;
46822        var _18 = this.getVariables();
46823        for (key in _18) {
46824          _16[_16.length] = key + "=" + _18[key];
46825        }
46826        return _16;
46827      }, getSWFHTML: function() {
46828        var _19 = "";
46829        if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) {
46830          if (this.getAttribute("doExpressInstall")) {
46831            this.addVariable("MMplayerType", "PlugIn");
46832            this.setAttribute("swf", this.xiSWFPath);
46833          }
46834          _19 = '<embed type="application/x-shockwave-flash" src="' + this.getAttribute("swf") + '" width="' + this.getAttribute("width") + '" height="' + this.getAttribute("height") + '" style="' + this.getAttribute("style") + '"';
46835          _19 += ' id="' + this.getAttribute("id") + '" name="' + this.getAttribute("id") + '" ';
46836          var _1a = this.getParams();
46837          for (var key in _1a) {
46838            _19 += [key] + '="' + _1a[key] + '" ';
46839          }
46840          var _1c = this.getVariablePairs().join("&");
46841          if (_1c.length > 0) {
46842            _19 += 'flashvars="' + _1c + '"';
46843          }
46844          _19 += "/>";
46845        } else {
46846          if (this.getAttribute("doExpressInstall")) {
46847            this.addVariable("MMplayerType", "ActiveX");
46848            this.setAttribute("swf", this.xiSWFPath);
46849          }
46850          _19 = '<object id="' + this.getAttribute("id") + '" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="' + this.getAttribute("width") + '" height="' + this.getAttribute("height") + '" style="' + this.getAttribute("style") + '">';
46851          _19 += '<param name="movie" value="' + this.getAttribute("swf") + '" />';
46852          var _1d = this.getParams();
46853          for (var key in _1d) {
46854            _19 += '<param name="' + key + '" value="' + _1d[key] + '" />';
46855          }
46856          var _1f = this.getVariablePairs().join("&");
46857          if (_1f.length > 0) {
46858            _19 += '<param name="flashvars" value="' + _1f + '" />';
46859          }
46860          _19 += "</object>";
46861        }
46862        return _19;
46863      }, write: function(_20) {
46864        if (this.getAttribute("useExpressInstall")) {
46865          var _21 = new deconcept.PlayerVersion([6, 0, 65]);
46866          if (this.installedVer.versionIsValid(_21) && !this.installedVer.versionIsValid(this.getAttribute("version"))) {
46867            this.setAttribute("doExpressInstall", true);
46868            this.addVariable("MMredirectURL", escape(this.getAttribute("xiRedirectUrl")));
46869            document.title = document.title.slice(0, 47) + " - Flash Player Installation";
46870            this.addVariable("MMdoctitle", document.title);
46871          }
46872        }
46873        if (this.skipDetect || this.getAttribute("doExpressInstall") || this.installedVer.versionIsValid(this.getAttribute("version"))) {
46874          var n = typeof _20 == "string" ? document.getElementById(_20) : _20;
46875          n.innerHTML = this.getSWFHTML();
46876          return true;
46877        } else {
46878          if (this.getAttribute("redirectUrl") != "") {
46879            document.location.replace(this.getAttribute("redirectUrl"));
46880          }
46881        }
46882        return false;
46883      } };
46884      deconcept.SWFObjectUtil.getPlayerVersion = function() {
46885        var _23 = new deconcept.PlayerVersion([0, 0, 0]);
46886        if (navigator.plugins && navigator.mimeTypes.length) {
46887          var x = navigator.plugins["Shockwave Flash"];
46888          if (x && x.description) {
46889            _23 = new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split("."));
46890          }
46891        } else {
46892          if (navigator.userAgent && navigator.userAgent.indexOf("Windows CE") >= 0) {
46893            var axo = 1;
46894            var _26 = 3;
46895            while (axo) {
46896              try {
46897                _26++;
46898                axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash." + _26);
46899                _23 = new deconcept.PlayerVersion([_26, 0, 0]);
46900              } catch (e) {
46901                axo = null;
46902              }
46903            }
46904          } else {
46905            try {
46906              var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
46907            } catch (e) {
46908              try {
46909                var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
46910                _23 = new deconcept.PlayerVersion([6, 0, 21]);
46911                axo.AllowScriptAccess = "always";
46912              } catch (e2) {
46913                if (_23.major == 6) {
46914                  return _23;
46915                }
46916              }
46917              try {
46918                axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
46919              } catch (e2) {
46920              }
46921            }
46922            if (axo != null) {
46923              _23 = new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));
46924            }
46925          }
46926        }
46927        return _23;
46928      };
46929      deconcept.PlayerVersion = function(_29) {
46930        this.major = _29[0] != null ? parseInt(_29[0]) : 0;
46931        this.minor = _29[1] != null ? parseInt(_29[1]) : 0;
46932        this.rev = _29[2] != null ? parseInt(_29[2]) : 0;
46933      };
46934      deconcept.PlayerVersion.prototype.versionIsValid = function(fv) {
46935        if (this.major < fv.major) {
46936          return false;
46937        }
46938        if (this.major > fv.major) {
46939          return true;
46940        }
46941        if (this.minor < fv.minor) {
46942          return false;
46943        }
46944        if (this.minor > fv.minor) {
46945          return true;
46946        }
46947        if (this.rev < fv.rev) {
46948          return false;
46949        }
46950        return true;
46951      };
46952      deconcept.util = { getRequestParameter: function(_2b) {
46953        var q = document.location.search || document.location.hash;
46954        if (_2b == null) {
46955          return q;
46956        }
46957        if (q) {
46958          var _2d = q.substring(1).split("&");
46959          for (var i = 0; i < _2d.length; i++) {
46960            if (_2d[i].substring(0, _2d[i].indexOf("=")) == _2b) {
46961              return _2d[i].substring(_2d[i].indexOf("=") + 1);
46962            }
46963          }
46964        }
46965        return "";
46966      } };
46967      deconcept.SWFObjectUtil.cleanupSWFs = function() {
46968        var _2f = document.getElementsByTagName("OBJECT");
46969        for (var i = _2f.length - 1; i >= 0; i--) {
46970          _2f[i].style.display = "none";
46971          for (var x in _2f[i]) {
46972            if (typeof _2f[i][x] == "function") {
46973              _2f[i][x] = function() {
46974              };
46975            }
46976          }
46977        }
46978      };
46979      if (deconcept.SWFObject.doPrepUnload) {
46980        if (!deconcept.unloadSet) {
46981          deconcept.SWFObjectUtil.prepUnload = function() {
46982            __flash_unloadHandler = function() {
46983            };
46984            __flash_savedUnloadHandler = function() {
46985            };
46986            Event.observe(window, "unload", deconcept.SWFObjectUtil.cleanupSWFs);
46987          };
46988          Event.observe(window, "beforeunload", deconcept.SWFObjectUtil.prepUnload);
46989          deconcept.unloadSet = true;
46990        }
46991      }
46992      if (!document.getElementById && document.all) {
46993        document.getElementById = function(id) {
46994          return document.all[id];
46995        };
46996      }
46997      var getQueryParamValue = deconcept.util.getRequestParameter;
46998      var FlashObject = deconcept.SWFObject;
46999      var SWFObject = deconcept.SWFObject;
47000      module.exports = deconcept.SWFObject;
47001    }
47002  });
47003
47004  
47004// apps/base/assets/javascripts/vendor/table-head-fixer.js
47005  var require_table_head_fixer = __commonJS({
47006    "apps/base/assets/javascripts/vendor/table-head-fixer.js"() {
47007      "use strict";
47008      init_esbuild_shims();
47009      (function($3) {
47010        $3.fn.tableHeadFixer = function(param) {
47011          var defaults = {
47012            head: true,
47013            foot: false,
47014            left: 0,
47015            right: 0,
47016            "z-index": 0
47017          };
47018          var settings = $3.extend({}, defaults, param);
47019          return this.each(function() {
47020            settings.table = this;
47021            settings.parent = $3(settings.table).parent();
47022            setParent();
47023            if (settings.head == true)
47024              fixHead();
47025            if (settings.foot == true)
47026              fixFoot();
47027            if (settings.left > 0)
47028              fixLeft();
47029            if (settings.right > 0)
47030              fixRight();
47031            setCorner();
47032            $3(settings.parent).trigger("scroll");
47033            $3(window).resize(function() {
47034              $3(settings.parent).trigger("scroll");
47035            });
47036          });
47037          function setCorner() {
47038            var table = $3(settings.table);
47039            if (settings.head) {
47040              if (settings.left > 0) {
47041                var tr = table.find("thead tr");
47042                tr.each(function(k, row) {
47043                  solverLeftColspan(row, function(cell) {
47044                    $3(cell).css("z-index", settings["z-index"] + 1);
47045                  });
47046                });
47047              }
47048              if (settings.right > 0) {
47049                var tr = table.find("thead tr");
47050                tr.each(function(k, row) {
47051                  solveRightColspan(row, function(cell) {
47052                    $3(cell).css("z-index", settings["z-index"] + 1);
47053                  });
47054                });
47055              }
47056            }
47057            if (settings.foot) {
47058              if (settings.left > 0) {
47059                var tr = table.find("tfoot tr");
47060                tr.each(function(k, row) {
47061                  solverLeftColspan(row, function(cell) {
47062                    $3(cell).css("z-index", settings["z-index"]);
47063                  });
47064                });
47065              }
47066              if (settings.right > 0) {
47067                var tr = table.find("tfoot tr");
47068                tr.each(function(k, row) {
47069                  solveRightColspan(row, function(cell) {
47070                    $3(cell).css("z-index", settings["z-index"]);
47071                  });
47072                });
47073              }
47074            }
47075          }
47076          function setParent() {
47077            var parent = $3(settings.parent);
47078            var table = $3(settings.table);
47079            parent.append(table);
47080            parent.css({
47081              "overflow-x": "auto",
47082              "overflow-y": "auto"
47083            });
47084            parent.scroll(function() {
47085              var scrollWidth = parent[0].scrollWidth;
47086              var clientWidth = parent[0].clientWidth;
47087              var scrollHeight = parent[0].scrollHeight;
47088              var clientHeight = parent[0].clientHeight;
47089              var top = parent.scrollTop();
47090              var left = parent.scrollLeft();
47091              if (settings.head)
47092                this.find("thead tr > *").css("top", top);
47093              if (settings.foot)
47094                this.find("tfoot tr > *").css("bottom", scrollHeight - clientHeight - top);
47095              if (settings.left > 0)
47096                settings.leftColumns.css("left", left);
47097              if (settings.right > 0)
47098                settings.rightColumns.css("right", scrollWidth - clientWidth - left);
47099            }.bind(table));
47100          }
47101          function fixHead() {
47102            var thead = $3(settings.table).find("thead");
47103            var tr = thead.find("tr");
47104            var cells = thead.find("tr > *");
47105            setBackground(cells);
47106            cells.css({
47107              "position": "relative"
47108            });
47109          }
47110          function fixFoot() {
47111            var tfoot = $3(settings.table).find("tfoot");
47112            var tr = tfoot.find("tr");
47113            var cells = tfoot.find("tr > *");
47114            setBackground(cells);
47115            cells.css({
47116              "position": "relative"
47117            });
47118          }
47119          function fixLeft() {
47120            var table = $3(settings.table);
47121            settings.leftColumns = $3();
47122            var tr = table.find("tr");
47123            tr.each(function(k, row) {
47124              solverLeftColspan(row, function(cell) {
47125                settings.leftColumns = settings.leftColumns.add(cell);
47126              });
47127            });
47128            var column = settings.leftColumns;
47129            column.each(function(k, cell) {
47130              var cell = $3(cell);
47131              setBackground(cell);
47132              cell.css({
47133                "position": "relative"
47134              });
47135            });
47136          }
47137          function fixRight() {
47138            var table = $3(settings.table);
47139            var fixColumn = settings.right;
47140            settings.rightColumns = $3();
47141            var tr = table.find("tr");
47142            tr.each(function(k, row) {
47143              solveRightColspan(row, function(cell) {
47144                settings.rightColumns = settings.rightColumns.add(cell);
47145              });
47146            });
47147            var column = settings.rightColumns;
47148            column.each(function(k, cell) {
47149              var cell = $3(cell);
47150              setBackground(cell);
47151              cell.css({
47152                "position": "relative"
47153              });
47154            });
47155          }
47156          function setBackground(elements) {
47157            elements.each(function(k, element) {
47158              var element = $3(element);
47159              var parent = $3(element).parent();
47160              var elementBackground = element.css("background-color");
47161              elementBackground = elementBackground == "transparent" || elementBackground == "rgba(0, 0, 0, 0)" ? null : elementBackground;
47162              var parentBackground = parent.css("background-color");
47163              parentBackground = parentBackground == "transparent" || parentBackground == "rgba(0, 0, 0, 0)" ? null : parentBackground;
47164              var background = parentBackground ? parentBackground : "white";
47165              background = elementBackground ? elementBackground : background;
47166              element.css("background-color", background);
47167            });
47168          }
47169          function solverLeftColspan(row, action) {
47170            var fixColumn = settings.left;
47171            var inc = 1;
47172            for (var i = 1; i <= fixColumn; i = i + inc) {
47173              var nth = inc > 1 ? i - 1 : i;
47174              var cell = $3(row).find("> *:nth-child(" + nth + ")");
47175              var colspan = cell.prop("colspan");
47176              if (cell.cellPos().left < fixColumn) {
47177                action(cell);
47178              }
47179              inc = colspan;
47180            }
47181          }
47182          function solveRightColspan(row, action) {
47183            var fixColumn = settings.right;
47184            var inc = 1;
47185            for (var i = 1; i <= fixColumn; i = i + inc) {
47186              var nth = inc > 1 ? i - 1 : i;
47187              var cell = $3(row).find("> *:nth-last-child(" + nth + ")");
47188              var colspan = cell.prop("colspan");
47189              action(cell);
47190              inc = colspan;
47191            }
47192          }
47193        };
47194      })(jQuery);
47195      (function($3) {
47196        function scanTable($table) {
47197          var m = [];
47198          $table.children("tr").each(function(y, row) {
47199            $3(row).children("td, th").each(function(x, cell) {
47200              var $cell = $3(cell), cspan = $cell.attr("colspan") | 0, rspan = $cell.attr("rowspan") | 0, tx, ty;
47201              cspan = cspan ? cspan : 1;
47202              rspan = rspan ? rspan : 1;
47203              for (; m[y] && m[y][x]; ++x) ;
47204              for (tx = x; tx < x + cspan; ++tx) {
47205                for (ty = y; ty < y + rspan; ++ty) {
47206                  if (!m[ty]) {
47207                    m[ty] = [];
47208                  }
47209                  m[ty][tx] = true;
47210                }
47211              }
47212              var pos = { top: y, left: x };
47213              $cell.data("cellPos", pos);
47214            });
47215          });
47216        }
47217        ;
47218        $3.fn.cellPos = function(rescan) {
47219          var $cell = this.first(), pos = $cell.data("cellPos");
47220          if (!pos || rescan) {
47221            var $table = $cell.closest("table, thead, tbody, tfoot");
47222            scanTable($table);
47223          }
47224          pos = $cell.data("cellPos");
47225          return pos;
47226        };
47227      })(jQuery);
47228    }
47229  });
47230
47231  
47231// apps/base/assets/javascripts/vendor/webfontloader.js
47232  var require_webfontloader = __commonJS({
47233    "apps/base/assets/javascripts/vendor/webfontloader.js"(exports, module) {
47234      "use strict";
47235      init_esbuild_shims();
47236      (function() {
47237        function aa(a, b, d) {
47238          return a.call.apply(a.bind, arguments);
47239        }
47240        function ba(a, b, d) {
47241          if (!a) throw Error();
47242          if (2 < arguments.length) {
47243            var c = Array.prototype.slice.call(arguments, 2);
47244            return function() {
47245              var d2 = Array.prototype.slice.call(arguments);
47246              Array.prototype.unshift.apply(d2, c);
47247              return a.apply(b, d2);
47248            };
47249          }
47250          return function() {
47251            return a.apply(b, arguments);
47252          };
47253        }
47254        function p(a, b, d) {
47255          p = Function.prototype.bind && -1 != Function.prototype.bind.toString().indexOf("native code") ? aa : ba;
47256          return p.apply(null, arguments);
47257        }
47258        var q = Date.now || function() {
47259          return +/* @__PURE__ */ new Date();
47260        };
47261        function ca(a, b) {
47262          this.a = a;
47263          this.m = b || a;
47264          this.c = this.m.document;
47265        }
47266        var da = !!window.FontFace;
47267        function t2(a, b, d, c) {
47268          b = a.c.createElement(b);
47269          if (d) for (var e in d) d.hasOwnProperty(e) && ("style" == e ? b.style.cssText = d[e] : b.setAttribute(e, d[e]));
47270          c && b.appendChild(a.c.createTextNode(c));
47271          return b;
47272        }
47273        function u(a, b, d) {
47274          a = a.c.getElementsByTagName(b)[0];
47275          a || (a = document.documentElement);
47276          a.insertBefore(d, a.lastChild);
47277        }
47278        function v(a) {
47279          a.parentNode && a.parentNode.removeChild(a);
47280        }
47281        function w(a, b, d) {
47282          b = b || [];
47283          d = d || [];
47284          for (var c = a.className.split(/\s+/), e = 0; e < b.length; e += 1) {
47285            for (var f = false, g = 0; g < c.length; g += 1) if (b[e] === c[g]) {
47286              f = true;
47287              break;
47288            }
47289            f || c.push(b[e]);
47290          }
47291          b = [];
47292          for (e = 0; e < c.length; e += 1) {
47293            f = false;
47294            for (g = 0; g < d.length; g += 1) if (c[e] === d[g]) {
47295              f = true;
47296              break;
47297            }
47298            f || b.push(c[e]);
47299          }
47300          a.className = b.join(" ").replace(/\s+/g, " ").replace(/^\s+|\s+$/, "");
47301        }
47302        function y(a, b) {
47303          for (var d = a.className.split(/\s+/), c = 0, e = d.length; c < e; c++) if (d[c] == b) return true;
47304          return false;
47305        }
47306        function z(a) {
47307          if ("string" === typeof a.f) return a.f;
47308          var b = a.m.location.protocol;
47309          "about:" == b && (b = a.a.location.protocol);
47310          return "https:" == b ? "https:" : "http:";
47311        }
47312        function ea(a) {
47313          return a.m.location.hostname || a.a.location.hostname;
47314        }
47315        function A(a, b, d) {
47316          function c() {
47317            k && e && f && (k(g), k = null);
47318          }
47319          b = t2(a, "link", { rel: "stylesheet", href: b, media: "all" });
47320          var e = false, f = true, g = null, k = d || null;
47321          da ? (b.onload = function() {
47322            e = true;
47323            c();
47324          }, b.onerror = function() {
47325            e = true;
47326            g = Error("Stylesheet failed to load");
47327            c();
47328          }) : setTimeout(function() {
47329            e = true;
47330            c();
47331          }, 0);
47332          u(a, "head", b);
47333        }
47334        function B(a, b, d, c) {
47335          var e = a.c.getElementsByTagName("head")[0];
47336          if (e) {
47337            var f = t2(a, "script", { src: b }), g = false;
47338            f.onload = f.onreadystatechange = function() {
47339              g || this.readyState && "loaded" != this.readyState && "complete" != this.readyState || (g = true, d && d(null), f.onload = f.onreadystatechange = null, "HEAD" == f.parentNode.tagName && e.removeChild(f));
47340            };
47341            e.appendChild(f);
47342            setTimeout(function() {
47343              g || (g = true, d && d(Error("Script load timeout")));
47344            }, c || 5e3);
47345            return f;
47346          }
47347          return null;
47348        }
47349        ;
47350        function C() {
47351          this.a = 0;
47352          this.c = null;
47353        }
47354        function D(a) {
47355          a.a++;
47356          return function() {
47357            a.a--;
47358            E(a);
47359          };
47360        }
47361        function F(a, b) {
47362          a.c = b;
47363          E(a);
47364        }
47365        function E(a) {
47366          0 == a.a && a.c && (a.c(), a.c = null);
47367        }
47368        ;
47369        function G(a) {
47370          this.a = a || "-";
47371        }
47372        G.prototype.c = function(a) {
47373          for (var b = [], d = 0; d < arguments.length; d++) b.push(arguments[d].replace(/[\W_]+/g, "").toLowerCase());
47374          return b.join(this.a);
47375        };
47376        function H(a, b) {
47377          this.c = a;
47378          this.f = 4;
47379          this.a = "n";
47380          var d = (b || "n4").match(/^([nio])([1-9])$/i);
47381          d && (this.a = d[1], this.f = parseInt(d[2], 10));
47382        }
47383        function fa(a) {
47384          return I(a) + " " + (a.f + "00") + " 300px " + J(a.c);
47385        }
47386        function J(a) {
47387          var b = [];
47388          a = a.split(/,\s*/);
47389          for (var d = 0; d < a.length; d++) {
47390            var c = a[d].replace(/['"]/g, "");
47391            -1 != c.indexOf(" ") || /^\d/.test(c) ? b.push("'" + c + "'") : b.push(c);
47392          }
47393          return b.join(",");
47394        }
47395        function K(a) {
47396          return a.a + a.f;
47397        }
47398        function I(a) {
47399          var b = "normal";
47400          "o" === a.a ? b = "oblique" : "i" === a.a && (b = "italic");
47401          return b;
47402        }
47403        function ga(a) {
47404          var b = 4, d = "n", c = null;
47405          a && ((c = a.match(/(normal|oblique|italic)/i)) && c[1] && (d = c[1].substr(0, 1).toLowerCase()), (c = a.match(/([1-9]00|normal|bold)/i)) && c[1] && (/bold/i.test(c[1]) ? b = 7 : /[1-9]00/.test(c[1]) && (b = parseInt(c[1].substr(0, 1), 10))));
47406          return d + b;
47407        }
47408        ;
47409        function ha(a, b) {
47410          this.c = a;
47411          this.f = a.m.document.documentElement;
47412          this.h = b;
47413          this.a = new G("-");
47414          this.j = false !== b.events;
47415          this.g = false !== b.classes;
47416        }
47417        function ia(a) {
47418          a.g && w(a.f, [a.a.c("wf", "loading")]);
47419          L(a, "loading");
47420        }
47421        function M(a) {
47422          if (a.g) {
47423            var b = y(a.f, a.a.c("wf", "active")), d = [], c = [a.a.c("wf", "loading")];
47424            b || d.push(a.a.c("wf", "inactive"));
47425            w(a.f, d, c);
47426          }
47427          L(a, "inactive");
47428        }
47429        function L(a, b, d) {
47430          if (a.j && a.h[b]) if (d) a.h[b](d.c, K(d));
47431          else a.h[b]();
47432        }
47433        ;
47434        function ja() {
47435          this.c = {};
47436        }
47437        function ka(a, b, d) {
47438          var c = [], e;
47439          for (e in b) if (b.hasOwnProperty(e)) {
47440            var f = a.c[e];
47441            f && c.push(f(b[e], d));
47442          }
47443          return c;
47444        }
47445        ;
47446        function N(a, b) {
47447          this.c = a;
47448          this.f = b;
47449          this.a = t2(this.c, "span", { "aria-hidden": "true" }, this.f);
47450        }
47451        function O(a) {
47452          u(a.c, "body", a.a);
47453        }
47454        function P(a) {
47455          return "display:block;position:absolute;top:-9999px;left:-9999px;font-size:300px;width:auto;height:auto;line-height:normal;margin:0;padding:0;font-variant:normal;white-space:nowrap;font-family:" + J(a.c) + ";" + ("font-style:" + I(a) + ";font-weight:" + (a.f + "00") + ";");
47456        }
47457        ;
47458        function Q(a, b, d, c, e, f) {
47459          this.g = a;
47460          this.j = b;
47461          this.a = c;
47462          this.c = d;
47463          this.f = e || 3e3;
47464          this.h = f || void 0;
47465        }
47466        Q.prototype.start = function() {
47467          var a = this.c.m.document, b = this, d = q(), c = new Promise(function(c2, e2) {
47468            function k() {
47469              q() - d >= b.f ? e2() : a.fonts.load(fa(b.a), b.h).then(function(a2) {
47470                1 <= a2.length ? c2() : setTimeout(k, 25);
47471              }, function() {
47472                e2();
47473              });
47474            }
47475            k();
47476          }), e = new Promise(function(a2, c2) {
47477            setTimeout(c2, b.f);
47478          });
47479          Promise.race([e, c]).then(function() {
47480            b.g(b.a);
47481          }, function() {
47482            b.j(b.a);
47483          });
47484        };
47485        function R(a, b, d, c, e, f, g) {
47486          this.v = a;
47487          this.B = b;
47488          this.c = d;
47489          this.a = c;
47490          this.s = g || "BESbswy";
47491          this.f = {};
47492          this.w = e || 3e3;
47493          this.u = f || null;
47494          this.o = this.j = this.h = this.g = null;
47495          this.g = new N(this.c, this.s);
47496          this.h = new N(this.c, this.s);
47497          this.j = new N(this.c, this.s);
47498          this.o = new N(this.c, this.s);
47499          a = new H(this.a.c + ",serif", K(this.a));
47500          a = P(a);
47501          this.g.a.style.cssText = a;
47502          a = new H(this.a.c + ",sans-serif", K(this.a));
47503          a = P(a);
47504          this.h.a.style.cssText = a;
47505          a = new H("serif", K(this.a));
47506          a = P(a);
47507          this.j.a.style.cssText = a;
47508          a = new H("sans-serif", K(this.a));
47509          a = P(a);
47510          this.o.a.style.cssText = a;
47511          O(this.g);
47512          O(this.h);
47513          O(this.j);
47514          O(this.o);
47515        }
47516        var S = { D: "serif", C: "sans-serif" }, T = null;
47517        function U() {
47518          if (null === T) {
47519            var a = /AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent);
47520            T = !!a && (536 > parseInt(a[1], 10) || 536 === parseInt(a[1], 10) && 11 >= parseInt(a[2], 10));
47521          }
47522          return T;
47523        }
47524        R.prototype.start = function() {
47525          this.f.serif = this.j.a.offsetWidth;
47526          this.f["sans-serif"] = this.o.a.offsetWidth;
47527          this.A = q();
47528          la(this);
47529        };
47530        function ma(a, b, d) {
47531          for (var c in S) if (S.hasOwnProperty(c) && b === a.f[S[c]] && d === a.f[S[c]]) return true;
47532          return false;
47533        }
47534        function la(a) {
47535          var b = a.g.a.offsetWidth, d = a.h.a.offsetWidth, c;
47536          (c = b === a.f.serif && d === a.f["sans-serif"]) || (c = U() && ma(a, b, d));
47537          c ? q() - a.A >= a.w ? U() && ma(a, b, d) && (null === a.u || a.u.hasOwnProperty(a.a.c)) ? V(a, a.v) : V(a, a.B) : na(a) : V(a, a.v);
47538        }
47539        function na(a) {
47540          setTimeout(p(function() {
47541            la(this);
47542          }, a), 50);
47543        }
47544        function V(a, b) {
47545          setTimeout(p(function() {
47546            v(this.g.a);
47547            v(this.h.a);
47548            v(this.j.a);
47549            v(this.o.a);
47550            b(this.a);
47551          }, a), 0);
47552        }
47553        ;
47554        function W(a, b, d) {
47555          this.c = a;
47556          this.a = b;
47557          this.f = 0;
47558          this.o = this.j = false;
47559          this.s = d;
47560        }
47561        var X = null;
47562        W.prototype.g = function(a) {
47563          var b = this.a;
47564          b.g && w(b.f, [b.a.c("wf", a.c, K(a).toString(), "active")], [b.a.c("wf", a.c, K(a).toString(), "loading"), b.a.c("wf", a.c, K(a).toString(), "inactive")]);
47565          L(b, "fontactive", a);
47566          this.o = true;
47567          oa(this);
47568        };
47569        W.prototype.h = function(a) {
47570          var b = this.a;
47571          if (b.g) {
47572            var d = y(b.f, b.a.c("wf", a.c, K(a).toString(), "active")), c = [], e = [b.a.c("wf", a.c, K(a).toString(), "loading")];
47573            d || c.push(b.a.c("wf", a.c, K(a).toString(), "inactive"));
47574            w(b.f, c, e);
47575          }
47576          L(b, "fontinactive", a);
47577          oa(this);
47578        };
47579        function oa(a) {
47580          0 == --a.f && a.j && (a.o ? (a = a.a, a.g && w(a.f, [a.a.c("wf", "active")], [a.a.c("wf", "loading"), a.a.c("wf", "inactive")]), L(a, "active")) : M(a.a));
47581        }
47582        ;
47583        function pa(a) {
47584          this.j = a;
47585          this.a = new ja();
47586          this.h = 0;
47587          this.f = this.g = true;
47588        }
47589        pa.prototype.load = function(a) {
47590          this.c = new ca(this.j, a.context || this.j);
47591          this.g = false !== a.events;
47592          this.f = false !== a.classes;
47593          qa(this, new ha(this.c, a), a);
47594        };
47595        function ra(a, b, d, c, e) {
47596          var f = 0 == --a.h;
47597          (a.f || a.g) && setTimeout(function() {
47598            var a2 = e || null, k = c || null || {};
47599            if (0 === d.length && f) M(b.a);
47600            else {
47601              b.f += d.length;
47602              f && (b.j = f);
47603              var h, m = [];
47604              for (h = 0; h < d.length; h++) {
47605                var l = d[h], n = k[l.c], r = b.a, x = l;
47606                r.g && w(r.f, [r.a.c("wf", x.c, K(x).toString(), "loading")]);
47607                L(r, "fontloading", x);
47608                r = null;
47609                null === X && (X = window.FontFace ? (x = /Gecko.*Firefox\/(\d+)/.exec(window.navigator.userAgent)) ? 42 < parseInt(x[1], 10) : true : false);
47610                X ? r = new Q(p(b.g, b), p(b.h, b), b.c, l, b.s, n) : r = new R(
47611                  p(b.g, b),
47612                  p(b.h, b),
47613                  b.c,
47614                  l,
47615                  b.s,
47616                  a2,
47617                  n
47618                );
47619                m.push(r);
47620              }
47621              for (h = 0; h < m.length; h++) m[h].start();
47622            }
47623          }, 0);
47624        }
47625        function qa(a, b, d) {
47626          var c = [], e = d.timeout;
47627          ia(b);
47628          var c = ka(a.a, d, a.c), f = new W(a.c, b, e);
47629          a.h = c.length;
47630          b = 0;
47631          for (d = c.length; b < d; b++) c[b].load(function(b2, c2, d2) {
47632            ra(a, f, b2, c2, d2);
47633          });
47634        }
47635        ;
47636        function sa(a, b) {
47637          this.c = a;
47638          this.a = b;
47639        }
47640        function ta(a, b, d) {
47641          var c = z(a.c);
47642          a = (a.a.api || "fast.fonts.net/jsapi").replace(/^.*http(s?):(\/\/)?/, "");
47643          return c + "//" + a + "/" + b + ".js" + (d ? "?v=" + d : "");
47644        }
47645        sa.prototype.load = function(a) {
47646          function b() {
47647            if (e["__mti_fntLst" + d]) {
47648              var c2 = e["__mti_fntLst" + d](), g = [], k;
47649              if (c2) for (var h = 0; h < c2.length; h++) {
47650                var m = c2[h].fontfamily;
47651                void 0 != c2[h].fontStyle && void 0 != c2[h].fontWeight ? (k = c2[h].fontStyle + c2[h].fontWeight, g.push(new H(m, k))) : g.push(new H(m));
47652              }
47653              a(g);
47654            } else setTimeout(function() {
47655              b();
47656            }, 50);
47657          }
47658          var d = this.a.projectId, c = this.a.version;
47659          if (d) {
47660            var e = this.c.m;
47661            B(this.c, ta(this, d, c), function(c2) {
47662              c2 ? a([]) : b();
47663            }).id = "__MonotypeAPIScript__" + d;
47664          } else a([]);
47665        };
47666        function ua(a, b) {
47667          this.c = a;
47668          this.a = b;
47669        }
47670        ua.prototype.load = function(a) {
47671          var b, d, c = this.a.urls || [], e = this.a.families || [], f = this.a.testStrings || {}, g = new C();
47672          b = 0;
47673          for (d = c.length; b < d; b++) A(this.c, c[b], D(g));
47674          var k = [];
47675          b = 0;
47676          for (d = e.length; b < d; b++) if (c = e[b].split(":"), c[1]) for (var h = c[1].split(","), m = 0; m < h.length; m += 1) k.push(new H(c[0], h[m]));
47677          else k.push(new H(c[0]));
47678          F(g, function() {
47679            a(k, f);
47680          });
47681        };
47682        function va(a, b, d) {
47683          a ? this.c = a : this.c = b + wa;
47684          this.a = [];
47685          this.f = [];
47686          this.g = d || "";
47687        }
47688        var wa = "//fonts.googleapis.com/css";
47689        function xa(a, b) {
47690          for (var d = b.length, c = 0; c < d; c++) {
47691            var e = b[c].split(":");
47692            3 == e.length && a.f.push(e.pop());
47693            var f = "";
47694            2 == e.length && "" != e[1] && (f = ":");
47695            a.a.push(e.join(f));
47696          }
47697        }
47698        function ya(a) {
47699          if (0 == a.a.length) throw Error("No fonts to load!");
47700          if (-1 != a.c.indexOf("kit=")) return a.c;
47701          for (var b = a.a.length, d = [], c = 0; c < b; c++) d.push(a.a[c].replace(/ /g, "+"));
47702          b = a.c + "?family=" + d.join("%7C");
47703          0 < a.f.length && (b += "&subset=" + a.f.join(","));
47704          0 < a.g.length && (b += "&text=" + encodeURIComponent(a.g));
47705          return b;
47706        }
47707        ;
47708        function za(a) {
47709          this.f = a;
47710          this.a = [];
47711          this.c = {};
47712        }
47713        var Aa = { latin: "BESbswy", cyrillic: "\u0439\u044F\u0416", greek: "\u03B1\u03B2\u03A3", khmer: "\u1780\u1781\u1782", Hanuman: "\u1780\u1781\u1782" }, Ba = { thin: "1", extralight: "2", "extra-light": "2", ultralight: "2", "ultra-light": "2", light: "3", regular: "4", book: "4", medium: "5", "semi-bold": "6", semibold: "6", "demi-bold": "6", demibold: "6", bold: "7", "extra-bold": "8", extrabold: "8", "ultra-bold": "8", ultrabold: "8", black: "9", heavy: "9", l: "3", r: "4", b: "7" }, Ca = { i: "i", italic: "i", n: "n", normal: "n" }, Da = /^(thin|(?:(?:extra|ultra)-?)?light|regular|book|medium|(?:(?:semi|demi|extra|ultra)-?)?bold|black|heavy|l|r|b|[1-9]00)?(n|i|normal|italic)?$/;
47714        function Ea(a) {
47715          for (var b = a.f.length, d = 0; d < b; d++) {
47716            var c = a.f[d].split(":"), e = c[0].replace(/\+/g, " "), f = ["n4"];
47717            if (2 <= c.length) {
47718              var g;
47719              var k = c[1];
47720              g = [];
47721              if (k) for (var k = k.split(","), h = k.length, m = 0; m < h; m++) {
47722                var l;
47723                l = k[m];
47724                if (l.match(/^[\w-]+$/)) {
47725                  var n = Da.exec(l.toLowerCase());
47726                  if (null == n) l = "";
47727                  else {
47728                    l = n[2];
47729                    l = null == l || "" == l ? "n" : Ca[l];
47730                    n = n[1];
47731                    if (null == n || "" == n) n = "4";
47732                    else var r = Ba[n], n = r ? r : isNaN(n) ? "4" : n.substr(0, 1);
47733                    l = [l, n].join("");
47734                  }
47735                } else l = "";
47736                l && g.push(l);
47737              }
47738              0 < g.length && (f = g);
47739              3 == c.length && (c = c[2], g = [], c = c ? c.split(",") : g, 0 < c.length && (c = Aa[c[0]]) && (a.c[e] = c));
47740            }
47741            a.c[e] || (c = Aa[e]) && (a.c[e] = c);
47742            for (c = 0; c < f.length; c += 1) a.a.push(new H(e, f[c]));
47743          }
47744        }
47745        ;
47746        function Fa(a, b) {
47747          this.c = a;
47748          this.a = b;
47749        }
47750        var Ga = { Arimo: true, Cousine: true, Tinos: true };
47751        Fa.prototype.load = function(a) {
47752          var b = new C(), d = this.c, c = new va(this.a.api, z(d), this.a.text), e = this.a.families;
47753          xa(c, e);
47754          var f = new za(e);
47755          Ea(f);
47756          A(d, ya(c), D(b));
47757          F(b, function() {
47758            a(f.a, f.c, Ga);
47759          });
47760        };
47761        function Ha(a, b) {
47762          this.c = a;
47763          this.a = b;
47764        }
47765        Ha.prototype.load = function(a) {
47766          var b = this.a.id, d = this.c.m;
47767          b ? B(this.c, (this.a.api || "https://use.typekit.net") + "/" + b + ".js", function(b2) {
47768            if (b2) a([]);
47769            else if (d.Typekit && d.Typekit.config && d.Typekit.config.fn) {
47770              b2 = d.Typekit.config.fn;
47771              for (var e = [], f = 0; f < b2.length; f += 2) for (var g = b2[f], k = b2[f + 1], h = 0; h < k.length; h++) e.push(new H(g, k[h]));
47772              try {
47773                d.Typekit.load({ events: false, classes: false, async: true });
47774              } catch (m) {
47775              }
47776              a(e);
47777            }
47778          }, 2e3) : a([]);
47779        };
47780        function Ia(a, b) {
47781          this.c = a;
47782          this.f = b;
47783          this.a = [];
47784        }
47785        Ia.prototype.load = function(a) {
47786          var b = this.f.id, d = this.c.m, c = this;
47787          b ? (d.__webfontfontdeckmodule__ || (d.__webfontfontdeckmodule__ = {}), d.__webfontfontdeckmodule__[b] = function(b2, d2) {
47788            for (var g = 0, k = d2.fonts.length; g < k; ++g) {
47789              var h = d2.fonts[g];
47790              c.a.push(new H(h.name, ga("font-weight:" + h.weight + ";font-style:" + h.style)));
47791            }
47792            a(c.a);
47793          }, B(this.c, z(this.c) + (this.f.api || "//f.fontdeck.com/s/css/js/") + ea(this.c) + "/" + b + ".js", function(b2) {
47794            b2 && a([]);
47795          })) : a([]);
47796        };
47797        var Y = new pa(window);
47798        Y.a.c.custom = function(a, b) {
47799          return new ua(b, a);
47800        };
47801        Y.a.c.fontdeck = function(a, b) {
47802          return new Ia(b, a);
47803        };
47804        Y.a.c.monotype = function(a, b) {
47805          return new sa(b, a);
47806        };
47807        Y.a.c.typekit = function(a, b) {
47808          return new Ha(b, a);
47809        };
47810        Y.a.c.google = function(a, b) {
47811          return new Fa(b, a);
47812        };
47813        var Z = { load: p(Y.load, Y) };
47814        "function" === typeof define && define.amd ? define(function() {
47815          return Z;
47816        }) : "undefined" !== typeof module && module.exports ? module.exports = Z : (window.WebFont = Z, window.WebFontConfig && Y.load(window.WebFontConfig));
47817      })();
47818    }
47819  });
47820
47821  // apps/base/assets/javascripts/components/mobile.coffee
47822  var require_mobile = __commonJS({
47823    "apps/base/assets/javascripts/components/mobile.coffee"(exports) {
47824      "use strict";
47825      init_esbuild_shims();
47826      (function() {
47827        window.isMobile = function() {
47828          return window.breakpoint !== "desktop";
47829        };
47830      }).call(exports);
47831    }
47832  });
47833
47834  // apps/base/assets/javascripts/components/account_verification.coffee
47835  var require_account_verification = __commonJS({
47836    "apps/base/assets/javascripts/components/account_verification.coffee"(exports) {
47837      "use strict";
47838      init_esbuild_shims();
47839      (function() {
47840        jQuery("form.login").on("unverified_email", (event2) => {
47841          jQuery(".send-verify-email").removeClass("hidden");
47842          jQuery(".send-verify-email .email-field").val(jQuery(event2.target).find("input[name='emailAddress']").val());
47843          return jQuery(".login-form").addClass("hidden");
47844        });
47845        jQuery(".different-credentials").on("click", function(event2) {
47846          jQuery(".send-verify-email").addClass("hidden");
47847          return jQuery(".login-form").removeClass("hidden");
47848        });
47849        jQuery("form.send-verify-email").on("submit", function(event2) {
47850          jQuery("form.send-verify-email button").addClass("spinning");
47851          return jQuery("form.send-verify-email .error").hide();
47852        });
47853        jQuery("form.send-verify-email").on("ajax:success", function(event2) {
47854          jQuery("form.send-verify-email button").removeClass("spinning blue");
47855          jQuery("form.send-verify-email button").addClass("completed green");
47856          return jQuery("form.send-verify-email button span.label").html(jQuery("form.send-verify-email button span.label").attr("data-success"));
47857        });
47858        jQuery("form.send-verify-email").on("ajax:error", function(event2) {
47859          jQuery("form.send-verify-email button").removeClass("spinning");
47860          jQuery("form.send-verify-email .error").show();
47861          return jQuery(event2.target).parents(".login").css("height", jQuery(event2.target).height());
47862        });
47863      }).call(exports);
47864    }
47865  });
47866
47867  // apps/base/assets/javascripts/components/unlock.coffee
47868  var require_unlock = __commonJS({
47869    "apps/base/assets/javascripts/components/unlock.coffee"(exports) {
47870      "use strict";
47871      init_esbuild_shims();
47872      (function() {
47873        jQuery(function() {
47874          var originalLabel;
47875          originalLabel = jQuery("form.locked-account .label").text();
47876          jQuery(".different-credentials").on("click", function(event2) {
47877            var labelElement;
47878            event2.preventDefault();
47879            jQuery(".locked-account").addClass("hidden");
47880            jQuery("form.locked-account button").removeClass("completed green");
47881            jQuery("form.locked-account button").addClass("blue icon");
47882            labelElement = jQuery("form.locked-account .label");
47883            if (labelElement.text() !== originalLabel) {
47884              labelElement.text(originalLabel);
47885            }
47886            return jQuery(".login-form").removeClass("hidden");
47887          });
47888          jQuery("form.locked-account").on("submit", function() {
47889            jQuery("form.locked-account button").addClass("spinning");
47890            return jQuery("form.locked-account .error").hide();
47891          });
47892          jQuery("form.locked-account").on("ajax:success", function() {
47893            jQuery("form.locked-account button").removeClass("spinning blue");
47894            jQuery("form.locked-account button").addClass("completed green");
47895            return jQuery("form.locked-account button span.label").html(jQuery("form.locked-account button span.label").attr("data-success"));
47896          });
47897          return jQuery("form.locked-account").on("ajax:error", function() {
47898            jQuery("form.locked-account button").removeClass("spinning");
47899            jQuery("form.locked-account .error").show();
47900            return jQuery(event.target).parents(".login").css("height", jQuery(event.target).height());
47901          });
47902        });
47903      }).call(exports);
47904    }
47905  });
47906
47907  // apps/base/assets/javascripts/components/compliant_password.coffee
47908  var require_compliant_password = __commonJS({
47909    "apps/base/assets/javascripts/components/compliant_password.coffee"(exports) {
47910      "use strict";
47911      init_esbuild_shims();
47912      (function() {
47913        jQuery(function() {
47914          var originalLabel;
47915          originalLabel = jQuery("form.compliant-password .label").text();
47916          jQuery(".different-credentials").on("click", function(event2) {
47917            var labelElement;
47918            event2.preventDefault();
47919            jQuery(".compliant-password").addClass("hidden");
47920            jQuery("form.compliant-password button").removeClass("completed green");
47921            jQuery("form.compliant-password button").addClass("blue icon");
47922            labelElement = jQuery("form.compliant-password .label");
47923            if (labelElement.text() !== originalLabel) {
47924              labelElement.text(originalLabel);
47925            }
47926            return jQuery(".login-form").removeClass("hidden");
47927          });
47928          jQuery("form.compliant-password").on("submit", function() {
47929            jQuery("form.compliant-password button").addClass("spinning");
47930            return jQuery("form.compliant-password .error").hide();
47931          });
47932          jQuery("form.compliant-password").on("ajax:success", function() {
47933            jQuery("form.compliant-password button").removeClass("spinning blue");
47934            jQuery("form.compliant-password button").addClass("completed green");
47935            return jQuery("form.compliant-password button span.label").html(jQuery("form.compliant-password button span.label").attr("data-success"));
47936          });
47937          return jQuery("form.compliant-password").on("ajax:error", function() {
47938            jQuery("form.compliant-password button").removeClass("spinning");
47939            jQuery("form.compliant-password .error").show();
47940            return jQuery(event.target).parents(".login").css("height", jQuery(event.target).height());
47941          });
47942        });
47943      }).call(exports);
47944    }
47945  });
47946
47947  // apps/base/assets/javascripts/components/analytics.coffee
47948  var require_analytics = __commonJS({
47949    "apps/base/assets/javascripts/components/analytics.coffee"(exports) {
47950      "use strict";
47951      init_esbuild_shims();
47952      (function() {
47953        window.dataLayer = window.dataLayer || [];
47954        window.gtag = () => {
47955          return window.dataLayer.push(arguments);
47956        };
47957        window.gtag("js", /* @__PURE__ */ new Date());
47958        window.trackPageview = function(url) {
47959          if (window.dataLayer) {
47960            window.dataLayer.push({
47961              "page_url": url,
47962              "event": "track-pageview"
47963            });
47964            return true;
47965          }
47966        };
47967        window.trackPageviewEloqua = function(url) {
47968          if (typeof _elq !== "undefined" && _elq !== null) {
47969            return _elq.trackEvent(url);
47970          }
47971        };
47972        window.trackEvent = function(category, action, label, value) {
47973          if (window.dataLayer) {
47974            window.dataLayer.push({
47975              "category": category,
47976              "action": action,
47977              "label": label,
47978              "value": value,
47979              "event": "track-event"
47980            });
47981          }
47982          window.gtag("event", category.split(" ").join("_").toLowerCase(), {
47983            "action": action,
47984            "label": label,
47985            "value": value
47986          });
47987          return true;
47988        };
47989        window.trackNonInteractionEvent = function(category, action, label, value) {
47990          if (window.dataLayer) {
47991            window.dataLayer.push({
47992              "category": category,
47993              "action": action,
47994              "label": label,
47995              "value": value,
47996              "event": "track-event-non-interaction"
47997            });
47998            return true;
47999          }
48000        };
48001        window.trackEloquaEvent = function(params) {
48002          if (typeof _elq !== "undefined" && _elq !== null) {
48003            return _elq.trackEvent(`${window.location}/${params.join("/").replace(/\s/g, "-")}`);
48004          }
48005        };
48006        window.trackDownload = function(download_url, download_type = "unknown_type") {
48007          window.trackPageview(download_url);
48008          window.trackEvent("Downloads", download_type, download_url);
48009          return window.trackPageviewEloqua(`${window.location.protocol}//${window.location.host}${download_url}`);
48010        };
48011      }).call(exports);
48012    }
48013  });
48014
48015  // apps/base/assets/javascripts/components/balance_text.coffee
48016  var require_balance_text = __commonJS({
48017    "apps/base/assets/javascripts/components/balance_text.coffee"(exports) {
48018      "use strict";
48019      init_esbuild_shims();
48020      (function() {
48021      }).call(exports);
48022    }
48023  });
48024
48025  // apps/base/assets/javascripts/components/banner.coffee
48026  var require_banner = __commonJS({
48027    "apps/base/assets/javascripts/components/banner.coffee"(exports) {
48028      "use strict";
48029      init_esbuild_shims();
48030      (function() {
48031        var Banner;
48032        Banner = class Banner {
48033          constructor(el) {
48034            this.attachHandlers = this.attachHandlers.bind(this);
48035            this.resizeText = this.resizeText.bind(this);
48036            this.resizeSubtitle = this.resizeSubtitle.bind(this);
48037            this.el = el;
48038            this.bannerTitleLineHeight = parseInt(this.el.find(".banner .page-width h1").css("line-height"));
48039            this.bannerSubtitleLineHeight = parseInt(this.el.find(".banner .page-width h2").css("line-height"));
48040            this.bannerSubtitle = this.el.find(".banner .page-width h2");
48041            this.bannerTitle = this.el.find(".banner .page-width h1");
48042            this.resizeText();
48043            this.attachHandlers();
48044          }
48045          attachHandlers() {
48046            $(window).resize(() => {
48047              return this.resizeText();
48048            });
48049            return $(window).on("breakpoint-change", (event2) => {
48050              var maxLines;
48051              if (window.breakpoint === "mobile" || window.breakpoint === "mobile-landscape" || window.breakpoint === "tablet") {
48052                return this.resizeSubtitle(maxLines = 5);
48053              }
48054            });
48055          }
48056          resizeText() {
48057            var bannerTitleHeight, maxLines;
48058            maxLines = 4;
48059            bannerTitleHeight = parseInt(this.bannerTitle.height());
48060            this.titleLines = bannerTitleHeight / this.bannerTitleLineHeight;
48061            this.resizeSubtitle(maxLines);
48062            if (this.titleLines >= maxLines) {
48063              this.bannerTitle.height(this.bannerTitleLineHeight * maxLines + "px");
48064              jQuery(this.bannerTitle).ellipsis();
48065            }
48066            return jQuery(this.bannerSubtitle).ellipsis();
48067          }
48068          resizeSubtitle(maxLines) {
48069            return this.bannerSubtitle.height(this.bannerSubtitleLineHeight * (maxLines - this.titleLines) + "px");
48070          }
48071        };
48072        jQuery("div.slider").each(function(index, element) {
48073          return new Banner(jQuery(element));
48074        });
48075      }).call(exports);
48076    }
48077  });
48078
48079  // apps/base/assets/javascripts/components/billboard.coffee
48080  var require_billboard = __commonJS({
48081    "apps/base/assets/javascripts/components/billboard.coffee"(exports) {
48082      "use strict";
48083      init_esbuild_shims();
48084      (function() {
48085        var Billboard;
48086        Billboard = class Billboard {
48087          constructor(el) {
48088            this.setAnchors = this.setAnchors.bind(this);
48089            this.el = el;
48090            this.setAnchors();
48091          }
48092          setAnchors() {
48093            if (this.el.attr("anchor")) {
48094              return this.el.find(".anchor").on("click", function(event2) {
48095                var target;
48096                event2.preventDefault();
48097                target = jQuery(`[data-anchor='${jQuery(this).attr("anchor")}']`);
48098                if (target) {
48099                  return $("html, body").animate({
48100                    scrollTop: target.offset().top - 50
48101                  }, 500);
48102                }
48103              });
48104            }
48105          }
48106        };
48107        jQuery(".banner").each(function(index, element) {
48108          return new Billboard(jQuery(element));
48109        });
48110      }).call(exports);
48111    }
48112  });
48113
48114  // apps/base/assets/javascripts/components/blog/links.coffee
48115  var require_links = __commonJS({
48116    "apps/base/assets/javascripts/components/blog/links.coffee"(exports) {
48117      "use strict";
48118      init_esbuild_shims();
48119      (function() {
48120        window.positionLinks = () => {
48121          var hrefs, lastPos;
48122          hrefs = [];
48123          lastPos = 0;
48124          return jQuery(".link-details").each(function(index, element) {
48125            var href, lineLength, link, titlePos, topPos;
48126            href = jQuery(element).find("a").attr("href");
48127            if (hrefs.includes(href)) {
48128              return jQuery(element).remove();
48129            } else {
48130              link = jQuery(".paragraphs a[href='" + href + "']");
48131              jQuery(element).show();
48132              titlePos = jQuery(element).find("h4").position().top;
48133              topPos = link.offset().top - jQuery("aside").offset().top - 42 - titlePos;
48134              if (titlePos > 0) {
48135                jQuery(element).find(".line").css("top", 10 + titlePos);
48136                jQuery(element).find(".dot-container").css("top", -5 + titlePos);
48137              }
48138              jQuery(element).css("top", topPos);
48139              lineLength = jQuery(element).offset().left - (link.parent().offset().left + link.parent().outerWidth());
48140              jQuery(element).find(".line").css({
48141                "width": lineLength - 40,
48142                "left": lineLength * -1
48143              });
48144              topPos = jQuery(element).offset().top;
48145              if (topPos < lastPos) {
48146                return jQuery(element).remove();
48147              } else {
48148                hrefs.push(href);
48149                jQuery(element).find(".description").ellipsis();
48150                return lastPos = topPos + jQuery(element).outerHeight();
48151              }
48152            }
48153          });
48154        };
48155        jQuery(window).on("load", function() {
48156          var isMobile, tempInput;
48157          isMobile = window.matchMedia("only screen and (max-width: 760px)").matches;
48158          if (!isMobile) {
48159            window.positionLinks();
48160          }
48161          tempInput = jQuery("<input>");
48162          return jQuery(".site.copy").on("click", function(event2) {
48163            $("body").append(tempInput);
48164            tempInput.val(jQuery(location).attr("href")).select();
48165            document.execCommand("copy");
48166            return tempInput.remove();
48167          });
48168        });
48169        jQuery(window).on("resize", () => {
48170          if (window.breakpoint === "desktop") {
48171            return window.positionLinks();
48172          }
48173        });
48174        jQuery(window).on("breakpoint-change", (event2) => {
48175          if (window.breakpoint === "tablet" || window.breakpoint === "mobile") {
48176            return jQuery(".link-details").hide();
48177          } else {
48178            return jQuery(".link-details").show();
48179          }
48180        });
48181      }).call(exports);
48182    }
48183  });
48184
48185  // apps/base/assets/javascripts/components/breadcrumbs.coffee
48186  var require_breadcrumbs = __commonJS({
48187    "apps/base/assets/javascripts/components/breadcrumbs.coffee"(exports) {
48188      "use strict";
48189      init_esbuild_shims();
48190      (function() {
48191        jQuery("body").on("click", ".with-dropdown", function() {
48192          return jQuery(this).toggleClass("expanded");
48193        });
48194        jQuery("body").on("mouseleave", ".with-dropdown", function() {
48195          return jQuery(this).removeClass("expanded");
48196        });
48197      }).call(exports);
48198    }
48199  });
48200
48201  // apps/base/assets/javascripts/components/call_to_action.coffee
48202  var require_call_to_action = __commonJS({
48203    "apps/base/assets/javascripts/components/call_to_action.coffee"(exports) {
48204      "use strict";
48205      init_esbuild_shims();
48206      (function() {
48207        jQuery(".cta.newsletter a, .cta.newsletter p").on("click", function(event2) {
48208          jQuery(event2.currentTarget).parents(".cta").find("input[type='email']").focus();
48209          return false;
48210        });
48211        jQuery(".cta a").on("click", function(event2) {
48212          return window.trackEvent("Call to action", "Click", jQuery(event2.currentTarget).attr("data-ga-label"));
48213        });
48214      }).call(exports);
48215    }
48216  });
48217
48218  
48218// apps/base/assets/javascripts/components/contact_landing_page.ts
48219  var require_contact_landing_page = __commonJS({
48220    "apps/base/assets/javascripts/components/contact_landing_page.ts"() {
48221      "use strict";
48222      init_esbuild_shims();
48223      var ContactLandingPage = class {
48224        constructor() {
48225          this.attachEvents();
48226          this.handleInitialHash();
48227        }
48228        attachEvents() {
48229          document.addEventListener("click", (event2) => {
48230            const target = event2.target;
48231            const link = target.closest('a[href^="#"]');
48232            if (link) {
48233              this.handleAnchorClick(event2, link);
48234            }
48235          });
48236          window.addEventListener("hashchange", () => {
48237            this.handleHashChange();
48238          });
48239        }
48240        handleAnchorClick(event2, link) {
48241          const href = link.getAttribute("href");
48242          if (!href || !href.startsWith("#")) {
48243            return;
48244          }
48245          event2.preventDefault();
48246          this.scrollToAnchor(href);
48247        }
48248        handleHashChange() {
48249          if (window.location.hash) {
48250            this.scrollToAnchor(window.location.hash);
48251          }
48252        }
48253        handleInitialHash() {
48254          if (window.location.hash) {
48255            setTimeout(() => {
48256              this.scrollToAnchor(window.location.hash);
48257            }, 100);
48258          }
48259        }
48260        scrollToAnchor(hash) {
48261          const target = document.querySelector(hash);
48262          if (!target) {
48263            return;
48264          }
48265          const offset = this.calculateNavigationOffset();
48266          const currentScrollTop = window.pageYOffset || document.documentElement.scrollTop;
48267          const targetPosition = target.offsetTop - offset;
48268          this.smoothScrollTo(targetPosition, 500);
48269        }
48270        smoothScrollTo(targetPosition, duration) {
48271          const startPosition = window.pageYOffset || document.documentElement.scrollTop;
48272          const distance = targetPosition - startPosition;
48273          const startTime = performance.now();
48274          const animateScroll = (currentTime) => {
48275            const elapsed = currentTime - startTime;
48276            const progress = Math.min(elapsed / duration, 1);
48277            const easeOut = 1 - Math.pow(1 - progress, 3);
48278            const currentPosition = startPosition + distance * easeOut;
48279            window.scrollTo(0, currentPosition);
48280            if (progress < 1) {
48281              requestAnimationFrame(animateScroll);
48282            }
48283          };
48284          requestAnimationFrame(animateScroll);
48285        }
48286        calculateNavigationOffset() {
48287          let baseOffset = 56;
48288          if (document.querySelector(".accesscontrolbar")) {
48289            baseOffset += 27;
48290          }
48291          if (document.querySelector("nav.breadcrumb, nav.dashboard-submenu")) {
48292            baseOffset += 56;
48293          }
48294          baseOffset += 20;
48295          return baseOffset;
48296        }
48297      };
48298      document.addEventListener("DOMContentLoaded", () => {
48299        if (document.querySelector(".contact-landing-page")) {
48300          new ContactLandingPage();
48301        }
48302      });
48303    }
48304  });
48305
48306  // apps/base/assets/javascripts/components/cards.coffee
48307  var require_cards = __commonJS({
48308    "apps/base/assets/javascripts/components/cards.coffee"(exports) {
48309      "use strict";
48310      init_esbuild_shims();
48311      (function() {
48312        var cutOffOverflowingText, positionImage, processCard;
48313        positionImage = function(card) {
48314          var image;
48315          image = jQuery(card).find("img");
48316          return image.on("load", () => {
48317            var containerHeight, containerWidth, imageHeight, imageWidth;
48318            containerHeight = jQuery(card).find("figure > a").height();
48319            containerWidth = jQuery(card).find("figure > a").width();
48320            imageHeight = image.height();
48321            imageWidth = image.width();
48322            if (imageHeight / imageWidth < containerHeight / containerWidth) {
48323              image.css({
48324                "height": "100%",
48325                "width": "auto"
48326              });
48327            } else {
48328              image.css({
48329                "height": "auto",
48330                "width": "100%"
48331              });
48332            }
48333            image.addClass("processed");
48334            return image.attr("alt", "icon");
48335          }).each(function() {
48336            if (this.complete) {
48337              return $(this).trigger("load");
48338            }
48339          });
48340        };
48341        cutOffOverflowingText = function(card) {
48342          var description;
48343          description = jQuery(card).find("> .description");
48344          return description.ellipsis();
48345        };
48346        processCard = function(card) {
48347          if (!jQuery(card).find("figure").hasClass("static")) {
48348            positionImage(card);
48349          }
48350          jQuery(card).find("p").each(function(index, element) {
48351            if (jQuery(element).text().trim() === "") {
48352              return jQuery(element).remove();
48353            }
48354          });
48355          return cutOffOverflowingText(card);
48356        };
48357        $(window).on("load", function() {
48358          jQuery(window).on("resize-cards", function() {
48359            return jQuery("article.card").each(function() {
48360              return processCard(this);
48361            });
48362          });
48363          jQuery("article.highlight").each(function() {
48364            return cutOffOverflowingText(this);
48365          });
48366          return jQuery(window).trigger("resize-cards");
48367        });
48368        $(window).on("resize", function() {
48369          return jQuery(window).trigger("resize-cards");
48370        });
48371        $("nav.tabs, nav.listing-tabs").on("click", function() {
48372          return jQuery(window).trigger("resize-cards");
48373        });
48374        $(document).on("click", ".regions", function(e) {
48375          var allRegions, allRegionsArray, hidePill, labelHide, labelMore, morePill, pill, regionsContainer, regionsText, remainingCount, visibleCount, visibleRegions;
48376          pill = $(this).find(".regions-more, .regions-hide");
48377          if (!(pill.length > 0)) {
48378            return;
48379          }
48380          e.preventDefault();
48381          allRegions = pill.data("all-regions");
48382          visibleCount = pill.data("visible-count");
48383          labelMore = pill.data("label-more") || "more";
48384          labelHide = pill.data("label-hide") || "hide";
48385          regionsContainer = $(this);
48386          if (pill.hasClass("regions-more")) {
48387            regionsContainer.find(".regions-text, .pill").remove();
48388            regionsText = $(`<span class='regions-text'>${allRegions}</span>`);
48389            regionsContainer.append(regionsText);
48390            hidePill = $(`<span class='pill regions-hide' data-all-regions='${allRegions}' data-visible-count='${visibleCount}' data-label-more='${labelMore}' data-label-hide='${labelHide}'>${labelHide}</span>`);
48391            return regionsContainer.append(hidePill);
48392          } else if (pill.hasClass("regions-hide")) {
48393            allRegionsArray = allRegions.split(", ");
48394            visibleRegions = allRegionsArray.slice(0, visibleCount);
48395            remainingCount = allRegionsArray.length - visibleCount;
48396            regionsContainer.find(".regions-text, .pill").remove();
48397            regionsText = $(`<span class='regions-text'>${visibleRegions.join(", ")}</span>`);
48398            regionsContainer.append(regionsText);
48399            morePill = $(`<span class='pill regions-more' data-all-regions='${allRegions}' data-visible-count='${visibleCount}' data-label-more='${labelMore}' data-label-hide='${labelHide}'>+${remainingCount} ${labelMore}</span>`);
48400            return regionsContainer.append(morePill);
48401          }
48402        });
48403      }).call(exports);
48404    }
48405  });
48406
48407  // apps/base/assets/javascripts/components/catalogue/downloads.coffee
48408  var require_downloads = __commonJS({
48409    "apps/base/assets/javascripts/components/catalogue/downloads.coffee"(exports) {
48410      "use strict";
48411      init_esbuild_shims();
48412      (function() {
48413        jQuery("section.product-family-info div.downloads").not(".new").each(function(index, element) {
48414          if (jQuery(element).find("div.download").length > 6) {
48415            jQuery(element).find("div.download:gt(5)").hide();
48416            return jQuery(element).next("a.button").css("display", "block");
48417          }
48418        });
48419        jQuery("section.product-family-info article[data-content='downloads'] a.button").on("click", function(event2) {
48420          jQuery(event2.currentTarget).prev("div.downloads").find("div.download").show();
48421          return jQuery(event2.currentTarget).hide();
48422        });
48423        jQuery("section.product-family-info-redesign div.downloads").not(".new").each(function(index, element) {
48424          if (jQuery(element).find("div.download").length > 6) {
48425            jQuery(element).find("div.download:gt(5)").hide();
48426            return jQuery(element).next("a.button").css("display", "block");
48427          }
48428        });
48429        jQuery("section.product-family-info-redesign article[data-content='downloads'] a.button").on("click", function(event2) {
48430          jQuery(event2.currentTarget).prev("div.downloads").find("div.download").show();
48431          return jQuery(event2.currentTarget).hide();
48432        });
48433      }).call(exports);
48434    }
48435  });
48436
48437  // apps/base/assets/javascripts/components/catalogue/footnotes.coffee
48438  var require_footnotes = __commonJS({
48439    "apps/base/assets/javascripts/components/catalogue/footnotes.coffee"(exports) {
48440      "use strict";
48441      init_esbuild_shims();
48442      (function() {
48443        var footnoteHTML;
48444        footnoteHTML = function(link, html) {
48445          return `<div class='tooltip'>
48446   ${link}
48447   <div class='tip'>
48448      <div>
48449        ${html}
48450      </div>
48451    </div>
48452  </div>`;
48453        };
48454        $("div.framemaker a.footnote[href]").each(function() {
48455          var footnote, id, link;
48456          link = $(this)[0].outerHTML;
48457          id = $(this).attr("href").substr(1);
48458          footnote = $(`div.framemaker-footnotes a[name='${id}']`).parent().html();
48459          return $(this).replaceWith(footnoteHTML(link, footnote));
48460        });
48461        $("div.framemaker a.XRef").each(function() {
48462          var footnote, id, link;
48463          link = $(this)[0].outerHTML;
48464          id = $(this).attr("href").split("#")[1];
48465          footnote = $(`div.framemaker-footnotes a[name='${id}']`).parent().html();
48466          return $(this).replaceWith(footnoteHTML(link, footnote));
48467        });
48468        $("div.framemaker a.footnote[href], div.framemaker a.XRef").on("click", function(event2) {
48469          return event2.preventDefault();
48470        });
48471      }).call(exports);
48472    }
48473  });
48474
48475  // apps/base/assets/javascripts/components/catalogue/product.coffee
48476  var require_product = __commonJS({
48477    "apps/base/assets/javascripts/components/catalogue/product.coffee"(exports) {
48478      "use strict";
48479      init_esbuild_shims();
48480      (function() {
48481        jQuery(function() {
48482          jQuery(".product-page a#link-to-accessories").on("click", function(event2) {
48483            var extraOffset, hasAccessControlBar, sticky, target;
48484            event2.preventDefault();
48485            target = jQuery("#accessories");
48486            if (target) {
48487              sticky = jQuery("body").hasClass("sticky");
48488              hasAccessControlBar = jQuery(".accesscontrolbar").length > 0;
48489              extraOffset = 70;
48490              if (!sticky) {
48491                extraOffset += 50;
48492              }
48493              if (hasAccessControlBar) {
48494                extraOffset += 56;
48495              }
48496              return jQuery("html, body").animate({
48497                scrollTop: target.offset().top - extraOffset
48498              }, 500);
48499            }
48500          });
48501          return jQuery(".product-page [data-ga-action]").on("click", (event2) => {
48502            var action, label;
48503            action = jQuery(event2.currentTarget).attr("data-ga-action");
48504            label = jQuery(event2.currentTarget).attr("data-ga-label");
48505            return window.trackEvent("Product family", action, label);
48506          });
48507        });
48508      }).call(exports);
48509    }
48510  });
48511
48512  // apps/base/assets/javascripts/components/catalogue/product_compare.coffee
48513  var require_product_compare = __commonJS({
48514    "apps/base/assets/javascripts/components/catalogue/product_compare.coffee"(exports) {
48515      "use strict";
48516      init_esbuild_shims();
48517      (function() {
48518        var toggleHasCheck;
48519        toggleHasCheck = function(el) {
48520          el = jQuery(el);
48521          if (el.find("input:checkbox:checked").length > 0) {
48522            return el.addClass("hascheck");
48523          } else {
48524            return el.removeClass("hascheck");
48525          }
48526        };
48527        jQuery("form.productcompare fieldset").click(function() {
48528          return toggleHasCheck(this);
48529        });
48530        jQuery(".rowfilter").click(function() {
48531          return toggleHasCheck(this);
48532        });
48533        jQuery("form.productcompare > fieldset, .rowfilter").each(function() {
48534          return toggleHasCheck(this);
48535        });
48536        jQuery("#products").tableHeadFixer({
48537          "left": 1
48538        });
48539        jQuery("header.product-compare table .icon-cross").on("click", (event2) => {
48540          var column, columnId;
48541          column = jQuery(event2.target).parents("td");
48542          columnId = jQuery("header.product-compare table tr td").index(column);
48543          if (columnId !== -1) {
48544            jQuery("header.product-compare table tr td:nth-child(" + (columnId + 1) + ")").remove();
48545            jQuery(".comparison table tbody tr td:nth-child(" + (columnId + 1) + ")").remove();
48546            if (jQuery("header.product-compare table tr td").length < 3) {
48547              return jQuery("header.product-compare table tr td i").hide();
48548            }
48549          }
48550        });
48551      }).call(exports);
48552    }
48553  });
48554
48555  // apps/base/assets/javascripts/components/catalogue/product_export_dialog.coffee
48556  var require_product_export_dialog = __commonJS({
48557    "apps/base/assets/javascripts/components/catalogue/product_export_dialog.coffee"(exports) {
48558      "use strict";
48559      init_esbuild_shims();
48560      (function() {
48561        var ProductExportDialog;
48562        ProductExportDialog = class ProductExportDialog {
48563          constructor(el) {
48564            this.disableSubmitButton = this.disableSubmitButton.bind(this);
48565            this.enableSubmitButton = this.enableSubmitButton.bind(this);
48566            this.closeDialog = this.closeDialog.bind(this);
48567            this.el = el;
48568            this.attachEvents();
48569            this.initNamePlaceholder();
48570          }
48571          initNamePlaceholder() {
48572            this.indexPosition = jQuery(this.el).find("textarea").text().indexOf("[name]");
48573            return jQuery(this.el).find("textarea").attr("data-name-placeholder", "[name]");
48574          }
48575          attachEvents() {
48576            jQuery(this.el).find("form").on("recaptcha-loaded", (event2, data) => {
48577              return this.widgetId = grecaptcha.render(jQuery(this.el).find("form .g-recaptcha")[0], {
48578                "sitekey": jQuery(this.el).find("form .g-recaptcha").attr("data-sitekey"),
48579                "badge": "inline",
48580                "size": "invisible"
48581              });
48582            });
48583            jQuery(this.el).on("click", "#excel-export", (event2) => {
48584              return this.closeDialog();
48585            });
48586            jQuery(".button.wide-popup.export-button").on("click", function() {
48587              return trackEvent("Product page", "Export button clicked");
48588            });
48589            jQuery(this.el).on("click", "#send-email", (event2) => {
48590              trackEvent("Product page", "Send email clicked");
48591              jQuery(this.el).find("form").show();
48592              jQuery(this.el).find("#excel-export").hide();
48593              jQuery(this.el).find("#send-email").hide();
48594              jQuery(this.el).find(".back").show();
48595              jQuery(this.el).find(".level-1-cta").hide();
48596              return jQuery(this.el).find(".level-2-cta").show();
48597            });
48598            jQuery(this.el).on("click", ".back", (event2) => {
48599              jQuery(this.el).find("form").hide();
48600              jQuery(this.el).find("#excel-export").show();
48601              jQuery(this.el).find("#send-email").show();
48602              jQuery(this.el).find(".back").hide();
48603              jQuery(this.el).find(".level-1-cta").show();
48604              return jQuery(this.el).find(".level-2-cta").hide();
48605            });
48606            jQuery(this.el).on("keyup", "input[name='email_address'], input[name='name']", (event2) => {
48607              if (jQuery(this.el).find("input[name='email_address']")[0].checkValidity() && jQuery(this.el).find("input[name='name']").val() !== "") {
48608                return this.enableSubmitButton();
48609              } else {
48610                return this.disableSubmitButton();
48611              }
48612            });
48613            jQuery(this.el).on("keyup change", "input[name='name']", (event2) => {
48614              var name, textarea;
48615              name = jQuery(this.el).find("input[name='name']").val();
48616              if (name === "") {
48617                name = "[name]";
48618              }
48619              textarea = jQuery(this.el).find("textarea[name='body']");
48620              textarea.text(textarea.text().substring(0, this.indexPosition) + name + textarea.text().substring(this.indexPosition + textarea.attr("data-name-placeholder").length));
48621              return jQuery(this.el).find("textarea").attr("data-name-placeholder", name);
48622            });
48623            return jQuery(this.el).on("submit", "form", (event2) => {
48624              event2.preventDefault();
48625              this.disableSubmitButton();
48626              jQuery(this.el).find("form [name='g-recaptcha-response']").val("");
48627              return grecaptcha.execute(this.widgetId, {
48628                action: "submit_form"
48629              }).then((token) => {
48630                jQuery(this.el).find("form [name='g-recaptcha-response']").val(token);
48631                return jQuery.ajax({
48632                  method: "post",
48633                  url: jQuery(this.el).find("form").attr("action"),
48634                  data: jQuery(this.el).find("form").serialize(),
48635                  success: (data) => {
48636                    this.closeDialog();
48637                    this.enableSubmitButton();
48638                    window.notificationService.showSuccessNotification("", translations["label_email_sent"]);
48639                    return trackEvent("Product page", "Email sent");
48640                  },
48641                  error: (request, status, error) => {
48642                    this.closeDialog();
48643                    this.enableSubmitButton();
48644                    return window.notificationService.showErrorNotification("Error", translations["label_email_sent_failure"]);
48645                  }
48646                });
48647              });
48648            });
48649          }
48650          disableSubmitButton() {
48651            return jQuery(this.el).find("input[type='submit']").attr("disabled", true);
48652          }
48653          enableSubmitButton() {
48654            return jQuery(this.el).find("input[type='submit']").attr("disabled", false);
48655          }
48656          closeDialog() {
48657            return jQuery(this.el).find("button.mfp-close").click();
48658          }
48659        };
48660        jQuery(function() {
48661          if (jQuery("#export-options").length > 0) {
48662            return new ProductExportDialog(jQuery("#export-options"));
48663          }
48664        });
48665      }).call(exports);
48666    }
48667  });
48668
48669  // apps/base/assets/javascripts/components/catalogue/product_family_filter.coffee
48670  var require_product_family_filter = __commonJS({
48671    "apps/base/assets/javascripts/components/catalogue/product_family_filter.coffee"(exports) {
48672      "use strict";
48673      init_esbuild_shims();
48674      (function() {
48675        var ProductFamilyFilter;
48676        ProductFamilyFilter = class ProductFamilyFilter {
48677          constructor(filter, controls, table, grid) {
48678            var base, el, header, i, j, k, keyword, l, len, len1, ref;
48679            this.filter = filter;
48680            this.controls = controls;
48681            this.table = table;
48682            this.grid = grid;
48683            header = this.table.find("tr:first-child th");
48684            this.num = header.length;
48685            this.truncateProducts = this.grid && this.grid.attr("data-show") !== "all";
48686            this.data = {};
48687            for (i = k = 0, len = header.length; k < len; i = ++k) {
48688              el = header[i];
48689              if (!(i > 0)) {
48690                continue;
48691              }
48692              el = jQuery(el);
48693              this.data[el.data("id")] = (function() {
48694                var l2, ref2, results;
48695                results = [];
48696                for (j = l2 = 0, ref2 = this.num; 0 <= ref2 ? l2 < ref2 : l2 > ref2; j = 0 <= ref2 ? ++l2 : --l2) {
48697                  results.push(i === j);
48698                }
48699                return results;
48700              }).call(this);
48701              ref = el.data("keywords");
48702              for (l = 0, len1 = ref.length; l < len1; l++) {
48703                keyword = ref[l];
48704                (base = this.data)[keyword] || (base[keyword] = (function() {
48705                  var m, ref1, results;
48706                  results = [];
48707                  for (j = m = 0, ref1 = this.num; 0 <= ref1 ? m < ref1 : m > ref1; j = 0 <= ref1 ? ++m : --m) {
48708                    results.push(false);
48709                  }
48710                  return results;
48711                }).call(this));
48712                this.data[keyword][i] = true;
48713              }
48714            }
48715            this.attachEvents();
48716            this.applyFilters();
48717          }
48718          adjustGrid() {
48719            var numShown;
48720            numShown = 0;
48721            if (window.breakpoint === "desktop") {
48722              numShown = 5;
48723            } else if (window.breakpoint === "tablet") {
48724              numShown = 3;
48725            } else if (window.breakpoint === "mobile-landscape" || window.breakpoint === "mobile") {
48726              numShown = 2;
48727            }
48728            if (this.grid.find("li").length > numShown) {
48729              this.grid.find(`li:nth-child(n+${numShown})`).hide();
48730              this.grid.siblings(".view-less").hide();
48731              return this.grid.siblings(".view-all").show();
48732            } else {
48733              this.showAll();
48734              return this.grid.siblings(".view-less").hide();
48735            }
48736          }
48737          showAll() {
48738            this.grid.find("li").show();
48739            this.grid.siblings(".view-all").hide();
48740            return this.grid.siblings(".view-less").show();
48741          }
48742          showLess() {
48743            this.adjustGrid();
48744            return $([document.documentElement, document.body]).animate({
48745              scrollTop: $(".related-products").offset().top - 50
48746            }, 100);
48747          }
48748          attachEvents() {
48749            this.filter.on("click", "fieldset input:checkbox", () => {
48750              return this.applyFilters();
48751            });
48752            this.table.on("click", "fieldset input:checkbox", () => {
48753              return this.applyFilters();
48754            });
48755            this.filter.on("click", "a[data-ga-action]", (event2) => {
48756              return this.trackEvent(event2);
48757            });
48758            this.table.on("click", "a[data-ga-action]", (event2) => {
48759              return this.trackEvent(event2);
48760            });
48761            this.grid.on("click", "a[data-ga-action]", (event2) => {
48762              return this.trackEvent(event2);
48763            });
48764            this.filter.on("change", "input[data-ga-action]", (event2) => {
48765              return this.trackEvent(event2);
48766            });
48767            this.table.on("change", "input[data-ga-action]", (event2) => {
48768              return this.trackEvent(event2);
48769            });
48770            this.grid.siblings(".view-all").find(".button").on("click", (event2) => {
48771              return this.showAll();
48772            });
48773            this.grid.siblings(".view-less").find(".button").on("click", (event2) => {
48774              return this.showLess();
48775            });
48776            if (this.truncateProducts) {
48777              $(window).on("breakpoint-change", (event2) => {
48778                return this.adjustGrid();
48779              });
48780              return jQuery(() => {
48781                return this.adjustGrid();
48782              });
48783            }
48784          }
48785          addSelected(container) {
48786            var el, k, len, ref, results;
48787            ref = container.find("fieldset.hascheck");
48788            results = [];
48789            for (k = 0, len = ref.length; k < len; k++) {
48790              el = ref[k];
48791              el = jQuery(el);
48792              results.push(this.groups[el.data("name")] = this.get
48792Selected(el));
48793            }
48794            return results;
48795          }
48796          trackEvent(event2) {
48797            var action, label;
48798            action = jQuery(event2.currentTarget).attr("data-ga-action");
48799            label = jQuery(event2.currentTarget).attr("data-ga-label");
48800            return window.trackEvent("Product catalogue", action, label);
48801          }
48802          getSelected(fieldset) {
48803            var el, i, index, k, len, ref, ref1, val, values;
48804            values = (function() {
48805              var k2, ref2, results;
48806              results = [];
48807              for (index = k2 = 0, ref2 = this.num; 0 <= ref2 ? k2 < ref2 : k2 > ref2; index = 0 <= ref2 ? ++k2 : --k2) {
48808                results.push(false);
48809              }
48810              return results;
48811            }).call(this);
48812            ref = fieldset.find("input:checked");
48813            for (k = 0, len = ref.length; k < len; k++) {
48814              el = ref[k];
48815              if (!el.checked) {
48816                return;
48817              }
48818              ref1 = this.data[el.name];
48819              for (i in ref1) {
48820                val = ref1[i];
48821                values[i] || (values[i] = val);
48822              }
48823            }
48824            return values;
48825          }
48826          isSelected(index, exclude) {
48827            var name, ref, rows;
48828            ref = this.groups;
48829            for (name in ref) {
48830              rows = ref[name];
48831              if (name === exclude) {
48832                continue;
48833              }
48834              if (!rows[index]) {
48835                return false;
48836              }
48837            }
48838            return true;
48839          }
48840          applyFilters() {
48841            var cells, i, item, list, total;
48842            this.groups = {};
48843            this.addSelected(this.filter);
48844            this.addSelected(this.table);
48845            this.selected = (function() {
48846              var k, ref, results;
48847              results = [];
48848              for (i = k = 0, ref = this.num; 0 <= ref ? k < ref : k > ref; i = 0 <= ref ? ++k : --k) {
48849                results.push(this.isSelected(i));
48850              }
48851              return results;
48852            }).call(this);
48853            total = 0;
48854            i = 1;
48855            while (i < this.num) {
48856              cells = this.table.find(`tr th:nth-child(${i + 1}), td:nth-child(${i + 1})`);
48857              if (this.selected[i++]) {
48858                cells.show();
48859                total++;
48860              } else {
48861                cells.hide();
48862              }
48863            }
48864            list = this.grid.find("ul");
48865            i = this.num - 1;
48866            while (i > 0) {
48867              item = list.find(`[data-row='${i}']`);
48868              item.remove();
48869              if (this.selected[i--]) {
48870                list.prepend(item.show());
48871              } else {
48872                list.append(item.hide());
48873              }
48874            }
48875            this.controls.find(".product-count span.count").html(total);
48876            if (total === 1) {
48877              this.controls.find(".product-count span.singular").show();
48878              this.controls.find(".product-count span.plural").hide();
48879            } else {
48880              this.controls.find(".product-count span.singular").hide();
48881              this.controls.find(".product-count span.plural").show();
48882            }
48883            return this.setCount();
48884          }
48885          setCount() {
48886            var count, el, fieldset, i, keyword, label, name, ref, results, values;
48887            ref = this.data;
48888            results = [];
48889            for (keyword in ref) {
48890              values = ref[keyword];
48891              el = jQuery(document.getElementsByName(keyword));
48892              count = 0;
48893              fieldset = el.closest("fieldset");
48894              if (fieldset.hasClass("hascheck")) {
48895                name = fieldset.data("name");
48896                i = 1;
48897                while (i < this.num) {
48898                  if (this.isSelected(i, name) && values[i]) {
48899                    count += 1;
48900                  }
48901                  i++;
48902                }
48903              } else {
48904                i = 1;
48905                while (i < this.num) {
48906                  if (this.selected[i] && values[i]) {
48907                    count += 1;
48908                  }
48909                  i++;
48910                }
48911              }
48912              label = el.closest("label");
48913              label.find(".count").html(`${count}`);
48914              results.push(label.toggleClass("noresults", !count));
48915            }
48916            return results;
48917          }
48918        };
48919        new ProductFamilyFilter(jQuery(".productcompare-filter"), jQuery(".productcompare-control
48919s"), jQuery(".productcompare-table"), jQuery(".productcompare-grid"));
48920      }).call(exports);
48921    }
48922  });
48923
48924  // apps/base/assets/javascripts/components/catalogue/product_selector.coffee
48925  var require_product_selector = __commonJS({
48926    "apps/base/assets/javascripts/components/catalogue/product_selector.coffee"(exports) {
48927      "use strict";
48928      init_esbuild_shims();
48929      (function() {
48930        var ProductSelector;
48931        ProductSelector = class ProductSelector {
48932          constructor(el1) {
48933            this.initState = this.initState.bind(this);
48934            this.initData = this.initData.bind(this);
48935            this.attachEvents = this.attachEvents.bind(this);
48936            this.showCompareButton = this.showCompareButton.bind(this);
48937            this.hideCompareButton = this.hideCompareButton.bind(this);
48938            this.disableCompareButton = this.disableCompareButton.bind(this);
48939            this.showDescription = this.showDescription.bind(this);
48940            this.showFeatures = this.showFeatures.bind(this);
48941            this.setViewState = this.setViewState.bind(this);
48942            this.applyFilters = this.applyFilters.bind(this);
48943            this.previousView = this.previousView.bind(this);
48944            this.disableFeatureView = this.disableFeatureView.bind(this);
48945            this.processFilterResults = this.processFilterResults.bind(this);
48946            this.setFilterCounts = this.setFilterCounts.bind(this);
48947            this.hideFiltersWithSingleOption = this.hideFiltersWithSingleOption.bind(this);
48948            this.hideColumns = this.hideColumns.bind(this);
48949            this.showNoResultsMessage = this.showNoResultsMessage.bind(this);
48950            this.hideNoResultsMessage = this.hideNoResultsMessage.bind(this);
48951            this.el = el1;
48952            this.products = this.el.find(".product-list table tbody tr");
48953            this.isMobile = window.matchMedia("only screen and (max-width: 760px)").matches;
48954            this.attachEvents();
48955            this.initState();
48956          }
48957          initState() {
48958            this.initData();
48959            this.applyFilters();
48960            return this.setViewState();
48961          }
48962          initData() {
48963            this.data = {};
48964            jQuery(".product-list tbody tr").each((i, product) => {
48965              var base, filterId, j, k, len, ref, results;
48966              ref = jQuery(product).data("filters");
48967              results = [];
48968              for (k = 0, len = ref.length; k < len; k++) {
48969                filterId = ref[k];
48970                (base = this.data)[filterId] || (base[filterId] = (function() {
48971                  var l, ref1, results1;
48972                  results1 = [];
48973                  for (j = l = 0, ref1 = this.products.length; 0 <= ref1 ? l < ref1 : l > ref1; j = 0 <= ref1 ? ++l : --l) {
48974                    results1.push(false);
48975                  }
48976                  return results1;
48977                }).call(this));
48978                results.push(this.data[filterId][i] = true);
48979              }
48980              return results;
48981            });
48982            if (this.isMobile) {
48983              jQuery("#filters").hide();
48984              if (!jQuery("a#show-all-products").hasClass("button")) {
48985                jQuery("a#show-all-products").addClass("button");
48986              }
48987              return this.showDescription();
48988            }
48989          }
48990          attachEvents() {
48991            this.el.find("aside .other-filters ul").hide();
48992            this.el.find("aside i.close").on("click", (event2) => {
48993              if (jQuery(event2.target).hasClass("icon-eye")) {
48994                jQuery(event2.target).removeClass("icon-eye").addClass("icon-eye-slash");
48995              } else {
48996                jQuery(event2.target).removeClass("icon-eye-slash").addClass("icon-eye");
48997              }
48998              return jQuery(this.el).find("aside .other-filters ul").toggle();
48999            });
49000            this.el.find("aside > h3").on("click", (event2) => {
49001              if (this.isMobile) {
49002                return jQuery("aside .filter:not(.hidden)").slideToggle(200);
49003              }
49004            });
49005            this.el.find(".filter > h3").on("click", (event2) => {
49006              return this.toggleFilter(jQuery(event2.target).parents(".filter"));
49007            });
49008            this.el.find(".filter input").on("change", (event2) => {
49009              return this.applyFilters();
49010            });
49011            this.el.find(".product-list table input[type='checkbox']").on("click", (event2) => {
49012              var nrOfProductsSelected;
49013              nrOfProductsSelected = jQuery(".product-list table input[type='checkbox']:checked").length;
49014              if (nrOfProductsSelected > 1 && nrOfProductsSelected <= 3) {
49015                return this.showCompareButton(nrOfProductsSelected);
49016              } else if (nrOfProductsSelected > 3 && jQuery("#compare").attr("data-altlabel")) {
49017                return this.disableCompareButton();
49018              } else {
49019                return this.hideCompareButton();
49020              }
49021            });
49022            this.el.find("a#show-all-products").on("click", (event2) => {
49023              this.applyFilters(0);
49024              return jQuery("a#show-all-products").hide();
49025            });
49026            this.el.find("span.reset").on("click", (event2) => {
49027              jQuery(".filter.active input:checked").prop("checked", false);
49028              return this.applyFilters();
49029            });
49030            this.el.on("click", "h3[data-ga-action]", (event2) => {
49031              return this.trackEvent(event2);
49032            });
49033            this.el.on("click", "span.reset[data-ga-action]", (event2) => {
49034              return this.trackEvent(event2);
49035            });
49036            this.el.on("click", "a[data-ga-action]", (event2) => {
49037              return this.trackEvent(event2);
49038            });
49039            this.el.on("change", "input[data-ga-action]", (event2) => {
49040              return this.trackEvent(event2);
49041            });
49042            return jQuery(".view-options .view").on("click", (event2) => {
49043              if (jQuery(".product-list tbody tr.filtered").length > 1 && jQuery(".view-options .view.disable").length === 0) {
49044                jQuery(".view.selected").removeClass("selected");
49045                jQuery(event2.currentTarget).addClass("selected");
49046                if (jQuery(event2.currentTarget).attr("id") === "description-view") {
49047                  this.showDescription();
49048                } else {
49049                  this.showFeatures();
49050                }
49051                return this.setViewState();
49052              }
49053            });
49054          }
49055          showCompareButton(nrOfProductsSelected) {
49056            var element, products;
49057            products = (function() {
49058              var k, len, ref, results;
49059              ref = jQuery(".product-list table input[type='checkbox']:checked");
49060              results = [];
49061              for (k = 0, len = ref.length; k < len; k++) {
49062                element = ref[k];
49063                results.push(jQuery(element).parents("tr").attr("data-product"));
49064              }
49065              return results;
49066            })();
49067            jQuery("#compare").attr("href", jQuery("#compare").attr("data-endpoint") + "?products=" + products.join(",") + "&referrer=" + jQuery("#compare").attr("data-referrer"));
49068            jQuery("#compare span.text").html(jQuery("#compare").attr("data-label"));
49069            jQuery("#compare span.number").html("(" + nrOfProductsSelected + ")");
49070            return jQuery("#compare").removeClass("disabled").addClass("visible");
49071          }
49072          hideCompareButton() {
49073            return jQuery("#compare").removeClass("visible");
49074          }
49075          disableCompareButton() {
49076            jQuery("#compare").addClass("disabled");
49077            jQuery("#compare").removeAttr("href");
49078            jQuery("#compare span.text").html(jQuery("#compare").attr("data-altlabel"));
49079            return jQuery("#compare span.number").html("");
49080          }
49081          showDescription() {
49082            return jQuery("table.details").addClass("descriptions");
49083          }
49084          showFeatures() {
49085            return jQuery("table.details").removeClass("descriptions");
49086          }
49087          isSelected(index, exclude) {
49088            var name, ref, rows;
49089            ref = this.activeFilters;
49090            for (name in ref) {
49091              rows = ref[name];
49092              if (name === exclude) {
49093                continue;
49094              }
49095              if (!rows[index]) {
49096                return false;
49097              }
49098            }
49099            return true;
49100          }
49101          toggleFilter(filter) {
49102            jQuery(filter).toggleClass("collapsed");
49103            return jQuery(filter).find("ul, .slider-container").slideToggle(200);
49104          }
49105          setViewState() {
49106            return this.viewState = jQuery(".view.selected").attr("id");
49107          }
49108          applyFilters(maxProducts = 20) {
49109            var activeFilter, filterValue, i, index, k, l, len, len1, multiValued, ref, ref1, ref2, ref3, shownProducts, val, values;
49110            this.hideNoResultsMessage();
49111            jQuery(".filter").each((index2, element) => {
49112              return jQuery(element).toggleClass("active", jQuery(element).find("input:checked").length > 0);
49113            });
49114            this.activeFilters = {};
49115            ref = jQuery(".filter.active");
49116            for (k = 0, len = ref.length; k < len; k++) {
49117              activeFilter = ref[k];
49118              multiValued = jQuery(activeFilter).attr("data-multivalued") === "1";
49119              values = (function() {
49120                var l2, ref12, results;
49121                results = [];
49122                for (index = l2 = 0, ref12 = this.products.length; 0 <= ref12 ? l2 < ref12 : l2 > ref12; index = 0 <= ref12 ? ++l2 : --l2) {
49123                  results.push(multiValued);
49124                }
49125                return results;
49126              }).call(this);
49127              ref1 = jQuery(activeFilter).find("input:checked");
49128              for (l = 0, len1 = ref1.length; l < len1; l++) {
49129                filterValue = ref1[l];
49130                if (multiValued) {
49131                  ref2 = this.data[jQuery(filterValue).attr("id")];
49132                  for (i in ref2) {
49133                    val = ref2[i];
49134                    if (val && values[i]) {
49135                      values[i] = true;
49136                    } else {
49137                      values[i] = false;
49138                    }
49139                  }
49140                } else {
49141                  ref3 = this.data[jQuery(filterValue).attr("id")];
49142                  for (i in ref3) {
49143                    val = ref3[i];
49144                    values[i] || (values[i] = val);
49145                  }
49146                }
49147              }
49148              this.activeFilters[jQuery(activeFilter).attr("data-filter")] = values;
49149            }
49150            if (jQuery(".filter.active").length > 0) {
49151              jQuery("span.reset").show();
49152            } else {
49153              jQuery("span.reset").hide();
49154            }
49155            this.selectedStatePerProduct = (function() {
49156              var m, ref4, results;
49157              results = [];
49158              for (i = m = 0, ref4 = this.products.length; 0 <= ref4 ? m < ref4 : m > ref4; i = 0 <= ref4 ? ++m : --m) {
49159                results.push(this.isSelected(i));
49160              }
49161              return results;
49162            }).call(this);
49163            jQuery(".product-list tbody tr.filtered").removeClass("filtered hidden");
49164            jQuery("a#show-all-products").removeClass("visible");
49165            shownProducts = 0;
49166            jQuery(".product-list tbody tr").each((index2, element) => {
49167              if (maxProducts > 0 && shownProducts >= maxProducts) {
49168                jQuery("a#show-all-products").addClass("visible").show();
49169                jQuery("a#show-all-products span").html(this.selectedStatePerProduct.filter(Boolean).length - maxProducts);
49170                return false;
49171              } else if (this.selectedStatePerProduct[index2]) {
49172                jQuery(element).addClass("filtered");
49173                return shownProducts++;
49174              }
49175            });
49176            jQuery(".product-list tbody tr:not(.filtered) input[type='checkbox']:checked").trigger("click");
49177            if (jQuery(".product-list tbody tr.filtered").length === 0) {
49178              this.showNoResultsMessage();
49179            }
49180            jQuery(".view-options").find("#feature-view").removeClass("disable");
49181            if (jQuery(".product-list tbody tr.filtered").length === 1) {
49182              this.disableFeatureView();
49183            }
49184            if (jQuery(".product-list tbody tr.filtered").length > 1) {
49185              this.previousView();
49186            }
49187            this.processFilterResults();
49188            if (jQuery(".product-list table thead tr th:not(.hidden)").length <= 2) {
49189              return this.disableFeatureView();
49190            }
49191          }
49192          previousView() {
49193            if (this.viewState === "feature-view" && jQuery(".view.selected").attr("id") !== "feature-view") {
49194              return jQuery(".view-options .view#feature-view").click();
49195            }
49196          }
49197          disableFeatureView() {
49198            this.showDescription();
49199            jQuery("#feature-view").removeClass("selected");
49200            jQuery("#description-view").addClass("selected");
49201            return jQuery(".view-options").find("#feature-view").addClass("disable");
49202          }
49203          processFilterResults() {
49204            this.setFilterCounts();
49205            this.hideFiltersWithSingleOption();
49206            if (!this.isMobile) {
49207              return this.hideColumns();
49208            }
49209          }
49210          setFilterCounts() {
49211            var count, filter, i, multiValued, name, option, ref, results, values;
49212            ref = this.data;
49213            results = [];
49214            for (filter in ref) {
49215              values = ref[filter];
49216              option = jQuery("#" + filter);
49217              filter = option.parents(".filter");
49218              count = 0;
49219              if (filter.hasClass("active")) {
49220                multiValued = filter.attr("data-multivalued") === "1";
49221                name = filter.attr("data-filter");
49222                i = 0;
49223                while (i < this.products.length) {
49224                  if ((multiValued && this.isSelected(i) || !multiValued && this.isSelected(i, name)) && values[i]) {
49225                    count += 1;
49226                  }
49227                  i++;
49228                }
49229              } else {
49230                i = 0;
49231                while (i < this.products.length) {
49232                  if (this.selectedStatePerProduct[i] && values[i]) {
49233                    count += 1;
49234                  }
49235                  i++;
49236                }
49237              }
49238              jQuery(option).siblings("span").html("(" + count + ")");
49239              jQuery(option).parents("li").attr("data-count", count);
49240              if (count > 0) {
49241                results.push(filter.removeClass("disabled"));
49242              } else {
49243                results.push(void 0);
49244              }
49245            }
49246            return results;
49247          }
49248          hideFiltersWithSingleOption() {
49249            return jQuery(this.el).find(".filter").each((index, filter) => {
49250              var columnIndex, name;
49251              name = jQuery(filter).attr("data-filter");
49252              jQuery(filter).find("li input").each((index2, option) => {
49253                return jQuery(option).parents("li").toggleClass("disabled", parseInt(j
49253Query(option).parents("li").attr("data-count")) === 0);
49254              });
49255              columnIndex = jQuery(".product-list table th").index(".product-list table th[data-filter='" + name + "']");
49256              if (!jQuery(filter).hasClass("hidden")) {
49257                jQuery(".product-list table").addClass("col-" + (columnIndex + 1));
49258              }
49259              if (this.el.find(".filter:not(.hidden)").length === 0) {
49260                return this.el.addClass("no-filters");
49261              }
49262            });
49263          }
49264          hideColumns() {
49265            var columnsShown, columnsShownLimit;
49266            columnsShownLimit = 3;
49267            columnsShown = 0;
49268            return jQuery(".product-list table th").each(function(index, header) {
49269              var uniqueValues, values;
49270              if (index > 0) {
49271                values = [];
49272                jQuery(".product-list table tr.filtered td[data-filter='" + jQuery(header).attr("data-filter") + "']").each(function(i, el) {
49273                  return values.push(jQuery(el).text());
49274                });
49275                uniqueValues = Array.from(new Set(values)).length;
49276                if (uniqueValues > 1 && columnsShown < columnsShownLimit) {
49277                  jQuery(".product-list table").addClass("col-" + (index + 1));
49278                  return columnsShown++;
49279                } else if (uniqueValues <= 1 || columnsShown === columnsShownLimit) {
49280                  return jQuery(".product-list table").removeClass("col-" + (index + 1));
49281                }
49282              }
49283            });
49284          }
49285          showNoResultsMessage() {
49286            jQuery("#no-results").show();
49287            jQuery("table.details").hide();
49288            return jQuery(".view-options").hide();
49289          }
49290          hideNoResultsMessage() {
49291            jQuery("#no-results").hide();
49292            jQuery("table.details").show();
49293            return jQuery(".view-options").show();
49294          }
49295          trackEvent(event2) {
49296            var action, label;
49297            action = jQuery(event2.currentTarget).attr("data-ga-action");
49298            label = jQuery(event2.currentTarget).attr("data-ga-label");
49299            return window.trackEvent("Product family", action, label);
49300          }
49301        };
49302        document.addEventListener("DOMContentLoaded", function() {
49303          if (jQuery(".product-selector").length > 0) {
49304            return window.productSelector != null ? window.productSelector : window.productSelector = new ProductSelector(jQuery(".product-selector"));
49305          }
49306        });
49307        window.onpageshow = function(e) {
49308          var selectedOptions, selectedProducts;
49309          if (jQuery(".product-selector").length > 0 && (e.persisted || window.performance.navigation.type === 2)) {
49310            selectedOptions = jQuery(".filter input:checked").click();
49311            selectedProducts = jQuery(".product-list input:checked").click();
49312            window.productSelector.initState();
49313            selectedOptions.click();
49314            return selectedProducts.click();
49315          }
49316        };
49317      }).call(exports);
49318    }
49319  });
49320
49321  // apps/base/assets/javascripts/components/catalogue/shortener.coffee
49322  var require_shortener = __commonJS({
49323    "apps/base/assets/javascripts/components/catalogue/shortener.coffee"(exports) {
49324      "use strict";
49325      init_esbuild_shims();
49326      (function() {
49327        var shortener;
49328        shortener = function(selector, itemSelector, count, useParent) {
49329          return jQuery(selector).each(function() {
49330            var el, label, total;
49331            el = jQuery(this);
49332            total = el.find(itemSelector).length;
49333            if (total - 1 > count) {
49334              el.addClass("shortened").find(`${itemSelector}:gt(${count - 1})`).hide();
49335              label = el.data("show-label");
49336              return jQuery(`<a class='show-label'>${label} (${total})</a>`).appendTo(useParent ? el.parent() : el).click(function() {
49337                jQuery(this).hide();
49338                return el.find(itemSelector).show();
49339              });
49340            }
49341          });
49342        };
49343        if (jQuery(".productcompare-filter").length > 0) {
49344          shortener(".filter", "label", 5);
49345          shortener(".rowfilter", "label", 5, true);
49346          shortener(".inputgroup", "label", 10, true);
49347        }
49348      }).call(exports);
49349    }
49350  });
49351
49352  // apps/base/assets/javascripts/components/catalogue/slider.coffee
49353  var require_slider = __commonJS({
49354    "apps/base/assets/javascripts/components/catalogue/slider.coffee"(exports) {
49355      "use strict";
49356      init_esbuild_shims();
49357      (function() {
49358        var swipeSlide;
49359        jQuery("#slider ul.tabs li").on("click", function(event2) {
49360          var slide;
49361          slide = jQuery(this).data("slide");
49362          jQuery(this).addClass("active").siblings().removeClass("active");
49363          jQuery("#slider ul.slides li[data-slide=" + slide + "]").attr("class", "active").prevAll().attr("class", "prev");
49364          return jQuery("#slider ul.slides li[data-slide=" + slide + "]").nextAll().attr("class", "next");
49365        });
49366        swipeSlide = function(event2, direction, distance, duration, fingerCount) {
49367          var currentSlide, nextslide;
49368          currentSlide = jQuery("ul.slides").find("li.active").data("slide");
49369          nextslide;
49370          if (direction === "left") {
49371            nextslide = currentSlide + 1;
49372            if (jQuery("li").data(nextslide)) {
49373              jQuery(`ul.slides > li[data-slide=${nextslide}]`).attr("class", "active").prevAll().attr("class", "prev");
49374              jQuery(`ul.tabs > li[data-slide=${nextslide}]`).addClass("active").siblings().removeClass("active");
49375            }
49376          }
49377          if (direction === "right") {
49378            nextslide = currentSlide - 1;
49379            if (jQuery("li").data(nextslide)) {
49380              jQuery(`ul.slides > li[data-slide=${nextslide}]`).attr("class", "active").nextAll().attr("class", "next");
49381              return jQuery(`ul.tabs > li[data-slide=${nextslide}]`).addClass("active").siblings().removeClass("active");
49382            }
49383          }
49384        };
49385        jQuery("#slider").swipe({
49386          fingers: 1,
49387          swipeLeft: swipeSlide,
49388          swipeRight: swipeSlide,
49389          allowPageScroll: "horizontal"
49390        });
49391      }).call(exports);
49392    }
49393  });
49394
49395  // apps/base/assets/javascripts/components/categories-filter/option.coffee
49396  var require_option = __commonJS({
49397    "apps/base/assets/javascripts/components/categories-filter/option.coffee"(exports, module) {
49398      "use strict";
49399      init_esbuild_shims();
49400      (function() {
49401        var CategoryOption;
49402        CategoryOption = class CategoryOption {
49403          constructor(option, handleFiltering) {
49404            this.attachEventHandlers = this.attachEventHandlers.bind(this);
49405            this.enableOption = this.enableOption.bind(this);
49406            this.disableOption = this.disableOption.bind(this);
49407            this.isChecked = this.isChecked.bind(this);
49408            this.deselectOption = this.deselectOption.bind(this);
49409            this.show = this.show.bind(this);
49410            this.hide = this.hide.bind(this);
49411            this.option = option;
49412            this.handleFiltering = handleFiltering;
49413            this.attachEventHandlers();
49414            this.name = this.option.attr("name");
49415            this.label = this.option.siblings("label");
49416          }
49417          attachEventHandlers() {
49418            return this.option.on("change", (e) => {
49419              return this.handleFiltering(this, this.isChecked());
49420            });
49421          }
49422          enableOption() {
49423            this.option.removeAttr("disabled");
49424            return this.label.removeClass("disabled");
49425          }
49426          disableOption() {
49427            if (!this.isChecked()) {
49428              this.option.attr("disabled", true);
49429            }
49430            if (!this.isChecked()) {
49431              return this.label.addClass("disabled");
49432            }
49433          }
49434          isChecked() {
49435            return this.option.prop("checked");
49436          }
49437          deselectOption() {
49438            return this.option.prop("checked", false);
49439          }
49440          show() {
49441            return this.option.parent().show();
49442          }
49443          hide() {
49444            return this.option.parent().hide();
49445          }
49446        };
49447        module.exports = CategoryOption;
49448      }).call(exports);
49449    }
49450  });
49451
49452  // apps/base/assets/javascripts/components/categories-filter/category.coffee
49453  var require_category = __commonJS({
49454    "apps/base/assets/javascripts/components/categories-filter/category.coffee"(exports, module) {
49455      "use strict";
49456      init_esbuild_shims();
49457      (function() {
49458        var Category, CategoryOption;
49459        CategoryOption = require_option();
49460        Category = class Category {
49461          constructor(category, updateListing, name, toggleClearButton) {
49462            this.attachEventHandlers = this.attachEventHandlers.bind(this);
49463            this.initOptions = this.initOptions.bind(this);
49464            this.handleFiltering = this.handleFiltering.bind(this);
49465            this.updatePage = this.updatePage.bind(this);
49466            this.clearOptions = this.clearOptions.bind(this);
49467            this.resetFilters = this.resetFilters.bind(this);
49468            this.handleCount = this.handleCount.bind(this);
49469            this.disableCategory = this.disableCategory.bind(this);
49470            this.enableCategory = this.enableCategory.bind(this);
49471            this.uncheckAllOptions = this.uncheckAllOptions.bind(this);
49472            this.updateCheckboxesCount = this.updateCheckboxesCount.bind(this);
49473            this.addSelectedFilter = this.addSelectedFilter.bind(this);
49474            this.removeSelectedFilter = this.removeSelectedFilter.bind(this);
49475            this.resetCount = this.resetCount.bind(this);
49476            this.disableAllOptions = this.disableAllOptions.bind(this);
49477            this.enableAllOptions = this.enableAllOptions.bind(this);
49478            this.enableSingleOption = this.enableSingleOption.bind(this);
49479            this.deleteOptions = this.deleteOptions.bind(this);
49480            this.appendOption = this.appendOption.bind(this);
49481            this.optionToHtml = this.optionToHtml.bind(this);
49482            this.updateOptions = this.updateOptions.bind(this);
49483            this.collectFilterValues = this.collectFilterValues.bind(this);
49484            this.filterOptions = this.filterOptions.bind(this);
49485            this.category = category;
49486            this.updateListing = updateListing;
49487            this.toggleClearButton = toggleClearButton;
49488            this.name = name;
49489            this.options = this.initOptions();
49490            this.numberSelected = 0;
49491            this.selectedFilters = [];
49492            this.attachEventHandlers();
49493          }
49494          attachEventHandlers() {
49495            return jQuery(window).on("enable-options", () => {
49496              return this.filterOptions();
49497            });
49498          }
49499          initOptions() {
49500            return $.map(this.category.find(".options .option input"), (option, index) => {
49501              return new CategoryOption(jQuery(option), this.handleFiltering);
49502            });
49503          }
49504          handleFiltering(checkbox, checkBoxIsChecked) {
49505            if (checkBoxIsChecked) {
49506              this.addSelectedFilter(checkbox.name);
49507            } else {
49508              this.removeSelectedFilter(checkbox.name);
49509            }
49510            return this.updatePage();
49511          }
49512          updatePage() {
49513            this.updateListing();
49514            this.updateCheckboxesCount();
49515            this.disableAllOptions();
49516            return this.toggleClearButton();
49517          }
49518          clearOptions() {
49519            this.selectedFilters = [];
49520            this.handleCount();
49521            return this.uncheckAllOptions();
49522          }
49523          resetFilters() {
49524            this.handleCount();
49525            this.deleteOptions();
49526            return this.selectedFilters = [];
49527          }
49528          handleCount() {
49529            return this.resetCount();
49530          }
49531          disableCategory() {
49532            return this.category.addClass("disabled");
49533          }
49534          enableCategory() {
49535            return this.category.removeClass("disabled");
49536          }
49537          uncheckAllOptions() {
49538            return $.each(this.options, (index, option) => {
49539              return option.deselectOption();
49540            });
49541          }
49542          updateCheckboxesCount() {
49543            return this.numberSelected = this.category.find(".options .option input:checked").length;
49544          }
49545          addSelectedFilter(filter) {
49546            return this.selectedFilters.push(filter);
49547          }
49548          removeSelectedFilter(filter) {
49549            return this.selectedFilters.splice($.inArray(filter, this.selectedFilters), 1);
49550          }
49551          resetCount() {
49552            return this.numberSelected = 0;
49553          }
49554          disableAllOptions() {
49555            return $.each(this.options, (index, option) => {
49556              return option.disableOption();
49557            });
49558          }
49559          enableAllOptions() {
49560            return $.each(this.options, (index, option) => {
49561              return option.enableOption();
49562            });
49563          }
49564          enableSingleOption() {
49565            return $.each(this.options, (index, option) => {
49566              if (option.isChecked()) {
49567                return option.enableOption();
49568              }
49569            });
49570          }
49571          deleteOptions() {
49572            return this.category.find(".options .option").remove();
49573          }
49574          appendOption(option) {
49575            return this.category.find(".options").append(this.optionToHtml(option));
49576          }
49577          optionToHtml(option) {
49578            return "<div class='option'> <input type='checkbox' name='" + option + "' id='" + option + "' value='" + option + "'> <label for='" + option + "'>" + option + "</label> </div>";
49579          }
49580          updateOptions(options) {
49581            this.resetFilters();
49582            $.each(options, (index, option) => {
49583              return this.appendOption(option);
49584            });
49585            this.options = this.initOptions();
49586            return this.enableAllOptions();
49587          }
49588          collectFilterValues(values, result) {
49589            if (Array.isArray(values)) {
49590              return jQuery.each(values, (i, v) => {
49591                return this.collectFilterValues(v, result);
49592              });
49593            } else if (values) {
49594              return result.push(String(values));
49595            }
49596          }
49597          filterOptions() {
49598            var $listing, availableValues;
49599            this.disableAllOptions();
49600            availableValues = [];
49601            $listing = this.category.closest("section.listing");
49602            $listing.find(".cards.active [data-filters]").each((i, el) => {
49603              var e, raw;
49604              raw = el.getAttribute("data-filters");
49605              if (!(raw && raw !== "")) {
49606                console.warn("[Category] data-filters attribute is missing or empty on element:", el);
49607                return;
49608              }
49609              try {
49610                return this.collectFilterValues(JSON.parse(raw), availableValues);
49611              } catch (error) {
49612                e = error;
49613                return console.warn("[Category] Failed to parse data-filters JSON:", raw, e);
49614              }
49615            });
49616            if (availableValues.length > 0) {
49617              return $.each(this.options, (index, option) => {
49618                if (jQuery.inArray(option.name, availableValues) >= 0) {
49619                  return option.enableOption();
49620                }
49621              });
49622            } else {
49623              return this.enableAllOptions();
49624            }
49625          }
49626        };
49627        module.exports = Category;
49628      }).call(exports);
49629    }
49630  });
49631
49632  // apps/base/assets/javascripts/components/categories-filter/categories_filter.coffee
49633  var require_categories_filter = __commonJS({
49634    "apps/base/assets/javascripts/components/categories-filter/categories_filter.coffee"(exports) {
49635      "use strict";
49636      init_esbuild_shims();
49637      (function() {
49638        var CategoriesFilter, Category;
49639        Category = require_category();
49640        CategoriesFilter = class CategoriesFilter {
49641          constructor(filters1) {
49642            this.initCategories = this.initCategories.bind(this);
49643            this.attachEventHandlers = this.attachEventHandlers.bind(this);
49644            this.attachMobileCategoryNameHandler = this.attachMobileCategoryNameHandler.bind(this);
49645            this.triggerUpdateListing = this.triggerUpdateListing.bind(this);
49646            this.hasOptionsSelected = this.hasOptionsSelected.bind(this);
49647            this.updateListing = this.updateListing.bind(this);
49648            this.toggleClearButton = this.toggleClearButton.bind(this);
49649            this.updateOptions = this.updateOptions.bind(this);
49650            this.filters = filters1;
49651            this.clearButton = this.filters.find(".clear");
49652            this.categories = {};
49653            this.initCategories();
49654            this.attachEventHandlers();
49655            this.attachMobileCategoryNameHandler();
49656          }
49657          initCategories() {
49658            return jQuery.each(this.filters.find(".category"), (index, category) => {
49659              var categoryName;
49660              categoryName = jQuery(category).data("filter");
49661              return this.categories[categoryName] = new Category(jQuery(category), this.updateListing, categoryName, this.toggleClearButton);
49662            });
49663          }
49664          attachEventHandlers() {
49665            jQuery(".listing-tabs").on("tab-change", (event2, content, tab) => {
49666              this.updateOptions(jQuery(tab).data("categories"));
49667              return this.triggerUpdateListing();
49668            });
49669            jQuery(window).on("filtered-paginate", (event2, updateFilters) => {
49670              var filters;
49671              filters = {};
49672              jQuery.map(this.categories, (category, name) => {
49673                if (category.selectedFilters.length) {
49674                  return filters[category.name] = category.selectedFilters;
49675                }
49676              });
49677              return updateFilters(filters);
49678            });
49679            return jQuery(this.clearButton).on("click", () => {
49680              $.each(this.categories, (name, category) => {
49681                return category.clearOptions();
49682              });
49683              return this.updateListing();
49684            });
49685          }
49686          attachMobileCategoryNameHandler() {
49687            if (window.innerWidth < 800) {
49688              return this.filters.find(".category .name").on("click", (e) => {
49689                var $category, $options;
49690                $category = jQuery(e.currentTarget).closest(".category");
49691                $options = $category.find(".options");
49692                return $options.toggle();
49693              });
49694            }
49695          }
49696          triggerUpdateListing(filters = {}) {
49697            jQuery(window).trigger("filtered-update-listing", filters);
49698            return this.toggleClearButton();
49699          }
49700          hasOptionsSelected() {
49701            var optionsSelected;
49702            optionsSelected = false;
49703            $.each(this.categories, (name, category) => {
49704              if (category.numberSelected) {
49705                return optionsSelected = true;
49706              }
49707            });
49708            return optionsSelected;
49709          }
49710          updateListing() {
49711            var filters;
49712            filters = {};
49713            jQuery.map(this.categories, (category, name) => {
49714              return filters[category.name] = category.selectedFilters;
49715            });
49716            return this.triggerUpdateListing(filters);
49717          }
49718          toggleClearButton() {
49719            if (this.hasOptionsSelected()) {
49720              return this.clearButton.show();
49721            } else {
49722              return this.clearButton.hide();
49723            }
49724          }
49725          updateOptions(categories) {
49726            return jQuery.map(categories, (options, name) => {
49727              if (this.categories[name]) {
49728                return this.categories[name].updateOptions(options);
49729              }
49730            });
49731          }
49732        };
49733        if (jQuery("div.categories-filter").length > 0) {
49734          new CategoriesFilter(jQuery("div.categories-filter"));
49735        }
49736      }).call(exports);
49737    }
49738  });
49739
49740  // apps/base/assets/javascripts/components/categories_filter.coffee
49741  var require_categories_filter2 = __commonJS({
49742    "apps/base/assets/javascripts/components/categories_filter.coffee"(exports) {
49743      "use strict";
49744      init_esbuild_shims();
49745      (function() {
49746        require_option();
49747        require_category();
49748        require_categories_filter();
49749      }).call(exports);
49750    }
49751  });
49752
49753  // apps/base/assets/javascripts/components/country_selector.coffee
49754  var require_country_selector = __commonJS({
49755    "apps/base/assets/javascripts/components/country_selector.coffee"(exports) {
49756      "use strict";
49757      init_esbuild_shims();
49758      (function() {
49759        jQuery(".countryselection span.with-arrow").on("click", function(event2) {
49760          event2.preventDefault();
49761          return jQuery(this).closest(".countryselection").toggleClass("active");
49762        });
49763        jQuery(".countrylist header a").on("click", function(event2) {
49764          var targetContinent;
49765          targetContinent = jQuery(this).data("tab");
49766          jQuery(this).addClass("active").siblings().removeClass("active");
49767          return jQuery("#" + targetContinent).addClass("active").siblings().removeClass("active");
49768        });
49769        jQuery(".countryselection").on("mouseleave", function() {
49770          return jQuery(this).removeClass("active");
49771        });
49772        jQuery(".countryselection-mobile").on("click", function(event2) {
49773          var icon;
49774          jQuery(".country-overview").toggleClass("country-active");
49775          icon = jQuery(this).find("i.fas");
49776          if (!icon.length) {
49777            return;
49778          }
49779          if (icon.hasClass("fa-caret-down")) {
49780            icon.removeClass("fa-caret-down");
49781            return icon.addClass("fa-caret-up");
49782          } else {
49783            icon.removeClass("fa-caret-up");
49784            return icon.addClass("fa-caret-down");
49785          }
49786        });
49787      }).call(exports);
49788    }
49789  });
49790
49791  // apps/base/assets/javascripts/components/data-tables/templates/date-picker.jst.hamlc
49792  var require_date_picker_jst = __commonJS({
49793    "apps/base/assets/javascripts/components/data-tables/templates/date-picker.jst.hamlc"(exports) {
49794      "use strict";
49795      init_esbuild_shims();
49796      (function() {
49797        if (window.HAML == null) {
49798          window.HAML = {};
49799        }
49800        window.HAML["date_picker"] = function(context) {
49801          return (function() {
49802            var $c, $e, $o;
49803            $e = function(text, escape2) {
49804              return ("" + text).replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/'/g, "&#39;").replace(/\//g, "&#47;").replace(/"/g, "&quot;");
49805            };
49806            $c = function(text) {
49807              switch (text) {
49808                case null:
49809                case void 0:
49810                  return "";
49811                case true:
49812                case false:
49813                  return "\x93" + text;
49814                default:
49815                  return text;
49816              }
49817            };
49818            $o = [];
49819            $o.push("<div class='filter'>\n  <div class='date-input icon-calendar-after'>\n    <input class='date-picker' id='filter-start' type='text' placeholder='" + $e($c(jQuery("#previous-requests").data("startDate"))) + "'>\n    <div class='date-input-view' id='filter-start'></div>\n  </div>\n  <div class='date-input icon-calendar-after'>\n    <input class='date-picker' id='filter-end' type='text' placeholder='" + $e($c(jQuery("#previous-requests").data("endDate"))) + "'>\n    <div class='date-input-view' id='filter-end'></div>\n  </div>\n</div>");
49820            return $o.join("\n").replace(/\s([\w-]+)='“true'/mg, " $1").replace(/\s([\w-]+)='“false'/mg, "").replace(/\s(?:id|class)=(['"])(\1)/mg, "");
49821          }).call(context);
49822        };
49823      }).call(exports);
49824    }
49825  });
49826
49827  // apps/base/assets/javascripts/components/data-tables/views/data_table_view.coffee
49828  var require_data_table_view = __commonJS({
49829    "apps/base/assets/javascripts/components/data-tables/views/data_table_view.coffee"(exports, module) {
49830      "use strict";
49831      init_esbuild_shims();
49832      (function() {
49833        var DataTableView;
49834        DataTableView = class DataTableView {
49835          constructor(tableView) {
49836            this.selectAllRows = this.selectAllRows.bind(this);
49837            this.initDataTable = this.initDataTable.bind(this);
49838            this.showHeader = this.showHeader.bind(this);
49839            this.hideHeader = this.hideHeader.bind(this);
49840            this.showFooter = this.showFooter.bind(this);
49841            this.hideFooter = this.hideFooter.bind(this);
49842            this.hideInfo = this.hideInfo.bind(this);
49843            this.settings = this.settings.bind(this);
49844            this.removeRowById = this.removeRowById.bind(this);
49845            this.generateClassNames = this.generateClassNames.bind(this);
49846            this.initControls = this.initControls.bind(this);
49847            this.appendControls = this.appendControls.bind(this);
49848            this.setElements = this.setElements.bind(this);
49849            this.toggleControls = this.toggleControls.bind(this);
49850            this.moreThanOnePage = this.moreThanOnePage.bind(this);
49851            this.attachControlsEventHandlers = this.attachControlsEventHandlers.bind(this);
49852            this.initDatepickers = this.initDatepickers.bind(this);
49853            this.initDatePicker = this.initDatePicker.bind(this);
49854            this.initFilter = this.initFilter.bind(this);
49855            this.tableView = tableView;
49856            this.collapsibleTable = false;
49857            this.tableLength = 10;
49858            this.info = "<b>_TOTAL_</b> rows";
49859            this.expandedTableLength = 50;
49860            this.emptyTableMessage = this.tableView.data("empty") || "No data available in table";
49861            this.shouldPaginate = true;
49862            this.search = false;
49863            this.searchPlaceholder = this.tableView.data("search") || "Search";
49864            this.previousPlaceholder = this.tableView.data("previous") || "Previous";
49865            this.nextPlaceholder = this.tableView.data("next") || "Next";
49866            this.showmorePlaceholder = this.tableView.data("showmore") || "Show more";
49867            this.hidePlaceholder = this.tableView.data("hide") || "Hide";
49868            this.totalsRowIndex = [];
49869            this.cellClasses = [];
49870            this.ordering = true;
49871            this.columnsOrderingDisabled = [];
49872            this.hasCheckboxes = false;
49873            this.scrollX = false;
49874          }
49875          selectAllRows() {
49876            return this.tableView.find('thead tr th:first-child input[type="checkbox"]').off().on("click", (e) => {
49877              var isSelected, j, len, ref, row;
49878              isSelected = jQuery(e.target).is(":checked");
49879              ref = this.dataTable.rows().nodes();
49880              for (j = 0, len = ref.length; j < len; j++) {
49881                row = ref[j];
49882                jQuery(row).find('td:first-child input[type="checkbox"]').prop("checked", isSelected);
49883              }
49884              return this.dataTable.draw();
49885            });
49886          }
49887          initDataTable() {
49888            var context;
49889            context = this;
49890            return this.table = this.tableView.DataTable({
49891              columns: this.generateClassNames(),
49892              searching: this.search,
49893              ordering: this.ordering,
49894              lengthChange: false,
49895              bPaginate: this.shouldPaginate,
49896              aaSorting: [],
49897              pageLength: this.tableLength,
49898              scrollX: this.scrollX,
49899              columnDefs: [
49900                {
49901                  "orderable": false,
49902                  "targets": this.columnsOrderingDisabled
49903                }
49904              ],
49905              language: {
49906                info: this.info,
49907                emptyTable: this.emptyTableMessage,
49908                searchPlaceholder: this.searchPlaceholder,
49909                search: "",
49910                infoFiltered: "",
49911                paginate: {
49912                  next: this.nextPlaceholder,
49913                  previous: this.previousPlaceholder
49914                }
49915              },
49916              createdRow: (e) => {
49917                this.showHeader();
49918                return this.showFooter();
49919              },
49920              initComplete: (e) => {
49921                this.tableWrapper = this.tableView.parent();
49922                if (this.collapsibleTable) {
49923                  this.numberOfRows = e.aoData.length;
49924                  return this.initControls();
49925                } else if (!e.aoData.length) {
49926                  this.hideHeader();
49927                  return this.hideInfo();
49928                }
49929              },
49930              fnDrawCallback: (oSettings) => {
49931                if (this.hasCheckboxes) {
49932                  this.selectAllRows();
49933                }
49934                if (oSettings._iDisplayLength > oSettings.fnRecordsDisplay()) {
49935                  return $(oSettings.nTableWrapper).find(".dataTables_paginate").hide();
49936                } else {
49937                  return $(oSettings.nTableWrapper).find(".dataTables_paginate").show();
49938                }
49939              },
49940              footerCallback: function(row, data, start, end, display) {
49941                var api, columnIndex, intVal, j, len, pageTotal, ref, results;
49942                if (context.totalsRowIndex.length) {
49943                  api = this.api();
49944                  ref = context.totalsRowIndex;
49945                  results = [];
49946                  for (j = 0, len = ref.length; j < len; j++) {
49947                    columnIndex = ref[j];
49948                    intVal = function(i) {
49949                      if (typeof i === "string") {
49950                        return i.replace(/[\$,]/g, "") * 1;
49951                      } else if (typeof i === "number") {
49952                        return i;
49953                      } else {
49954                        return 0;
49955                      }
49956                    };
49957                    if (api.column(columnIndex).data().length) {
49958                      pageTotal = api.column(columnIndex, {
49959                        page: "current"
49960                      }).data().reduce(function(a, b) {
49961                        return Math.round((intVal(a) + intVal(b)) * 100) / 100;
49962                      });
49963                    } else {
49964                      pageTotal = 0;
49965                    }
49966                    results.push(jQuery(api.column(columnIndex).footer()).html("\u20AC" + parseFloat(pageTotal).toFixed(2)));
49967                  }
49968                  return results;
49969                }
49970              }
49971            });
49972          }
49973          show() {
49974            return this.tableView.show();
49975          }
49976          hide() {
49977            return this.tableView.hide();
49978          }
49979          showHeader() {
49980            return this.tableView.find("thead").show();
49981          }
49982          hideHeader() {
49983            return this.tableView.find("thead").hide();
49984          }
49985          showFooter() {
49986            return this.tableView.find("tfoot").css("visibility", "visible");
49987          }
49988          hideFooter() {
49989            return this.tableView.find("tfoot").css("visibility", "hidden");
49990          }
49991          hideInfo() {
49992            return this.tableWrapper.find(".dataTables_info").hide();
49993          }
49994          settings() {
49995            return this.dataTable.settings();
49996          }
49997          removeRowById(id) {
49998            return this.dataTable.row(jQuery("#" + id)).remove().draw();
49999          }
50000          generateClassNames() {
50001            var column, j, len, ref;
50002            if (this.COLUMNS) {
50003              this.cellClasses = [];
50004              ref = this.COLUMNS;
50005              for (j = 0, len = ref.length; j < len; j++) {
50006                column = ref[j];
50007                this.cellClasses.push({
50008                  className: column
50009                });
50010              }
50011            }
50012            if (this.cellClasses.length) {
50013              return this.cellClasses;
50014            } else {
50015              return null;
50016            }
50017          }
50018          initControls() {
50019            this.pagination = jQuery(this.tableView).closest(".dataTables_wrapper").find(".dataTables_paginate");
50020            if (this.numberOfRows > this.tableLength) {
50021              this.appendControls();
50022              this.setElements();
50023              this.attachControlsEventHandlers();
50024            } else if (!this.numberOfRows) {
50025              this.hideHeader();
50026              this.hideInfo();
50027            }
50028            return this.pagination.toggle(false);
50029          }
50030          appendControls() {
50031            this.tableWrapper.append('<a class="show-more">' + this.showmorePlaceholder + "</a>");
50032            this.tableWrapper.append('<a class="hide">' + this.hidePlaceholder + "</a>");
50033            return this.tableView.append('<div class="gradient"></div>');
50034          }
50035          setElements() {
50036            this.showMoreButton = this.tableWrapper.find(".show-more");
50037            this.hideButton = this.tableWrapper.find(".hide");
50038            return this.gradient = this.tableWrapper.find(".gradient");
50039          }
50040          toggleControls() {
50041            this.showMoreButton.toggle();
50042            this.hideButton.toggle();
50043            return this.gradient.toggle();
50044          }
50045          moreThanOnePage() {
50046            return this.dataTable.page.info().pages > 1;
50047          }
50048          attachControlsEventHandlers() {
50049            this.showMoreButton.on("click", (e) => {
50050              this.settings()[0]._iDisplayLength = this.settings()[0].fnRecordsTotal();
50051              this.dataTable.page.len(this.expandedTableLength).draw();
50052              this.toggleControls();
50053              this.pagination.toggle(this.moreThanOnePage());
50054              if (this.popup) {
50055                this.popup.initPopup();
50056              }
50057              if (this.pendingRequests) {
50058                return this.initPendingRequests();
50059              }
50060            });
50061            return this.hideButton.on("click", (e) => {
50062              this.settings()[0]._iDisplayLength = this.tableLength;
50063              this.dataTable.draw();
50064              this.toggleControls();
50065              this.pagination.toggle(false);
50066              return jQuery("html, body").animate({
50067                scrollTop: this.tableView.offset().top - 160
50068              }, 300);
50069            });
50070          }
50071          initDatepickers(tableContainer, dateIndex) {
50072            var lang, startPicker;
50073            this.tableContainer = tableContainer;
50074            startPicker = jQuery(".date-picker#filter-start");
50075            lang = startPicker.data("language");
50076            jQuery.fn.datepicker.dates[lang] = jQuery.fn.datepicker.dates["en"];
50077            jQuery.fn.datepicker.dates[lang].months = startPicker.data("months");
50078            jQuery.fn.datepicker.dates[lang].monthsShort = startPicker.data("months-abbr");
50079            this.initDatePicker("filter-start", lang);
50080            this.initDatePicker("filter-end", lang);
50081            return this.tableContainer.find(".date-picker").on("change", (e) => {
50082              jQuery.fn.dataTableExt.afnFiltering.push(function(oSettings, aData, iDataIndex) {
50083                var beg, end;
50084                if (jQuery(oSettings.nTable).hasClass("has-date-filter")) {
50085                  beg = jQuery("#filter-start").datepicker("getDate");
50086                  end = jQuery("#filter-end").datepicker("getDate");
50087                  if (typeof aData._date === "undefined") {
50088                    aData._date = (/* @__PURE__ */ new Date("1 " + $(".request-month").attr("data-beginning"))).getTime();
50089                  }
50090                  if (beg && !isNaN(beg)) {
50091                    if (aData._date < beg.getTime()) {
50092                      return false;
50093                    }
50094                  }
50095                  if (end && !isNaN(end)) {
50096                    if (aData._date > end.getTime()) {
50097                      return false;
50098                    }
50099                  }
50100                }
50101                return true;
50102              });
50103              return this.dataTable.draw();
50104            });
50105          }
50106          initDatePicker(id, lang) {
50107            return jQuery(".date-picker#" + id).datepicker({
50108              autoclose: true,
50109              format: {
50110                toDisplay: (date, format, language) => {
50111                  jQuery("#" + id + "_month").val(date);
50112                  return this.localizedDateString(language, date);
50113                },
50114                toValue: (date, format, language) => {
50115                  return void 0;
50116                }
50117              },
50118              minViewMode: 1,
50119              container: ".date-input-view#" + id,
50120              orientation: "bottom right",
50121              language: lang
50122            });
50123          }
50124          localizedDateString(language, date) {
50125            var string;
50126            string = date.toLocaleDateString(language, {
50127              month: "long"
50128            }) + " " + date.toLocaleDateString(language, {
50129              year: "numeric"
50130            });
50131            return string[0].toUpperCase() + string.substr(1);
50132          }
50133          initFilter(columnIndex) {
50134            this.tableView.find(".status-filter, .active-filters").on("click", (e) => {
50135              var activeFilters, filters, input, j, len, ref;
50136              filters = [];
50137              activeFilters = 0;
50138              ref = this.tableView.find(".filter-popup li label input");
50139              for (j = 0, len = ref.length; j < len; j++) {
50140                input = ref[j];
50141                if (jQuery(input).is(":checked")) {
50142                  filters.push(jQuery(input).data("value"));
50143                  activeFilters++;
50144                }
50145              }
50146              if (activeFilters > 0) {
50147                jQuery(".active-filters").html(activeFilters);
50148                jQuery(".active-filters").show();
50149                jQuery(".status-filter").addClass("active");
50150              } else {
50151                jQuery(".active-filters").html("");
50152                jQuery(".active-filters").hide();
50153                jQuery(".status-filter").removeClass("active");
50154              }
50155              this.tableView.DataTable().columns(columnIndex).search(filters.join("|"), true, false).draw();
50156              return this.tableView.find(".filter-popup").toggle();
50157            });
50158            return this.tableView.find(".clear-filter").on("click", (e) => {
50159              var activeFilters, filters, input, j, len, ref, results;
50160              filters = [];
50161              activeFilters = 0;
50162              jQuery(".active-filters").hide();
50163              jQuery(".status-filter").removeClass("active");
50164              ref = this.tableView.find(".filter-popup li label input");
50165              results = [];
50166              for (j = 0, len = ref.length; j < len; j++) {
50167                input = ref[j];
50168                jQuery(input).removeAttr("checked");
50169                filters.push(jQuery(input).data("value"));
50170                results.push(this.tableView.DataTable().columns(columnIndex).search(filters.join("|"), true, false).draw());
50171              }
50172              return results;
50173            });
50174          }
50175        };
50176        module.exports = DataTableView;
50177      }).call(exports);
50178    }
50179  });
50180
50181  // apps/base/assets/javascripts/components/downloads.coffee
50182  var require_downloads2 = __commonJS({
50183    "apps/base/assets/javascripts/components/downloads.coffee"(exports) {
50184      "use strict";
50185      init_esbuild_shims();
50186      (function() {
50187        jQuery(document).on("click", "div.download a.more", (event2) => {
50188          return jQuery(event2.currentTarget).toggleClass("expand").siblings().slideToggle(200);
50189        });
50190        jQuery(document).on("click", "div.compact-download a.more", (event2) => {
50191          return jQuery(event2.currentTarget).toggleClass("expand").siblings("ul").slideToggle(200);
50192        });
50193        jQuery(document).on("click", "div a.show-more-downloads", (event2) => {
50194          var oldText;
50195          jQuery(event2.currentTarget).parents(".downloads").find(".initialy-hidden").toggle();
50196          oldText = jQuery(event2.currentTarget).text();
50197          jQuery(event2.currentTarget).text(jQuery(event2.currentTarget).data("replace-text"));
50198          return jQuery(event2.currentTarget).data("replace-text", oldText);
50199        });
50200      }).call(exports);
50201    }
50202  });
50203
50204  // apps/base/assets/javascripts/components/droptarget.coffee
50205  var require_droptarget = __commonJS({
50206    "apps/base/assets/javascripts/components/droptarget.coffee"(exports) {
50207      "use strict";
50208      init_esbuild_shims();
50209      (function() {
50210        var DropTarget;
50211        DropTarget = class DropTarget {
50212          constructor($el) {
50213            this.initDropTarget = this.initDropTarget.bind(this);
50214            this.handleUpload = this.handleUpload.bind(this);
50215            this.populateFileInformation = this.populateFileInformation.bind(this);
50216            this.$el = $el;
50217            this.dropTarget = this.$el;
50218            this.file = [];
50219            this.initDropTarget();
50220          }
50221          initDropTarget() {
50222            this.dropTarget.on("click", (e) => {
50223              if (this.dropTarget.hasClass("uploaded")) {
50224                return e.preventDefault();
50225              }
50226            });
50227            this.dropTarget.on("drag dragstart dragend dragover dragenter dragleave drop", (e) => {
50228              return e.preventDefault();
50229            });
50230            this.dropTarget.on("dragover dragenter mouseenter", function(e) {
50231              if ((e.type === "dragover" || e.type === "mouseenter") && (!$(this).hasClass("added") && !$(this).hasClass("uploaded"))) {
50232                return $(this).addClass("is-dragover");
50233              }
50234            }).on("dragleave dragend drop mouseleave", function() {
50235              return $(this).removeClass("is-dragover");
50236            });
50237            this.dropTarget.find("input#file").on("change", (e) => {
50238              return this.handleUpload(e);
50239            });
50240            this.dropTarget.on("drop", (e) => {
50241              return this.handleUpload(e);
50242            });
50243            return this.dropTarget.find(".delete").on("click", function(e) {
50244              e.preventDefault();
50245              $(e.target).closest('input[type="file"]').val("");
50246              return $(e.target).closest(".droptarget").removeClass("added");
50247            });
50248          }
50249          handleUpload(event2) {
50250            this.file = event2.type === "drop" ? event2.originalEvent.dataTransfer.files[0] : event2.target.files[0];
50251            return this.populateFileInformation(this.file);
50252          }
50253          populateFileInformation(file) {
50254            this.dropTarget.addClass("added");
50255            return this.dropTarget.find(".uploaded-file .name").text(file.name);
50256          }
50257          formatFileSize(bytes) {
50258            var i, k;
50259            if (bytes === 0) {
50260              "0 Bytes";
50261            }
50262            k = 1e3;
50263            i = Math.floor(Math.log(bytes) / Math.log(k));
50264            return parseFloat((bytes / __pow(k, i)).toFixed(0)) + " " + ["Bytes", "KB", "MB", "GB"][i];
50265          }
50266        };
50267        jQuery(function() {
50268          if ($("label.droptarget").length > 0) {
50269            return new DropTarget($("label.droptarget"));
50270          }
50271        });
50272      }).call(exports);
50273    }
50274  });
50275
50276  
50276// apps/base/assets/javascripts/components/expandable_listing.ts
50277  var require_expandable_listing = __commonJS({
50278    "apps/base/assets/javascripts/components/expandable_listing.ts"() {
50279      "use strict";
50280      init_esbuild_shims();
50281      var ExpandableListing = class {
50282        constructor(opts = {}) {
50283          this.bind = () => {
50284            const eventName = `click.${this.options.namespace}`;
50285            this.options.bindTo.removeEventListener("click", this.handleClick);
50286            this.options.bindTo.addEventListener("click", this.handleClick);
50287          };
50288          this.handleClick = (e) => {
50289            const target = e.target;
50290            if (!target.matches(this.options.toggleSelector)) {
50291              return;
50292            }
50293            e.preventDefault();
50294            const root = target.closest(this.options.rootSelector);
50295            if (!root) {
50296              return;
50297            }
50298            let panel = null;
50299            const controls = target.getAttribute("aria-controls");
50300            if (controls) {
50301              panel = document.getElementById(controls);
50302            }
50303            if (!panel) {
50304              panel = root.querySelector(this.options.panelSelector);
50305            }
50306            const isExpanded = root.classList.toggle(this.options.expandedClass);
50307            target.setAttribute("aria-expanded", String(isExpanded));
50308            if (panel) {
50309              panel.hidden = !isExpanded;
50310            }
50311            const more = target.dataset.more || "Show more";
50312            const less = target.dataset.less || "Show less";
50313            target.textContent = isExpanded ? less : more;
50314          };
50315          const defaults = {
50316            rootSelector: ".expandable",
50317            // element that gets is-expanded
50318            toggleSelector: ".js-expandable-toggle",
50319            // button/link that toggles
50320            panelSelector: ".expandable__more",
50321            // collapsible area within root
50322            expandedClass: "is-expanded",
50323            namespace: "expandable",
50324            bindTo: document
50325            // delegated bind target
50326          };
50327          this.options = __spreadValues(__spreadValues({}, defaults), opts);
50328          this.bind();
50329        }
50330      };
50331      document.addEventListener("DOMContentLoaded", () => new ExpandableListing());
50332    }
50333  });
50334
50335  // apps/base/assets/javascripts/components/expandable_row.coffee
50336  var require_expandable_row = __commonJS({
50337    "apps/base/assets/javascripts/components/expandable_row.coffee"(exports) {
50338      "use strict";
50339      init_esbuild_shims();
50340      (function() {
50341        jQuery("body").on("click", "tr.togglerow", function(event2) {
50342          var row;
50343          if (!jQuery(event2.target).hasClass("delete-licence")) {
50344            row = jQuery(event2.currentTarget);
50345            row.toggleClass("open");
50346            row.find(".toggleable-angle").toggleClass("icon-angle-right icon-angle-down");
50347            row.next("tr.slidetoggle").stop().slideToggle(0);
50348            if (row.hasClass("open") && row.next("tr.slidetoggle").find("[data-feature-highlight]").length > 0) {
50349              return new FeatureShowcase(row.next("tr.slidetoggle").find("[data-feature-highlight]"));
50350            }
50351          }
50352        });
50353      }).call(exports);
50354    }
50355  });
50356
50357  // apps/base/assets/javascripts/components/export_downloader.coffee
50358  var require_export_downloader = __commonJS({
50359    "apps/base/assets/javascripts/components/export_downloader.coffee"(exports) {
50360      "use strict";
50361      init_esbuild_shims();
50362      (function() {
50363        var ExportDownloader;
50364        ExportDownloader = class ExportDownloader {
50365          constructor(el) {
50366            this.onDownloadResponse = this.onDownloadResponse.bind(this);
50367            this.awaitDownloadResponse = this.awaitDownloadResponse.bind(this);
50368            this.el = el;
50369            this.max_response_tries = 2e3;
50370            jQuery.removeCookie("download_finished", {
50371              path: "/"
50372            });
50373            jQuery(".export").addClass("pending");
50374            jQuery(".icon-loading").css("visibility", "visible");
50375            this.interval = setInterval(this.awaitDownloadResponse, 250);
50376            jQuery("#export-form").submit();
50377            this.response_tries = 0;
50378          }
50379          onDownloadResponse() {
50380            jQuery(".icon-loading").css("visibility", "hidden");
50381            jQuery(".export").removeClass("pending");
50382            jQuery.removeCookie("download_finished", {
50383              path: "/"
50384            });
50385            return clearInterval(this.interval);
50386          }
50387          awaitDownloadResponse() {
50388            if (jQuery.cookie("download_finished")) {
50389              return this.onDownloadResponse();
50390            } else if (this.response_tries < this.max_response_tries) {
50391              return this.response_tries++;
50392            } else {
50393              return this.onDownloadResponse();
50394            }
50395          }
50396        };
50397      }).call(exports);
50398    }
50399  });
50400
50401  // apps/base/assets/javascripts/components/follow_anchor.coffee
50402  var require_follow_anchor = __commonJS({
50403    "apps/base/assets/javascripts/components/follow_anchor.coffee"(exports) {
50404      "use strict";
50405      init_esbuild_shims();
50406      (function() {
50407        var followAnchor;
50408        followAnchor = function(event2) {
50409          var element, link;
50410          element = jQuery(event2.currentTarget);
50411          if (window.isMobile() && !element.hasClass("newsletter")) {
50412            link = element.find("a").attr("href");
50413            if (link) {
50414              return window.location.href = link;
50415            }
50416          }
50417        };
50418        jQuery(".cta").on("click", followAnchor);
50419        jQuery(".js-packery").find("article").on("click", followAnchor);
50420      }).call(exports);
50421    }
50422  });
50423
50424  // apps/base/assets/javascripts/components/footer.coffee
50425  var require_footer = __commonJS({
50426    "apps/base/assets/javascripts/components/footer.coffee"(exports) {
50427      "use strict";
50428      init_esbuild_shims();
50429      (function() {
50430        jQuery("footer section .icon-plus").on("click", function() {
50431          return jQuery(this).closest(".footer-list").addClass("expanded");
50432        });
50433        jQuery("footer section .icon-minus-circle").on("click", function() {
50434          return jQuery(this).closest(".footer-list").removeClass("expanded");
50435        });
50436      }).call(exports);
50437    }
50438  });
50439
50440  // apps/base/assets/javascripts/components/footer-old.coffee
50441  var require_footer_old = __commonJS({
50442    "apps/base/assets/javascripts/components/footer-old.coffee"(exports) {
50443      "use strict";
50444      init_esbuild_shims();
50445      (function() {
50446        jQuery("footer section > ul").on("click", function() {
50447          return jQuery(this).toggleClass("expanded");
50448        });
50449      }).call(exports);
50450    }
50451  });
50452
50453  // apps/base/assets/javascripts/components/form/views/field_view.coffee
50454  var FormFieldView, field_view_default;
50455  var init_field_view = __esm({
50456    "apps/base/assets/javascripts/components/form/views/field_view.coffee"() {
50457      "use strict";
50458      init_esbuild_shims();
50459      window.FormFieldView = FormFieldView = class FormFieldView2 {
50460        constructor($el) {
50461          this.initialize = this.initialize.bind(this);
50462          this.initializeProductSelectField = this.initializeProductSelectField.bind(this);
50463          this.resetInput = this.resetInput.bind(this);
50464          this.showValid = this.showValid.bind(this);
50465          this.showValidationError = this.showValidationError.bind(this);
50466          this.$el = $el;
50467          this.language = jQuery("meta[name=language]").attr("content") || "en";
50468          this.name = this.$el.data("field-element-name");
50469          this.userFriendlyName = this.$el.data("field-name");
50470          this.subscribers = [];
50471          this.initialize();
50472          this.attachEvents();
50473          this.select2 = this.$el.find("select.select2");
50474          if (this.shouldTriggerValidationOnInit()) {
50475            this.triggerValidation();
50476          }
50477        }
50478        initialize() {
50479          if (this.$el.find(".selectbox.repairs").length > 0 || this.$el.find('select[name="form_field[product_type_name]"]').length > 0) {
50480            if ($(".fast-replacement-request").length > 0) {
50481              return this.initializeProductSelectField("fast-replacement");
50482            } else {
50483              return this.initializeProductSelectField("repair-request");
50484            }
50485          }
50486        }
50487        initializeProductSelectField(pageType) {
50488          var formatResult, formatResultSelection, minimumSearchText, selectPlaceholder;
50489          this.repairLeadTimes = {};
50490          selectPlaceholder = this.$el.find("label");
50491          selectPlaceholder.hide();
50492          selectPlaceholder = selectPlaceholder.html();
50493          minimumSearchText = this.$el.find(".selectbox").data("minimum-text");
50494          if (!minimumSearchText) {
50495            minimumSearchText = "Please enter 3 or more characters";
50496          }
50497          formatResult = function(item) {
50498            if (item.loading) {
50499              return item.text;
50500            }
50501            return item.id;
50502          };
50503          formatResultSelection = function(item) {
50504            return item.text;
50505          };
50506          this.$el.find("select").select2({
50507            allowClear: true,
50508            ajax: {
50509              url: "/" + this.language + "/api/repair_request/products.json",
50510              dataType: "json",
50511              delay: 250,
50512              data: function(params) {
50513                return {
50514                  q: params.term,
50515                  page: params.page,
50516                  page_type: pageType
50517                };
50518              },
50519              processResults: (data, params) => {
50520                this.repairLeadTimes = {};
50521                return {
50522                  results: jQuery.map(data.results, (item) => {
50523                    var arr;
50524                    this.repairLeadTimes[item.description] = item.repair_lead_time;
50525                    arr = {
50526                      id: item.description,
50527                      text: item.description
50528                    };
50529                    return arr;
50530                  })
50531                };
50532              }
50533            },
50534            placeholder: selectPlaceholder,
50535            escapeMarkup: function(markup) {
50536              return markup;
50537            },
50538            minimumInputLength: 3,
50539            templateResult: formatResult,
50540            templateSelection: formatResultSelection,
50541            language: {
50542              inputTooShort: function(args) {
50543                return minimumSearchText;
50544              }
50545            }
50546          });
50547          this.$el.find("select").on("select2:select", (e) => {
50548            var data, leadTime;
50549            data = e.params.data;
50550            leadTime = this.repairLeadTimes[e.params.data.id];
50551            if (!leadTime || leadTime.trim() === "") {
50552              jQuery(".repair-lead-time span.value").html(jQuery(".repair-lead-time span.value").attr("data-fallback"));
50553              jQuery(".repair-lead-time span.note").hide();
50554            } else {
50555              jQuery(".repair-lead-time span.value").html(leadTime);
50556              jQuery(".repair-lead-time span.note").show();
50557            }
50558            return jQuery(".repair-lead-time").show();
50559          });
50560          return this.$el.find("select").on("select2:unselect", (e) => {
50561            return jQuery(".repair-lead-time").hide();
50562          });
50563        }
50564        attachEvents() {
50565          var input, select;
50566          input = this.$el.find("input");
50567          if (input.data("type") === "date") {
50568            jQuery.each(this.$el.find("input.date"), (i, field) => {
50569              var i18n;
50570              i18n = {
50571                months: jQuery(field).data("months"),
50572                weekdays: jQuery(field).data("weekdays"),
50573                weekdaysShort: jQuery(field).data("short-weekdays")
50574              };
50575              return new Pikaday({
50576                field,
50577                i18n
50578              });
50579            });
50580          }
50581          select = this.$el.find("select");
50582          if (select.data("type") === "country") {
50583            select.select2({
50584              width: "100%"
50585            });
50586          }
50587          if (this.$el.find("select[data-type='pspd-select']").length > 0) {
50588            this.pspdOptions = this.$el.find("select[data-type='pspd-select'] option").clone();
50589          }
50590          if (this.$el.find("select[data-type='pspd-country-select']").length > 0) {
50591            this.updatePSPDSelectionOptions();
50592          }
50593          this.$el.find("select[data-type='pspd-country-select']").on("change", (event2) => {
50594            this.updatePSPDSelectionOptions();
50595            return jQuery("select[data-type='pspd-select']").removeClass("hidden");
50596          });
50597          this.$el.find("input, select, textarea").on("change", (event2) => {
50598            if (this.shouldValidate(event2)) {
50599              return this.triggerValidation();
50600            }
50601          });
50602          return this.$el.find("input, select, textarea").on("blur", (event2) => {
50603            if (this.hasValue() && this.shouldValidate(event2)) {
50604              return this.triggerValidation();
50605            }
50606          });
50607        }
50608        subscribe(to, callback) {
50609          return this.subscribers.push({
50610            to,
50611            callback
50612          });
50613        }
50614        show() {
50615          this.$el.removeClass("hidden");
50616          this.$el.find("input").prop("disabled", false);
50617          if (this.select2) {
50618            this.select2.prop("disabled", false);
50619          }
50620          if (this.hasValue() && this.shouldValidate()) {
50621            return this.triggerValidation();
50622          }
50623        }
50624        hide() {
50625          this.$el.addClass("hidden");
50626          this.resetInput();
50627          if (this.select2) {
50628            this.select2.prop("disabled", true);
50629          }
50630          this.triggerValidation();
50631          return this.$el.find("input").prop("disabled", true);
50632        }
50633        resetInput() {
50634          return this.$el.find("input").removeAttr("checked");
50635        }
50636        triggerValidation() {
50637          var j, len, ref, results, subscriber;
50638          ref = this.subscribers;
50639          results = [];
50640          for (j = 0, len = ref.length; j < len; j++) {
50641            subscriber = ref[j];
50642            if (subscriber.to === "change") {
50643              results.push(subscriber.callback(this.name));
50644            }
50645          }
50646          return results;
50647        }
50648        isVisible() {
50649          return !this.$el.hasClass("hidden");
50650        }
50651        showPlaceholders() {
50652          return this.$el.find("[data-placeholder]").each(function(index, element) {
50653            return jQuery(element).attr("placeholder", jQuery(element).data("placeholder"));
50654          });
50655        }
50656        showValid(value) {
50657          if (value) {
50658            this.$el.addClass("valid").removeClass("invalid notify");
50659            return this.$el.find("p.notification").stop().slideUp();
50660          } else {
50661            return this.resetState();
50662          }
50663        }
50664        resetState() {
50665          return this.$el.removeClass("valid invalid notify");
50666        }
50667        showValidationError(error) {
50668          this.setValidationError(error);
50669          return this.$el.removeClass("valid").addClass("invalid notify");
50670        }
50671        setValidationError(error) {
50672          var errorMessage;
50673          errorMessage = error.replace("[field]", this.userFriendlyName);
50674          return this.$el.find("p.notification").html(errorMessage).stop().show();
50675        }
50676        resetValidationError() {
50677          this.$el.find("p.notification").html("").hide();
50678          return this.$el.removeClass("invalid notify");
50679        }
50680        shouldValidate(event2) {
50681          if (event2) {
50682            return jQuery(event2.currentTarget).attr("data-type") !== "pspd-country-select";
50683          } else {
50684            return !this.$el.hasClass("pspd_select");
50685          }
50686        }
50687        getValue() {
50688          if (this.$el.find("input[name='" + this.name + "']:radio").length > 0) {
50689            if (this.$el.find("input[name='" + this.name + "']:radio:checked").length === 0) {
50690              return "";
50691            }
50692            return this.$el.find("input[name='" + this.name + "']:radio:checked").val();
50693          }
50694          if (this.$el.find("input[name='" + this.name + "'][type='checkbox']").length > 0) {
50695            if (this.$el.find("input[name='" + this.name + "']").is(":checked")) {
50696              return "on";
50697            } else {
50698              return "";
50699            }
50700          }
50701          if (this.$el.hasClass("magic-field") && this.$el.find("input[type='checkbox']").length > 0) {
50702            if (this.$el.find("input[type='checkbox']").is(":checked")) {
50703              return "on";
50704            } else {
50705              return "";
50706            }
50707          }
50708          if (this.$el.find(".select2[name='" + this.name + "']").length > 0) {
50709            if (!this.$el.find(".select2[name='" + this.name + "']").val()) {
50710              return "";
50711            }
50712            return this.$el.find(".select2[name='" + this.name + "']").val();
50713          }
50714          return this.$el.find("input[name='" + this.name + "'],select[name='" + this.name + "'],textarea[name='" + this.name + "']").val();
50715        }
50716        hasValue() {
50717          return this.getValue() !== "";
50718        }
50719        getKey() {
50720          if (this.$el.find("input[name='" + this.name + "']:radio").length > 0) {
50721            if (this.$el.find("input[name='" + this.name + "']:radio:checked").length === 0) {
50722              return "";
50723            }
50724            return this.$el.find("input[name='" + this.name + "']:radio:checked").data("key");
50725          }
50726          if (this.$el.find("select[name='" + this.name + "']").length > 0) {
50727            if (this.$el.find("select[name='" + this.name + "']").hasClass("country")) {
50728              return this.$el.find("select[name='" + this.name + "']").find("option:selected").val();
50729            } else {
50730              return this.$el.find("select[name='" + this.name + "']").find("option:selected").data("key");
50731            }
50732          }
50733          return this.$el.find("input[name='" + this.name + "'],textarea[name='" + this.name + "']").data("key");
50734        }
50735        shouldTriggerValidationOnInit() {
50736          return this.hasValue() && this.shouldValidate();
50737        }
50738        updatePSPDSelectionOptions() {
50739          var selectedCountry;
50740          selectedCountry = this.$el.find("select[data-type='pspd-country-select']").val();
50741          this.$el.find("select[data-type='pspd-select'] option").remove();
50742          return this.pspdOptions.each((index, element) => {
50743            if (!jQuery(element).attr("data-country") || jQuery(element).attr("data-country") === selectedCountry) {
50744              return this.$el.find("select[data-type='pspd-select']").append(element);
50745            }
50746          });
50747        }
50748      };
50749      field_view_default = FormFieldView;
50750    }
50751  });
50752
50753  // apps/base/assets/javascripts/components/form/views/result_view.coffee
50754  var FormResultView, result_view_default;
50755  var init_result_view = __esm({
50756    "apps/base/assets/javascripts/components/form/views/result_view.coffee"() {
50757      "use strict";
50758      init_esbuild_shims();
50759      result_view_default = FormResultView = class FormResultView2 {
50760        constructor($el) {
50761          this.showAndStartDownload = this.showAndStartDownload.bind(this);
50762          this.$el = $el;
50763          this.$successMessage = this.$el.find(".success");
50764          this.$failureMessage = this.$el.find(".failure");
50765          this.$downloadLink = this.$el.find("a.button");
50766        }
50767        show() {
50768          return this.$el.show();
50769        }
50770        hide() {
50771          return this.$el.hide();
50772        }
50773        showSuccessMessage() {
50774          this.$successMessage.show();
50775          return this.show();
50776        }
50777        showGlobalErrorMessage(error) {
50778          var errorMessage;
50779          errorMessage = this.$failureMessage.html().replace("[details]", error);
50780          this.$failureMessage.html(errorMessage).show();
50781          return this.show();
50782        }
50783        hideGlobalErrorMessage() {
50784          this.$failureMessage.hide();
50785          return this.hide();
50786        }
50787        showAndStartDownload(download) {
50788          this.$downloadLink.attr("href", download.url);
50789          this.$downloadLink.html(download.title).show();
50790          return window.location.href = download.url;
50791        }
50792      };
50793    }
50794  });
50795
50796  // apps/base/assets/javascripts/components/form/views/form_view.coffee
50797  var FormView, form_view_default;
50798  var init_form_view = __esm({
50799    "apps/base/assets/javascripts/components/form/views/form_view.coffee"() {
50800      "use strict";
50801      init_esbuild_shims();
50802      form_view_default = FormView = class FormView2 {
50803        constructor($form) {
50804          this.$form = $form;
50805          this.$inlineFormContainer = this.$form.parents(".inline-form-container");
50806          this.isMultiStep = false;
50807          this.initializeForm();
50808        }
50809        initializeForm() {
50810          if (this.$form.parents(".form-popup-wrapper").length === 0) {
50811            this.setCurrentFormStep(1);
50812          }
50813          return this.setJavascript();
50814        }
50815        toggleShownState() {
50816          this.$form.stop().slideToggle(250);
50817          return this.$inlineFormContainer.toggleClass("collapsed expanded");
50818        }
50819        isExpanded() {
50820          return this.$inlineFormContainer.hasClass("expanded");
50821        }
50822        isCollapsed() {
50823          return !this.isExpanded();
50824        }
50825        show() {
50826          return this.$form.show();
50827        }
50828        hide() {
50829          return this.$form.hide();
50830        }
50831        shouldHideUponSuccess() {
50832          return this.$form.attr("data-hide-on-success") !== "false";
50833        }
50834        setJavascript() {
50835          return jQuery("input[name='form_meta[javascript]']").val(1);
50836        }
50837        setCurrentFormStep(step) {
50838          return this.$form.find("input[name='step']").val(step);
50839        }
50840        showLoadingIndicator() {
50841          this.$form.find(".custom-icon").css("display", "none");
50842          return this.$form.find("button[type='submit']").addClass("loading").prop("disabled", true);
50843        }
50844        hideLoadingIndicator() {
50845          return this.$form.find("button[type='submit']").removeClass("loading").prop("disabled", false);
50846        }
50847        hideIntroMessage() {
50848          return this.$form.find("div.intro").hide();
50849        }
50850        showSecondStep() {
50851          this.$form.find(".step1").hide();
50852          this.$form.find(".step2").removeClass("hidden").show();
50853          return this.setCurrentFormStep(2);
50854        }
50855      };
50856    }
50857  });
50858
50859  // apps/base/assets/javascripts/components/form/views/product_code_field_view.coffee
50860  var ProductCodeFieldView, product_code_field_view_default;
50861  var init_product_code_field_view = __esm({
50862    "apps/base/assets/javascripts/components/form/views/product_code_field_view.coffee"() {
50863      "use strict";
50864      init_esbuild_shims();
50865      product_code_field_view_default = ProductCodeFieldView = class ProductCodeFieldView2 {
50866        constructor(field, productGroupFieldset) {
50867          this.attachEventHandlers = this.attachEventHandlers.bind(this);
50868          this.fetchProductGroup = this.fetchProductGroup.bind(this);
50869          this.setItemProductGroup = this.setItemProductGroup.bind(this);
50870          this.populateProductGroup = this.populateProductGroup.bind(this);
50871          this.toggleProdutGroup = this.toggleProdutGroup.bind(this);
50872          this.initSelect2 = this.initSelect2.bind(this);
50873          this.field = field;
50874          this.productGroupFieldset = productGroupFieldset;
50875          this.initSelect2();
50876          this.attachEventHandlers();
50877          this.showProductGroup = true;
50878          this.language = jQuery(".campaign-form > .form").data("language");
50879          this.prefilledValue = this.field.val();
50880          if (this.prefilledValue) {
50881            this.fetchProductGroup(this.prefilledValue);
50882          }
50883        }
50884        attachEventHandlers() {
50885          return this.field.on("select2:select", (e) => {
50886            var selectedItem;
50887            selectedItem = e.target.value;
50888            this.showProductGroup = false;
50889            jQuery.each(jQuery(".option-data").data("options"), (i, item) => {
50890              return this.setItemProductGroup(selectedItem, item);
50891            });
50892            return this.toggleProdutGroup();
50893          });
50894        }
50895        fetchProductGroup(item) {
50896          return jQuery.ajax({
50897            url: `/${this.language}/api/eplan/files.json?name=` + item,
50898            success: (results) => {
50899              if (results.items.length) {
50900                return this.productGroupFieldset.find("input").val(results.items[0].product_group[0]);
50901              }
50902            }
50903          });
50904        }
50905        setItemProductGroup(selectedItem, item) {
50906          if (item.description === selectedItem && item.product_group.length) {
50907            return this.populateProductGroup(item.product_group);
50908          }
50909        }
50910        populateProductGroup(productGroup) {
50911          this.showProductGroup = true;
50912          return this.productGroupFieldset.find("input").val(productGroup[0]);
50913        }
50914        toggleProdutGroup() {
50915          if (this.showProductGroup) {
50916            return this.productGroupFieldset.show(200);
50917          } else {
50918            return this.productGroupFieldset.hide(200);
50919          }
50920        }
50921        initSelect2() {
50922          return this.field.select2({
50923            minimumInputLength: 2,
50924            ajax: {
50925              delay: 300,
50926              url: (params) => {
50927                return `/${this.language}/api/eplan/files.json?name=` + params.term;
50928              },
50929              dataType: "json",
50930              processResults: function(data) {
50931                jQuery(".option-data").data("options", data.items);
50932                return {
50933                  results: jQuery.map(data.items, (item, i) => {
50934                    return {
50935                      id: item.description,
50936                      text: item.description,
50937                      product_group: item.product_group
50938                    };
50939                  })
50940                };
50941              }
50942            }
50943          });
50944        }
50945      };
50946    }
50947  });
50948
50949  // apps/base/assets/javascripts/components/form/views/step_view.coffee
50950  var StepView, step_view_default;
50951  var init_step_view = __esm({
50952    "apps/base/assets/javascripts/components/form/views/step_view.coffee"() {
50953      "use strict";
50954      init_esbuild_shims();
50955      init_product_code_field_view();
50956      step_view_default = StepView = class StepView2 {
50957        constructor(step, fields, goToStep) {
50958          this.attachEventHandlers = this.attachEventHandlers.bind(this);
50959          this.initSelect2Inputs = this.initSelect2Inputs.bind(this);
50960          this.validateStep = this.validateStep.bind(this);
50961          this.isValid = this.isValid.bind(this);
50962          this.setStepClass = this.setStepClass.bind(this);
50963          this.activate = this.activate.bind(this);
50964          this.isActive = this.isActive.bind(this);
50965          this.step = step;
50966          this.fields = fields;
50967          this.goToStep = goToStep;
50968          this.nextButton = this.step.find(".next");
50969          this.stepNumber = this.step.data("step");
50970          this.attachEventHandlers();
50971          this.nextButton.prop("disabled", false);
50972          if (this.step.find(".select2")) {
50973            this.initSelect2Inputs(this.step.find(".select2"));
50974          }
50975        }
50976        attachEventHandlers() {
50977          return this.nextButton.on("click", (e) => {
50978            e.preventDefault();
50979            e.stopPropagation();
50980            return this.validateStep().then((response) => {
50981              if (response) {
50982                return this.goToStep(this.stepNumber + 1);
50983              }
50984            });
50985          });
50986        }
50987        initSelect2Inputs(select2Elements) {
50988          return jQuery.each(select2Elements, (i, select22) => {
50989            if (jQuery(select22).attr("name") === "form_field[product_code]") {
50990              return new product_code_field_view_default(jQuery(select22), this.step.find("[data-field-element-name='form_field[product_group]']"));
50991            }
50992          });
50993        }
50994        validateStep() {
50995          return new Promise((resolve) => {
50996            var valid;
50997            valid = true;
50998            $.each(this.fields, (key, field) => {
50999              if (key !== "form_field[email_address]") {
51000                if (!field.model.validate() && field.view.isVisible()) {
51001                  return valid = false;
51002                }
51003              }
51004            });
51005            if (this.fields["form_field[email_address]"] && this.fields["form_field[email_address]"].view.isVisible()) {
51006              return this.fields["form_field[email_address]"].model.backendValidate().then((response) => {
51007                if (!response) {
51008                  valid = false;
51009                }
51010                this.setStepClass(valid);
51011                return resolve(valid);
51012              });
51013            } else {
51014              this.setStepClass(valid);
51015              return resolve(valid);
51016            }
51017          });
51018        }
51019        isValid() {
51020          return this.step.hasClass("valid");
51021        }
51022        setStepClass(valid) {
51023          return this.step.toggleClass("valid", valid);
51024        }
51025        activate() {
51026          return this.step.addClass("active");
51027        }
51028        isActive() {
51029          return this.step.hasClass("active");
51030        }
51031      };
51032    }
51033  });
51034
51035  // apps/base/assets/javascripts/components/form/views/magic_form_view.coffee
51036  var MagicFormView, boundMethodCheck, magic_form_view_default;
51037  var init_magic_form_view = __esm({
51038    "apps/base/assets/javascripts/components/form/views/magic_form_view.coffee"() {
51039      "use strict";
51040      init_esbuild_shims();
51041      init_form_view();
51042      init_step_view();
51043      boundMethodCheck = function(instance, Constructor) {
51044        if (!(instance instanceof Constructor)) {
51045          throw new Error("Bound instance method accessed before binding");
51046        }
51047      };
51048      magic_form_view_default = MagicFormView = class MagicFormView2 extends form_view_default {
51049        constructor($form, fieldModels, fieldViews) {
51050          super($form);
51051          this.attachEventHandlers = this.attachEventHandlers.bind(this);
51052          this.showWaitingListPrompt = this.showWaitingListPrompt.bind(this);
51053          this.setEventFields = this.setEventFields.bind(this);
51054          this.activateFirstStep = this.activateFirstStep.bind(this);
51055          this.canOpenStep = this.canOpenStep.bind(this);
51056          this.initSteps = this.initSteps.bind(this);
51057          this.groupFieldsByStep = this.groupFieldsByStep.bind(this);
51058          this.previousStepsValid = this.previousStepsValid.bind(this);
51059          this.openStep = this.openStep.bind(this);
51060          this.collapseAllSteps = this.collapseAllSteps.bind(this);
51061          this.startOver = this.startOver.bind(this);
51062          this.resetSteps = this.resetSteps.bind(this);
51063          this.fieldModels = fieldModels;
51064          this.fieldViews = fieldViews;
51065          this.isMultiStep = true;
51066          this.groupedFieldsByStep = this.groupFieldsByStep(this.fieldModels, this.fieldViews);
51067          this.steps = this.$form.find(".step");
51068          this.submitButton = this.$form.find("button[type='submit']");
51069          this.initSteps();
51070          this.activateFirstStep();
51071          this.attachEventHandlers();
51072        }
51073        attachEventHandlers() {
51074          boundMethodCheck(this, MagicFormView2);
51075          this.steps.on("click", (e) => {
51076            var currentStep;
51077            currentStep = jQuery(e.target).closest(".step").data("step");
51078            e.stopPropagation();
51079            if (this.canOpenStep(currentStep)) {
51080              return this.openStep(currentStep);
51081            }
51082          });
51083          this.startOver();
51084          this.showWaitingListPrompt();
51085          this.select2Field = this.$form.find(".step-0 .subject_date");
51086          if ($(".subject_date select option:selected").length === 1) {
51087            this.setEventFields();
51088          }
51089          return this.select2Field.on("change", () => {
51090            this.showWaitingListPrompt();
51091            return this.setEventFields();
51092          });
51093        }
51094        showWaitingListPrompt() {
51095          boundMethodCheck(this, MagicFormView2);
51096          this.$form.find("input[name='form_field[waiting_list]']").remove();
51097          $(".waiting-list-prompt").hide();
51098          if ($($(".subject_date select option:selected")[0]).data("has-waiting-list") || $($(".subject_date > span")[0]).data("has-waiting-list")) {
51099            $(".waiting-list-prompt").show();
51100            return this.$form.prepend('<input name="form_field[waiting_list]" type="hidden" value="yes">');
51101          }
51102        }
51103        setEventFields() {
51104          var locationName;
51105          boundMethodCheck(this, MagicFormView2);
51106          this.$form.find(".correct-date-format").attr("value", $($(".subject_date select option:selected")[0]).data("date"));
51107          this.$form.find(".eventDateId").attr("value", $($(".subject_date select option:selected")[0]).data("identifier"));
51108          this.$form.find("fieldset.url input").attr("value", $($(".subject_date select option:selected")[0]).data("link"));
51109          this.$form.find('input[name="form_field[start_time]"]').attr("value", $($(".subject_date select option:selected")[0]).data("start-time"));
51110          this.$form.find('input[name="form_field[end_time]"]').attr("value", $($(".subject_date select option:selected")[0]).data("end-time"));
51111          this.$form.find('input[name="form_field[end_date]"]').attr("value", $($(".subject_date select option:selected")[0]).data("end-date"));
51112          this.$form.find('input[name="form_meta[location_name]"]').attr("value", $($(".subject_date select option:selected")[0]).data("location-name"));
51113          this.$form.find('input[name="form_meta[location_url]"]').attr("value", $($(".subject_date select option:selected")[0]).data("location-url"));
51114          locationName = $($(".subject_date select option:selected")[0]).data("location-name");
51115          if (locationName) {
51116            this.$form.find('input[name="form_field[location_of_the_training]"]').val(locationName).trigger("change");
51117          }
51118          this.$form.find('input[name="form_meta[additional_information]"]').attr("value", $($(".subject_date select option:selected")[0]).data("additional-information"));
51119          return this.$form.find('input[name="form_meta[full_address]"]').attr("value", $($(".subject_date select option:selected")[0]).data("full-address"));
51120        }
51121        activateFirstStep() {
51122          boundMethodCheck(this, MagicFormView2);
51123          return this.$form.find(".step-0").addClass("active");
51124        }
51125        canOpenStep(currentStep) {
51126          boundMethodCheck(this, MagicFormView2);
51127          return !this.stepViews[currentStep].isActive() && this.previousStepsValid(currentStep);
51128        }
51129        initSteps() {
51130          boundMethodCheck(this, MagicFormView2);
51131          this.stepViews = {};
51132          jQuery.each(this.steps, (index, step) => {
51133            var stepNumber;
51134            stepNumber = jQuery(step).data("step");
51135            return this.stepViews[stepNumber] = new step_view_default(jQuery(step), this.groupedFieldsByStep[stepNumber], this.openStep);
51136          });
51137          return this.resetSteps();
51138        }
51139        groupFieldsByStep(fieldModels, fieldViews) {
51140          var steps;
51141          boundMethodCheck(this, MagicFormView2);
51142          steps = {};
51143          jQuery.each(fieldModels, (name, field) => {
51144            if (!steps[field.multiStep]) {
51145              steps[field.multiStep] = {};
51146            }
51147            return steps[field.multiStep][name] = {
51148              model: field,
51149              view: fieldViews[name]
51150            };
51151          });
51152          return steps;
51153        }
51154        previousStepsValid(currentStep) {
51155          var i, j, ref, valid;
51156          boundMethodCheck(this, MagicFormView2);
51157          valid = true;
51158          for (i = j = 1, ref = currentStep; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {
51159            valid = this.stepViews[i].isValid();
51160          }
51161          return valid;
51162        }
51163        openStep(step) {
51164          boundMethodCheck(this, MagicFormView2);
51165          this.collapseAllSteps();
51166          return this.stepViews[step].activate();
51167        }
51168        collapseAllSteps() {
51169          boundMethodCheck(this, MagicFormView2);
51170          return this.steps.removeClass("active");
51171        }
51172        startOver() {
51173          boundMethodCheck(this, MagicFormView2);
51174          this.$form.find(".step").click(() => {
51175            return this.$form.find("fieldset").each(function() {
51176              if (jQuery(this).parents(".step").is(":not(.active)")) {
51177                return jQuery(this).removeClass("invalid notify").find("p.notification").html("").hide();
51178              }
51179            });
51180          });
51181          return this.$form.find(".step").find("input").click((e) => {
51182            var step;
51183            step = jQuery(e.target).parents(".step").attr("data-step");
51184            if (jQuery(e.target).change) {
51185              return jQuery(e.target).parents(".step").nextAll().removeClass("val
51185id");
51186            }
51187          });
51188        }
51189        resetSteps() {
51190          boundMethodCheck(this, MagicFormView2);
51191          return jQuery.each(this.fieldViews, (index, field) => {
51192            return field.resetInput();
51193          });
51194        }
51195      };
51196    }
51197  });
51198
51199  // apps/base/assets/javascripts/components/form/models/form_submit_response.coffee
51200  var FormSubmitResponse, form_submit_response_default;
51201  var init_form_submit_response = __esm({
51202    "apps/base/assets/javascripts/components/form/models/form_submit_response.coffee"() {
51203      "use strict";
51204      init_esbuild_shims();
51205      form_submit_response_default = FormSubmitResponse = class FormSubmitResponse2 {
51206        constructor(request, error = null) {
51207          this.error = error;
51208          if (request.responseText) {
51209            this.data = JSON.parse(request.responseText);
51210          } else {
51211            this.data = {};
51212          }
51213          this.status = request.status;
51214          if (this.data.errors && this.data.errors.length > 0) {
51215            this.status = 409;
51216          }
51217        }
51218        isSuccess() {
51219          return this.status === 200 || this.status === 201;
51220        }
51221        hasRedirect() {
51222          return this.data.redirect;
51223        }
51224      };
51225    }
51226  });
51227
51228  // apps/base/assets/javascripts/components/form/models/form_submit_service.coffee
51229  var FormSubmitService, form_submit_service_default;
51230  var init_form_submit_service = __esm({
51231    "apps/base/assets/javascripts/components/form/models/form_submit_service.coffee"() {
51232      "use strict";
51233      init_esbuild_shims();
51234      init_form_submit_response();
51235      form_submit_service_default = FormSubmitService = class FormSubmitService2 {
51236        constructor(endpoint, method) {
51237          this.endpoint = endpoint;
51238          this.method = method;
51239        }
51240        submit(data, files, callback) {
51241          var processData, request, useIframe;
51242          processData = files.length === 0;
51243          useIframe = files.length > 0;
51244          request = jQuery.ajax(this.endpoint, {
51245            type: this.method,
51246            files,
51247            data,
51248            dataType: "json",
51249            processData,
51250            iframe: useIframe
51251          });
51252          return request.always(function() {
51253            return callback(new form_submit_response_default(request));
51254          });
51255        }
51256      };
51257    }
51258  });
51259
51260  // apps/base/assets/javascripts/components/form/models/form_model.coffee
51261  var FormModel, indexOf, form_model_default;
51262  var init_form_model = __esm({
51263    "apps/base/assets/javascripts/components/form/models/form_model.coffee"() {
51264      "use strict";
51265      init_esbuild_shims();
51266      indexOf = [].indexOf;
51267      window.FormModel = FormModel = class FormModel2 {
51268        constructor(json = {}) {
51269          this.data = json;
51270          this.form = this.data.formElement;
51271          this.fields = this.data.fields || [];
51272          this.options = this.data.options || {};
51273          this.step = this.data.step || 1;
51274          this.totalSteps = this.data.totalSteps || 1;
51275        }
51276        updateFields(fields) {
51277          return this.fields = fields;
51278        }
51279        goToNextStep() {
51280          return this.step += 1;
51281        }
51282        inLastStep() {
51283          return this.step === this.totalSteps;
51284        }
51285        isCollapsible() {
51286          if (this.options.collapsible != null) {
51287            return this.options.collapsible;
51288          } else {
51289            return false;
51290          }
51291        }
51292        isTrackable() {
51293          if (this.options.trackable != null) {
51294            return this.options.trackable;
51295          } else {
51296            return true;
51297          }
51298        }
51299        isContainedInModal() {
51300          return this.form.parents(".mfp-hide").length > 0;
51301        }
51302        validate() {
51303          var field;
51304          return indexOf.call((function() {
51305            var i, len, ref, results;
51306            ref = this.fields;
51307            results = [];
51308            for (i = 0, len = ref.length; i < len; i++) {
51309              field = ref[i];
51310              results.push(field.validate());
51311            }
51312            return results;
51313          }).call(this), false) < 0;
51314        }
51315      };
51316      form_model_default = FormModel;
51317    }
51318  });
51319
51320  // apps/base/assets/javascripts/modules/select2.coffee
51321  var require_select22 = __commonJS({
51322    "apps/base/assets/javascripts/modules/select2.coffee"(exports) {
51323      "use strict";
51324      init_esbuild_shims();
51325      (function() {
51326        var data, translations2;
51327        data = jQuery("#select2-i18n").data();
51328        if (data) {
51329          translations2 = {};
51330          jQuery.each(data, function(key, translation) {
51331            return translations2[key] = function() {
51332              return translation;
51333            };
51334          });
51335          jQuery.fn.select2.defaults.set("language", translations2);
51336        }
51337      }).call(exports);
51338    }
51339  });
51340
51341  // apps/base/assets/javascripts/components/form/models/field.coffee
51342  var require_field = __commonJS({
51343    "apps/base/assets/javascripts/components/form/models/field.coffee"(exports, module) {
51344      "use strict";
51345      init_esbuild_shims();
51346      (function() {
51347        var FormField;
51348        FormField = (function() {
51349          var DEFAULT_ERROR;
51350          class FormField2 {
51351            constructor(json = {}) {
51352              this.data = json;
51353              this.conditionalLinkedTo = json.conditionalLinkedTo || null;
51354              this.conditionalValue = json.conditionalValue || null;
51355              this.step = json.step || 1;
51356              this.error = json.error || DEFAULT_ERROR;
51357              this.subscribers = [];
51358              this.multiStep = json.multiStep || null;
51359            }
51360            isRequired() {
51361              return this.data.required || false;
51362            }
51363            isNotRequired() {
51364              return !this.isRequired();
51365            }
51366            updateValue(value) {
51367              return this.value = value;
51368            }
51369            validate(notify = true) {
51370              var valid;
51371              valid = !!this.value || this.isNotRequired();
51372              if (notify || !valid) {
51373                this.notifyValidationResult(valid, this.error);
51374              }
51375              return valid;
51376            }
51377            subscribe(to, callback) {
51378              return this.subscribers.push({
51379                to,
51380                callback
51381              });
51382            }
51383            notifyValidationResult(success, errorMessage) {
51384              if (success) {
51385                return this.notify("validation-success", this.value);
51386              } else {
51387                return this.notify("validation-failed", errorMessage);
51388              }
51389            }
51390            notify(to, arg) {
51391              var i, len, ref, results, subscriber;
51392              ref = this.subscribers;
51393              results = [];
51394              for (i = 0, len = ref.length; i < len; i++) {
51395                subscriber = ref[i];
51396                if (subscriber.to === to) {
51397                  results.push(subscriber.callback(arg));
51398                }
51399              }
51400              return results;
51401            }
51402          }
51403          ;
51404          DEFAULT_ERROR = "[field] is a mandatory field";
51405          return FormField2;
51406        }).call(this);
51407        module.exports = FormField;
51408      }).call(exports);
51409    }
51410  });
51411
51412  // apps/base/assets/javascripts/components/form/models/field_types/email_field.coffee
51413  var require_email_field = __commonJS({
51414    "apps/base/assets/javascripts/components/form/models/field_types/email_field.coffee"(exports, module) {
51415      "use strict";
51416      init_esbuild_shims();
51417      (function() {
51418        var EmailField, FormField, boundMethodCheck2 = function(instance, Constructor) {
51419          if (!(instance instanceof Constructor)) {
51420            throw new Error("Bound instance method accessed before binding");
51421          }
51422        };
51423        FormField = require_field();
51424        EmailField = (function() {
51425          var ALREADY_TAKEN_ERROR, DEFAULT_ERROR;
51426          class EmailField2 extends FormField {
51427            constructor(json = {}) {
51428              super(json);
51429              this.backendValidate = this.backendValidate.bind(this);
51430              this.specificError = json.specificError || DEFAULT_ERROR;
51431            }
51432            validate() {
51433              var defaultValidation, valid;
51434              defaultValidation = super.validate({
51435                notifySuccess: false
51436              });
51437              valid = defaultValidation && (!this.value || /.+@.+\..{2,}/.test(this.value));
51438              if (defaultValidation) {
51439                this.notifyValidationResult(valid, this.specificError);
51440              }
51441              return valid;
51442            }
51443            isValid() {
51444              var defaultValidation, valid;
51445              defaultValidation = !!this.value || this.isNotRequired();
51446              valid = defaultValidation && (!this.value || /.+@.+\..{2,}/.test(this.value));
51447              return valid;
51448            }
51449            backendValidate() {
51450              boundMethodCheck2(this, EmailField2);
51451              return new Promise((resolve) => {
51452                var identifier, language;
51453                identifier = $($(".subject_date select option:selected")[0]).data("identifier");
51454                if (!identifier) {
51455                  identifier = jQuery("input[name='form_meta[event_date_id]'").val();
51456                }
51457                if (this.isValid() && jQuery("input[name='form_meta[referrer]'").val() !== void 0 && identifier !== void 0 && identifier !== "") {
51458                  language = jQuery("input[name='form_meta[language]'").val();
51459                  return jQuery.ajax({
51460                    url: `/${language}/api/event_manager/emailvalidation`,
51461                    headers: {
51462                      "Accept": "application/json"
51463                    },
51464                    method: "get",
51465                    data: {
51466                      "emailValidation": true,
51467                      "referrer": jQuery("input[name='form_meta[referrer]'").val(),
51468                      "eventDateId": identifier,
51469                      "email": this.value
51470                    },
51471                    success: (result) => {
51472                      this.notifyValidationResult(result.valid, ALREADY_TAKEN_ERROR);
51473                      return resolve(result.valid);
51474                    },
51475                    error: () => {
51476                      return resolve(true);
51477                    }
51478                  });
51479                } else {
51480                  return resolve(this.validate());
51481                }
51482              });
51483            }
51484          }
51485          ;
51486          DEFAULT_ERROR = "You have entered an invalid email address";
51487          ALREADY_TAKEN_ERROR = "This email address is already registered";
51488          return EmailField2;
51489        }).call(this);
51490        module.exports = EmailField;
51491      }).call(exports);
51492    }
51493  });
51494
51495  // apps/base/assets/javascripts/components/form/models/field_types/numeric_field.coffee
51496  var require_numeric_field = __commonJS({
51497    "apps/base/assets/javascripts/components/form/models/field_types/numeric_field.coffee"(exports, module) {
51498      "use strict";
51499      init_esbuild_shims();
51500      (function() {
51501        var FormField, NumericField;
51502        FormField = require_field();
51503        NumericField = (function() {
51504          var DEFAULT_ERROR;
51505          class NumericField2 extends FormField {
51506            constructor(json = {}) {
51507              super(json);
51508              this.specificError = json.specificError || DEFAULT_ERROR;
51509            }
51510            validate() {
51511              var defaultValidation, valid;
51512              defaultValidation = super.validate({
51513                notifySuccess: false
51514              });
51515              valid = defaultValidation && (!this.value || !isNaN(parseInt(this.value)));
51516              if (defaultValidation) {
51517                this.notifyValidationResult(valid, this.specificError);
51518              }
51519              return valid;
51520            }
51521          }
51522          ;
51523          DEFAULT_ERROR = "[field] must be a numeric value";
51524          return NumericField2;
51525        }).call(this);
51526        module.exports = NumericField;
51527      }).call(exports);
51528    }
51529  });
51530
51531  // apps/base/assets/javascripts/components/form/models/field_types/file_upload.coffee
51532  var require_file_upload = __commonJS({
51533    "apps/base/assets/javascripts/components/form/models/field_types/file_upload.coffee"(exports, module) {
51534      "use strict";
51535      init_esbuild_shims();
51536      (function() {
51537        var FileUpload, FormField, boundMethodCheck2 = function(instance, Constructor) {
51538          if (!(instance instanceof Constructor)) {
51539            throw new Error("Bound instance method accessed before binding");
51540          }
51541        }, indexOf2 = [].indexOf;
51542        FormField = require_field();
51543        FileUpload = class FileUpload2 extends FormField {
51544          constructor(json = {}, el = null) {
51545            super(json);
51546            this.initializeFileDragAndDrop = this.initializeFileDragAndDrop.bind(this);
51547            this.handleFileUpload = this.handleFileUpload.bind(this);
51548            if (el) {
51549              this.$el = $(el);
51550            }
51551            this.allowedExtensions = json.allowedExtensions || null;
51552            this.maxFileSize = json.maxFileSize || null;
51553            this.extensionsError = json.extensionsError || null;
51554            this.sizeError = json.sizeError || null;
51555            if (this.$el != null) {
51556              this.initializeFileDragAndDrop();
51557            } else {
51558              console.error("FileUpload element is not defined");
51559            }
51560          }
51561          initializeFileDragAndDrop() {
51562            var clickHandled, fileUpload, input, removeButton, removeInfo, uploadInfo;
51563            boundMethodCheck2(this, FileUpload2);
51564            if (this.$el == null) {
51565              console.error("FileUpload element is not defined");
51566              return;
51567            }
51568            fileUpload = this.$el;
51569            input = this.$el.find("input[type='file']");
51570            uploadInfo = this.$el.find(".upload-info");
51571            removeInfo = this.$el.find(".remove-info");
51572            removeButton = this.$el.find(".remove-file-btn");
51573            clickHandled = false;
51574            fileUpload.on("click", (e) => {
51575              if (clickHandled) {
51576                return;
51577              }
51578              clickHandled = true;
51579              input.click();
51580              return clickHandled = false;
51581            });
51582            fileUpload.on("drag dragstart dragend dragover dragenter dragleave drop", (e) => {
51583              e.preventDefault();
51584              return e.stopPropagation();
51585            });
51586            fileUpload.on("drop", (e) => {
51587              var files, valid;
51588              e.preventDefault();
51589              e.stopPropagation();
51590              files = e.originalEvent.dataTransfer.files;
51591              if (files.length > 1) {
51592                alert("Please upload only one file.");
51593                return;
51594              }
51595              input[0].files = files;
51596              this.updateValue(files);
51597              this.handleFileUpload(files);
51598              valid = this.validate();
51599              if (!valid) {
51600                input.val("");
51601                return this.handleFileUpload(files);
51602              }
51603            });
51604            input.on("change", (e) => {
51605              var files;
51606              files = e.target.files;
51607              if (files.length > 1) {
51608                alert("Please select only one file.");
51609                input.val("");
51610                return;
51611              }
51612              return this.handleFileUpload(files);
51613            });
51614            return removeButton.on("click", (e) => {
51615              e.preventDefault();
51616              e.stopPropagation();
51617              input.val("");
51618              removeInfo.hide();
51619              uploadInfo.show();
51620              clickHandled = false;
51621              this.updateValue(null);
51622              return this.validate();
51623            });
51624          }
51625          validate(notify = true) {
51626            var errorMessages, file, fileExtension, files, input, ref, valid;
51627            valid = true;
51628            errorMessages = [];
51629            input = this.$el.find("input[type='file']");
51630            files = (ref = input[0]) != null ? ref.files : void 0;
51631            if (files != null && files.length > 0) {
51632              file = files[0];
51633              if (this.allowedExtensions != null) {
51634                fileExtension = file.name.split(".").pop().toLowerCase();
51635                if (indexOf2.call(this.allowedExtensions, fileExtension) < 0) {
51636                  valid = false;
51637                  errorMessages.push(this.extensionsError);
51638                }
51639              }
51640              if (this.maxFileSize != null) {
51641                if (!(file.size <= this.maxFileSize * 1024 * 1024)) {
51642                  valid = false;
51643                  errorMessages.push(this.sizeError);
51644                }
51645              }
51646            } else {
51647              valid = !this.isRequired();
51648            }
51649            if (!valid) {
51650              this.removeUploadedFile();
51651              input.val("");
51652            }
51653            if (!valid && this.isRequired() && errorMessages.length === 0) {
51654              errorMessages.push(this.error);
51655            }
51656            if (notify || !valid) {
51657              this.notifyValidationResult(valid, errorMessages.join(" "));
51658            }
51659            return valid;
51660          }
51661          handleFileUpload(files) {
51662            var file, fileName, removeInfo, uploadInfo;
51663            boundMethodCheck2(this, FileUpload2);
51664            uploadInfo = this.$el.find(".upload-info");
51665            removeInfo = this.$el.find(".remove-info");
51666            if (files.length > 0) {
51667              file = files[0];
51668              fileName = file.name;
51669              this.$el.find(".uploaded-file").text(fileName);
51670              removeInfo.show();
51671              return uploadInfo.hide();
51672            } else {
51673              this.$el.find(".uploaded-file").text("");
51674              removeInfo.hide();
51675              return uploadInfo.show();
51676            }
51677          }
51678          removeUploadedFile() {
51679            this.$el.parents(".upload-info").find(".uploaded-text").hide();
51680            this.$el.parents(".upload-info").find(".remove-info").hide();
51681            return this.value = null;
51682          }
51683        };
51684        module.exports = FileUpload;
51685      }).call(exports);
51686    }
51687  });
51688
51689  // apps/base/assets/javascripts/components/form/controllers/form_controller.coffee
51690  var require_form_controller = __commonJS({
51691    "apps/base/assets/javascripts/components/form/controllers/form_controller.coffee"(exports) {
51692      "use strict";
51693      init_esbuild_shims();
51694      var import_moment2 = __toESM(require_moment());
51695      init_field_view();
51696      init_result_view();
51697      init_form_view();
51698      init_magic_form_view();
51699      init_form_submit_service();
51700      init_form_model();
51701      var EmailField;
51702      var FileUpload;
51703      var FormController;
51704      var FormField;
51705      var NumericField;
51706      var observer;
51707      var onCaptchaLoaded;
51708      require_select22();
51709      FormField = require_field();
51710      EmailField = require_email_field();
51711      NumericField = require_numeric_field();
51712      FileUpload = require_file_upload();
51713      FormController = (function() {
51714        var EMAIL_NAME;
51715        class FormController2 {
51716          constructor(el) {
51717            this.initFormResults = this.initFormResults.bind(this);
51718            this.initFormView = this.initFormView.bind(this);
51719            this.initMagicFormView = this.initMagicFormView.bind(this);
51720            this.processFieldChange = this.processFieldChange.bind(this);
51721            this.validatePrefilledInfo = this.validatePrefilledInfo.bind(this);
51722            this.submitForm = this.submitForm.bind(this);
51723            this.handleFormSubmitResponse = this.handleFormSubmitResponse.bind(this);
51724            this.handleFailedSubmit = this.handleFailedSubmit.bind(this);
51725            this.updateConditionalFields = this.updateConditionalFields.bind(this);
51726            this.el = el;
51727            this.language = jQuery("meta[name=language]").attr("content") || "en";
51728            this.$form = jQuery(this.el);
51729            this.$formIntroduction = this.$form.siblings("p");
51730            this.initializeForm();
51731            if (this.$form.hasClass("magic-form")) {
51732              this.initMagicFormView();
51733            } else {
51734              this.initFormView();
51735            }
51736            this.initFormResults();
51737            if (this.shouldShowPlaceholders()) {
51738              this.showPlaceholders();
51739            }
51740            this.validatePrefilledInfo();
51741            this.attachEvents();
51742          }
51743          initFormResults() {
51744            if (this.$form.siblings(".form-result").length > 0) {
51745              return this.resultView = new result_view_default(this.$form.siblings(".form-result"));
51746            } else {
51747              return this.resultView = new result_view_default(this.$form.find(".form-result"));
51748            }
51749          }
51750          initFormView() {
51751            return this.formView = new form_view_default(this.$form);
51752          }
51753          initMagicFormView() {
51754            return this.formView = new magic_form_view_default(this.$form, this.fieldModels, this.fieldViews);
51755          }
51756          initializeForm() {
51757            var endpoint;
51758            $(".selectbox select").select2({
51759              minimumResultsForSearch: Infinity,
51760              placeholder: $("input[name='sitetext_select2_text']").val()
51761            });
51762            $(".selectbox-search select").select2({
51763              placeholder: $("input[name='sitetext_select2_text']").val()
51764            });
51765            $(".selectbox-with-all select").select2({
51766              minimumResultsForSearch: Infinity
51767            });
51768            $(".selectbox-search-with-all select").select2();
51769            $('select[name="form_field[robot_name]"]').select2({
51770              placeholder: $('select[name="form_field[robot_name]"] option:first').html()
51771            });
51772            this.fieldViews = {};
51773            this.fieldModels = {};
51774            this.initializeFields();
51775            this.createFormModel();
51776            this.analyticsUrl = this.$form.data("analytics-url");
51777            endpoint = this.$form.attr("action") || location.pathname + ".json";
51778            return this.formSubmitService = new form_submit_service_default(endpoint, this.$form.attr("method"));
51779          }
51780          createFormModel() {
51781            return this.formModel = new form_model_default({
51782              formElement: this.$form,
51783              fields: this.fieldsForStep(1),
51784              step: this.$form.parents(".form-popup-wrapper").length === 1 ? this.$form.find("div.step:not(.submit)").length : 1,
51785              totalSteps: parseInt(this.$form.data("total-steps")),
51786              options: {
51787                collapsible: this.$form.parents("div.inline-form-container").hasClass("collapsible"),
51788                trackable: !this.$form.hasClass("no-tracking")
51789              }
51790            });
51791          }
51792          initializeFields() {
51793            return this.$form.find("fieldset").each((index, element) => {
51794              var field, fieldModel, fieldName, fieldView;
51795              field = jQuery(element);
51796              if (fieldName = field.data("field-element-name")) {
51797                fieldView = new field_view_default(field);
51798                this.fieldViews[fieldName] = fieldView;
51799                fieldModel = this.createFieldModel(field);
51800                this.fieldModels[fieldName] = fieldModel;
51801                fieldView.subscribe("change", this.processFieldChange);
51802                fieldModel.subscribe("validation-success", fieldView.showValid);
51803                return fieldModel.subscribe("validation-failed", fieldView.showValidationError);
51804              }
51805            });
51806          }
51807          fieldsForStep(step) {
51808            var fieldModel, name, ref, results;
51809            ref = this.fieldModels;
51810            results = [];
51811            for (name in ref) {
51812              fieldModel = ref[name];
51813              if (fieldModel.step === step && this.fieldViews[name].isVisible()) {
51814                results.push(fieldModel);
51815              }
51816            }
51817            return results;
51818          }
51819          createFieldModel(field) {
51820            var fieldModel, info, step;
51821            step = field.parents("div.step").length === 0 || field.parents("div.step").hasClass("step1") || field.parents(".form-popup-wrapper").length === 1 ? 1 : 2;
51822            info = {
51823              required: field.hasClass("required"),
51824              conditionalLinkedTo: field.data("condition-field"),
51825              conditionalValue: field.data("condition-value"),
51826              step,
51827              error: this.$form.find("span[data-label='required-field-error']").html(),
51828              multiStep: field.parents("div.step").data("step")
51829            };
51830            switch (field.find("input").data("type")) {
51831              case "email":
51832                info = jQuery.extend(info, {
51833                  specificError: this.$form.find("span[data-label='invalid-email-error']").html()
51834                });
51835                return fieldModel = new EmailField(info);
51836              case "numeric":
51837                info = jQuery.extend(info, {
51838                  specificError: this.$form.find("span[data-label='invalid-number-error']").html()
51839                });
51840                return fieldModel = new NumericField(info);
51841              case "file":
51842                info = jQuery.extend(info, {
51843                  allowedExtensions: field.find("input").data("extentions"),
51844                  maxFileSize: field.find("input").data("size"),
51845                  extensionsError: field.find("span[data-label='invalid-file-extension']").html(),
51846                  sizeError: field.find("span[data-label='invalid-file-size']").html()
51847                });
51848                return fieldModel = new FileUpload(info, field);
51849              default:
51850                return fieldModel = new FormField(info);
51851            }
51852          }
51853          updateFieldValues() {
51854            var fieldView, name, ref, results;
51855            ref = this.fieldViews;
51856            results = [];
51857            for (name in ref) {
51858              fieldView = ref[name];
51859              results.push(this.fieldModels[name].updateValue(fieldView.getValue()));
51860            }
51861            return results;
51862          }
51863          processFieldChange(fieldName) {
51864            this.fieldModels[fieldName].updateValue(this.fieldViews[fieldName].getValue());
51865            this.updateConditionalFields(fieldName);
51866            if (fieldName === EMAIL_NAME) {
51867              return this.fieldModels[fieldName].backendValidate();
51868            } else {
51869              this.fieldModels[fieldName].validate();
51870              if (fieldName === "form_field[date]" && this.fieldModels[EMAIL_NAME] && this.fieldModels[EMAIL_NAME].isValid()) {
51871                return this.fieldModels[EMAIL_NAME].backendValidate();
51872              }
51873            }
51874          }
51875          validatePrefilledInfo() {
51876            var field, name, ref;
51877            ref = this.fieldViews;
51878            for (name in ref) {
51879              field = ref[name];
51880              if (name !== EMAIL_NAME) {
51881                if (field.isVisible() && field.shouldTriggerValidationOnInit()) {
51882                  this.fieldModels[name].updateValue(this.fieldViews[name].getValue());
51883                  this.fieldModels[name].validate();
51884                }
51885              }
51886            }
51887            if (this.fieldModels[EMAIL_NAME]) {
51888              if (this.fieldViews[EMAIL_NAME].isVisible() && this.fieldViews[EMAIL_NAME].shouldTriggerValidationOnInit()) {
51889                this.fieldModels[EMAIL_NAME].updateValue(this.fieldViews[EMAIL_NAME].getValue());
51890                return this.fieldModels[EMAIL_NAME].backendValidate();
51891              }
51892            }
51893          }
51894          attachEvents() {
51895            if (this.formModel.isCollapsible()) {
51896              this.$form.parents(".inline-form-container").find("div.heading, div.description").click((event2) => {
51897                var expandedState;
51898                this.formView.toggleShownState();
51899                expandedState = this.formView.isExpanded() ? "Expanded" : "Collapsed";
51900                return this.trackEvent(expandedState, this.analyticsUrl);
51901              });
51902            } else if (this.formModel.isTrackable()) {
51903              if (this.formModel.isContainedInModal()) {
51904                $(`[href='#${this.$form.parents(".mfp-hide").attr("id")}']`).click((event2) => {
51905                  return this.trackEvent("Visited", this.analyticsUrl);
51906                });
51907              } else {
51908                this.trackNonInteractionEvent("Visited", this.analyticsUrl);
51909              }
51910            }
51911            this.$form.find("button[type='submit']").click((event2) => {
51912              event2.preventDefault();
51913              this.formView.showLoadingIndicator();
51914              this.hideValidationErrors();
51915              this.resultView.hideGlobalErrorMessage();
51916              this.updateFieldValues();
51917              if (this.formModel.validate()) {
51918                if (this.$form.find(".g-recaptcha").length === 1) {
51919                  this.$form.find("[name='g-recaptcha-response']").val("");
51920                  grecaptcha.execute(this.widgetId, {
51921                    action: "submit_form"
51922                  }).then((token) => {
51923                    this.$form.find("[name='g-recaptcha-response']").val(token);
51924                    if (this.fieldModels[EMAIL_NAME]) {
51925                      return this.fieldModels[EMAIL_NAME].backendValidate().then((response) => {
51926                        if (response) {
51927                          return this.submitForm();
51928                        } else {
51929                          return this.formView.hideLoadingIndicator();
51930                        }
51931                      });
51932                    } else {
51933                      return this.submitForm();
51934                    }
51935                  });
51936                } else {
51937                  if (this.fieldModels[EMAIL_NAME]) {
51938                    this.fieldModels[EMAIL_NAME].backendValidate().then((response) => {
51939                      if (response) {
51940                        return this.submitForm();
51941                      } else {
51942                        return this.formView.hideLoadingIndicator();
51943                      }
51944                    });
51945                  } else {
51946                    this.submitForm();
51947                  }
51948                }
51949              } else {
51950                this.formView.hideLoadingIndicator();
51951              }
51952              return false;
51953            });
51954            this.$form.on("recaptcha-loaded", (event2, data) => {
51955              if (this.$form.find(".g-recaptcha .grecaptcha-badge").length === 1) {
51956                return;
51957              }
51958              return this.widgetId = grecaptcha.render(this.$form.find(".g-recaptcha")[0], {
51959                "sitekey": this.$form.find(".g-recaptcha").attr("data-sitekey"),
51960                "badge": "inline",
51961                "size": "invisible"
51962              });
51963            });
51964            this.$form.on("form-submit-success", (event2, data) => {
51965              this.formView.hideLoadingIndicator();
51966              return this.processFormSubmitResponse(data);
51967            });
51968            return $(".ctas-calculator a.button.form-popup-link").on("click", (event2) => {
51969              this.$form.find('input[name="form_meta[oc_codes]"]').attr("value", $("#roi-calculation").data("roiproductfamily"));
51970              this.$form.find('input[name="form_meta[calculation_url]"]').attr("value", $("#link-url").data("linkurl"));
51971              this.$form.find('input[name="form_meta[product_name]"]').attr("value", $("#product-name").data("productname"));
51972              return this.$form.find('input[name="form_meta[product_quantity]"]').attr("value", $("#product-quantity").data("productquantity"));
51973            });
51974          }
51975          submitForm() {
51976            if (this.customSubmit()) {
51977              return this.$form.trigger("form-submit", this);
51978            } else {
51979              if (this.useAjax()) {
51980                return this.formSubmitService.submit(this.$form.serializeArray(), this.$form.find(":file"), this.handleFormSubmitResponse);
51981              } else {
51982                return this.$form.submit();
51983              }
51984            }
51985          }
51986          handleFormSubmitResponse(formSubmitResponse) {
51987            var event2, success;
51988            if (formSubmitResponse.isSuccess()) {
51989              this.$form.trigger("form-submit-success", formSubmitResponse.data);
51990              if (this.$form.data("dispatch")) {
51991                event2 = new CustomEvent(`${this.$form.data("dispatch")}-success`, {
51992                  detail: formSubmitResponse.data
51993                });
51994                window.dispatchEvent(event2);
51995              }
51996              jQuery(window).trigger("form-submit-success");
51997              if (!window.location.hash.includes("events") && !window.location.pathname.includes("my-lists")) {
51998                success = window.location.protocol + "//" + window.location.host + window.location.pathname + "?success";
51999                return window.history.pushState({
52000                  path: success
52001                }, "", success);
52002              }
52003            } else {
52004              return this.handleFailedSubmit(formSubmitResponse.data, formSubmitResponse.error);
52005            }
52006          }
52007          handleFailedSubmit(data, errorThrown) {
52008            var event2;
52009            this.formView.hideLoadingIndicator();
52010            if (this.$form.data("dispatch")) {
52011              event2 = new CustomEvent(`${this.$form.data("dispatch")}-failure`);
52012              window.dispatchEvent(event2);
52013            }
52014            if (data.errors && data.errors.length > 0) {
52015              return this.processErrors(data);
52016            } else {
52017              return this.resultView.showGlobalErrorMessage(errorThrown);
52018            }
52019          }
52020          processFormSubmitResponse(response) {
52021            if (!window.location.hash.includes("events") && response.redirect) {
52022              return this.processRedirect(response);
52023            } else {
52024              return this.processSuccess(response);
52025            }
52026          }
52027          processErrors(response) {
52028            var error, i, len, ref, results;
52029            this.trackEvent("With errors", this.analyticsUrl);
52030            ref = response.errors;
52031            results = [];
52032            for (i = 0, len = ref.length; i < len; i++) {
52033              error = ref[i];
52034              if (this.fieldViews[error.field_name]) {
52035                results.push(this.fieldViews[error.field_name].showValidationError(error.value));
52036              } else {
52037                results.push(this.resultView.showGlobalErrorMessage(error));
52038              }
52039            }
52040            return results;
52041          }
52042          processRedirect(response) {
52043            return window.location = response.redirect;
52044          }
52045          processSuccess(response) {
52046            var newsLetterPresent;
52047            if (this.formView.isMultiStep || this.formModel.inLastStep()) {
52048              newsLetterPresent = this.fieldModels["form_field[subscribe_to_enews]"] || this.fieldModels["form_field[subscribe_to_newsletter]"] || false;
52049              this.trackEvent(newsLetterPresent.value === "on" ? "Completed (with newsletter signup)" : "Completed", this.analyticsUrl);
52050              if (this.formView.shouldHideUponSuccess()) {
52051                this.formView.hide();
52052                this.$formIntroduction.hide();
52053              }
52054              this.resultView.showSuccessMessage();
52055              if (response.download) {
52056                return this.resultView.showAndStartDownload(response.download);
52057              }
52058            } else {
52059              this.trackEvent("In progress", this.analyticsUrl);
52060              this.formModel.goToNextStep();
52061              this.formView.showSecondStep();
52062              return this.formModel.updateFields(this.fieldsForStep(this.formModel.step));
52063            }
52064          }
52065          updateConditionalFields(fieldName) {
52066            var fieldView, name, ref;
52067            ref = this.fieldViews;
52068            for (name in ref) {
52069              fieldView = ref[name];
52070              if (this.fieldModels[name].conditionalLinkedTo === this.fieldViews[fieldName].name) {
52071                if (this.fieldModels[name].conditionalValue === this.fieldViews[fieldName].getKey()) {
52072                  fieldView.show();
52073                } else {
52074                  fieldView.hide();
52075                }
52076              }
52077            }
52078            return this.formModel.updateFields(this.fieldsForStep(this.formModel.step));
52079          }
52080          hideValidationErrors() {
52081            var fieldView, name, ref, results;
52082            ref = this.fieldViews;
52083            results = [];
52084            for (name in ref) {
52085              fieldView = ref[name];
52086              results.push(fieldView.resetValidationError());
52087            }
52088            return results;
52089          }
52090          // Google Analytics tracking
52091          trackEvent(action, label) {
52092            return window.trackEvent("Forms", action, label);
52093          }
52094          trackNonInteractionEvent(action, label) {
52095            return window.trackNonInteractionEvent("Forms", action, label);
52096          }
52097          // Some form properties dependent on DOM element attributes/classes
52098          useAjax() {
52099            if (this.$form.is("[data-ajax]")) {
52100              return this.$form.data("ajax");
52101            } else {
52102              return true;
52103            }
52104          }
52105          customSubmit() {
52106            if (this.$form.is("[data-customsubmit]")) {
52107              return this.$form.data("customsubmit");
52108            } else {
52109              return false;
52110            }
52111          }
52112          shouldShowPlaceholders() {
52113            return this.$form.hasClass("no-labels");
52114          }
52115          showPlaceholders() {
52116            var fieldView, name, ref, results;
52117            ref = this.fieldViews;
52118            results = [];
52119            for (name in ref) {
52120              fieldView = ref[name];
52121              results.push(fieldView.showPlaceholders());
52122            }
52123            return results;
52124          }
52125        }
52126        ;
52127        EMAIL_NAME = "form_field[email_address]";
52128        return FormController2;
52129      }).call(exports);
52130      jQuery(function() {
52131        var attachCalculatorFormLocalStorage, prefillCalculatorForm;
52132        jQuery("form[data-validation]").each((index, element) => {
52133          if (jQuery(element).parents("#cta-form-base").length > 0) {
52134            return;
52135          }
52136          if (jQuery(element).attr("id") === "calculator-form") {
52137            return;
52138          }
52139          return new FormController(element);
52140        });
52141        jQuery(window).on("initialize-calculator-form", () => {
52142          new FormController("#calculator-form");
52143          attachCalculatorFormLocalStorage();
52144          return prefillCalculatorForm();
52145        });
52146        attachCalculatorFormLocalStorage = function() {
52147          return jQuery("body").on("change", "#calculator-form input, #calculator-form select", (event2) => {
52148            var calculatorUserDetails, input, updatedUserDetails;
52149            calculatorUserDetails = JSON.parse(localStorage.getItem("calculatorUserDetails"));
52150            input = {
52151              [`${event2.target.name}`]: event2.target.value,
52152              expiry: (0, import_moment2.default)().add(24, "hours").valueOf()
52153            };
52154            updatedUserDetails = $.extend(calculatorUserDetails, input);
52155            return localStorage.setItem("calculatorUserDetails", JSON.stringify(updatedUserDetails));
52156          });
52157        };
52158        return prefillCalculatorForm = function() {
52159          var calculatorUserDetails, fieldName, results, value;
52160          calculatorUserDetails = JSON.parse(localStorage.getItem("calculatorUserDetails"));
52161          if (calculatorUserDetails) {
52162            results = [];
52163            for (fieldName in calculatorUserDetails) {
52164              value = calculatorUserDetails[fieldName];
52165              if (fieldName === "form_field[country]") {
52166                results.push(jQuery(`select[name='${fieldName}'`).val(value).trigger("change"));
52167              } else {
52168                results.push(jQuery(`input[name='${fieldName}'`).val(value));
52169              }
52170            }
52171            return results;
52172          }
52173        };
52174      });
52175      onCaptchaLoaded = function() {
52176        return jQuery("form .g-recaptcha").each((index, element) => {
52177          if (jQuery(element).parents("#cta-form-base").length === 0) {
52178            return jQuery(element).parents("form").trigger("recaptcha-loaded");
52179          }
52180        });
52181      };
52182      window.onCaptchaLoaded = onCaptchaLoaded;
52183      if (window.location.href.indexOf("my-lists")) {
52184        observer = new MutationObserver(function(mutations_list) {
52185          return mutations_list.forEach(function(mutation) {
52186            return mutation.addedNodes.forEach(function(added_node) {
52187              var element;
52188              if (added_node.id === "cta-form") {
52189                element = jQuery(added_node).find("form[data-validation]");
52190                new FormController(element);
52191                return jQuery("head").append('<script src="https://www.recaptcha.net/recaptcha/api.js?render=explicit&onload=onCaptchaLoaded"><\/script>');
52192              }
52193            });
52194          });
52195        });
52196        observer.observe(document.querySelector("body"), {
52197          subtree: true,
52198          childList: true
52199        });
52200      }
52201    }
52202  });
52203
52204  // apps/base/assets/javascripts/components/information_block_video.coffee
52205  var require_information_block_video = __commonJS({
52206    "apps/base/assets/javascripts/components/information_block_video.coffee"(exports) {
52207      "use strict";
52208      init_esbuild_shims();
52209      (function() {
52210        jQuery("body").on("mouseenter", ".inline-video .video", function(event2) {
52211          jQuery(event2.currentTarget).find("video").get(0).play();
52212          return jQuery(event2.currentTarget).find(".hover-over").fadeOut();
52213        });
52214        jQuery("body").on("mouseleave", ".inline-video .video", function(event2) {
52215          jQuery(event2.currentTarget).find("video").get(0).pause();
52216          return jQuery(event2.currentTarget).find(".hover-over").fadeIn();
52217        });
52218      }).call(exports);
52219    }
52220  });
52221
52222  // apps/base/assets/javascripts/components/insights.coffee
52223  var require_insights = __commonJS({
52224    "apps/base/assets/javascripts/components/insights.coffee"(exports) {
52225      "use strict";
52226      init_esbuild_shims();
52227      (function() {
52228        var Insights;
52229        Insights = class Insights {
52230          constructor(el) {
52231            this.bindNavigation = this.bindNavigation.bind(this);
52232            this.el = el;
52233            this.bindNavigation();
52234          }
52235          bindNavigation() {
52236            this.el.off("click.insights", ".insights-block__navigation__item a");
52237            return this.el.on("click.insights", ".insights-block__navigation__item a", (e) => {
52238              var $link, href, id;
52239              e.preventDefault();
52240              $link = jQuery(e.currentTarget);
52241              href = $link.attr("href") || "";
52242              if (href.charAt(0) !== "#") {
52243                return;
52244              }
52245              id = href.slice(1);
52246              this.el.find(".insights-block__navigation__item").removeClass("active");
52247              $link.closest(".insights-block__navigation__item").addClass("active");
52248              this.el.find(".insights-block__tab").removeClass("active");
52249              return this.el.find(`#${id}`).addClass("active");
52250            });
52251          }
52252        };
52253        jQuery(".insights-block").each(function(index, element) {
52254          return new Insights(jQuery(element));
52255        });
52256      }).call(exports);
52257    }
52258  });
52259
52260  // apps/base/assets/javascripts/components/landing_pages.coffee
52261  var require_landing_pages = __commonJS({
52262    "apps/base/assets/javascripts/components/landing_pages.coffee"(exports) {
52263      "use strict";
52264      init_esbuild_shims();
52265      (function() {
52266        var LandingPageListing;
52267        LandingPageListing = class LandingPageListing {
52268          constructor($el) {
52269            this.attachHandlers = this.attachHandlers.bind(this);
52270            this.showListItems = this.showListItems.bind(this);
52271            this.showGridItems = this.showGridItems.bind(this);
52272            this.filters = this.filters.bind(this);
52273            this.handleBrowserNavigation = this.handleBrowserNavigation.bind(this);
52274            this.currentPage = this.currentPage.bind(this);
52275            this.scrollToTop = this.scrollToTop.bind(this);
52276            this.$el = $el;
52277            this.endpoint = this.$el.attr("data-endpoint");
52278            this.landingUri = this.$el.attr("data-landing");
52279            this.blockUri = this.$el.attr("data-block");
52280            this.loadingIndicator = this.$el.find(".loading-container");
52281            this.selectedFilters = {};
52282            this.attachHandlers();
52283          }
52284          attachHandlers() {
52285            this.$el.on("click", "#pagination a", (event2) => {
52286              var page;
52287              event2.preventDefault();
52288              jQuery(window).trigger("filtered-paginate", this.filters);
52289              page = jQuery(event2.currentTarget).attr("data-page");
52290              this.updateListing(page, true, this.selectedFilters);
52291              return this.scrollToTop();
52292            });
52293            this.$el.prev().find(".listing-tabs").on("tab-change", (event2) => {
52294              return this.updatePageParam(1);
52295            });
52296            this.$el.find(".cards").on("click", ".list-item .dates .future", (event2) => {
52297              return window.location = $(event2.currentTarget).data("href");
52298            });
52299            jQuery(window).on("filtered-update-listing", (e, filters) => {
52300              this.updatePageParam(1);
52301              return this.updateListing(this.getPageParam(), true, filters);
52302            });
52303            this.$el.prev().find(".view-options .view").on("click", (event2) => {
52304              this.$el.prev().find(".view.selected").removeClass("selected");
52305              jQuery(event2.currentTarget).addClass("selected");
52306              if (jQuery(event2.currentTarget).attr("id") === "grid-view") {
52307                return this.showGridItems();
52308              } else {
52309                return this.showListItems();
52310              }
52311            });
52312            jQuery(window).on("popstate", this.handleBrowserNavigation);
52313            return jQuery(window).on("load", () => {
52314              if (this.$el.prev().find("#list-view").hasClass("selected") || !this.$el.find("article.card").length) {
52315                return this.showListItems();
52316              }
52317            });
52318          }
52319          showListItems() {
52320            this.$el.find("article.card").hide();
52321            return this.$el.find(".list-item").css("display", "flex");
52322          }
52323          showGridItems() {
52324            this.$el.find(".list-item").hide();
52325            return this.$el.find("article.card").show();
52326          }
52327          filters(filters) {
52328            return this.selectedFilters = filters;
52329          }
52330          handleBrowserNavigation() {
52331            var page;
52332            page = this.getPageParam();
52333            if (page !== this.currentPage()) {
52334              return this.updateListing(page, false);
52335            }
52336          }
52337          getPageParam() {
52338            var page;
52339            page = "1";
52340            if (location.search.indexOf("page=") > 0) {
52341              page = location.search.slice("-1");
52342            }
52343            return page;
52344          }
52345          updatePageParam(page) {
52346            var pageUrl;
52347            pageUrl = location.pathname + "?page=" + page;
52348            if (location.hash) {
52349              pageUrl = pageUrl + location.hash;
52350            }
52351            return history.pushState({
52352              path: pageUrl
52353            }, "", pageUrl);
52354          }
52355          currentPage() {
52356            return this.$el.find(".cards.active .page.number.selected").attr("data-page") || "1";
52357          }
52358          updateListing(page, updatePageParam = true, filters = null) {
52359            var params, query, tabNumber;
52360            this.loadingIndicator.show();
52361            if (updatePageParam) {
52362              this.updatePageParam(page);
52363            }
52364            tabNumber = this.$el.find(".cards.active").attr("data-tab");
52365            params = {
52366              landing_uri: this.landingUri,
52367              block_uri: this.blockUri,
52368              page,
52369              tab_number: tabNumber,
52370              filters
52371            };
52372            query = this.endpoint + "?" + jQuery.param(params);
52373            return jQuery.get(query, (data) => {
52374              if (page === "1" && this.$el.attr("data-featured")) {
52375                this.$el.addClass("featured");
52376              }
52377              this.$el.find(".cards.active section").empty();
52378              this.$el.find(".cards.active section").append(data);
52379              if (this.$el.prev().find("#list-view").hasClass("selected") || !this.$el.find("article.card").length) {
52380                this.showListItems();
52381              }
52382              if (window.initVideoPopups) {
52383                window.initVideoPopups();
52384              }
52385              jQuery(window).trigger("enable-options", data);
52386              this.loadingIndicator.hide();
52387              return jQuery(window).trigger("resize-cards");
52388            });
52389          }
52390          scrollToTop() {
52391            return jQuery(window).scrollTop(this.$el.parent().scrollTop());
52392          }
52393        };
52394        jQuery("section.listing").each(function(index, element) {
52395          return new LandingPageListing(jQuery(element));
52396        });
52397      }).call(exports);
52398    }
52399  });
52400
52401  // apps/base/assets/javascripts/components/listing_tabs.coffee
52402  var require_listing_tabs = __commonJS({
52403    "apps/base/assets/javascripts/components/listing_tabs.coffee"(exports, module) {
52404      "use strict";
52405      init_esbuild_shims();
52406      (function() {
52407        var ListingTabs;
52408        ListingTabs = class ListingTabs {
52409          constructor($el) {
52410            this.attachHandlers = this.attachHandlers.bind(this);
52411            this.addExtraTabsToDropdown = this.addExtraTabsToDropdown.bind(this);
52412            this.positionExtraTabs = this.positionExtraTabs.bind(this);
52413            this.$el = $el;
52414            this.attachHandlers();
52415          }
52416          attachHandlers() {
52417            this.$el.find(".more-tabs, .extra-tabs").on("mouseenter", () => {
52418              return this.$el.find(".extra-tabs").show();
52419            });
52420            this.$el.find(".more-tabs, .extra-tabs").on("mouseleave", () => {
52421              return this.$el.find(".extra-tabs").hide();
52422            });
52423            if (!navigator.userAgent.match(/Mobile/g)) {
52424              this.addExtraTabsToDropdown();
52425              this.positionExtraTabs();
52426            }
52427            jQuery(window).on("breakpoint-change", (e, breakpoint) => {
52428              if (breakpoint === "desktop") {
52429                this.addExtraTabsToDropdown();
52430                return this.positionExtraTabs();
52431              }
52432            });
52433            return $(window).resize(() => {
52434              return this.positionExtraTabs();
52435            });
52436          }
52437          addExtraTabsToDropdown() {
52438            var moreButtonWidth, tabsToAddToDropdown, totalTabsWidth;
52439            tabsToAddToDropdown = [];
52440            totalTabsWidth = 0;
52441            moreButtonWidth = jQuery(".listed-items .more-tabs").outerWidth();
52442            this.$el.find("> ul li").each((index, element) => {
52443              var isMoreTabs, lastItem;
52444              totalTabsWidth += jQuery(element).outerWidth();
52445              lastItem = this.$el.find("> ul li").length - 2 === index;
52446              isMoreTabs = jQuery(element).hasClass("more-tabs");
52447              if (jQuery(element).hasClass("more-tabs")) {
52448                return;
52449              }
52450              if (!lastItem && totalTabsWidth > ($(".page-width").width() - moreButtonWidth) * 0.8 || totalTabsWidth > $(".page-width").width() * 0.8) {
52451                this.$el.find(".more-tabs").css("display", "inline-block");
52452                return tabsToAddToDropdown.push(jQuery(element));
52453              }
52454            });
52455            return tabsToAddToDropdown.forEach((tab) => {
52456              if (!tab.hasClass("more-tabs")) {
52457                return this.$el.find(".extra-tabs").append(tab);
52458              }
52459            });
52460          }
52461          positionExtraTabs() {
52462            var extraTabs, extraTabsWidth, finalTotalTabsWidth;
52463            extraTabs = this.$el.find(".extra-tabs");
52464            if (extraTabs.length) {
52465              extraTabsWidth = this.$el.find(".extra-tabs").width();
52466              finalTotalTabsWidth = 0;
52467              this.$el.find(".listed-items li").each((index, element) => {
52468                return finalTotalTabsWidth += parseInt(jQuery(element).css("width"));
52469              });
52470              if ($(".page-width").width() - finalTotalTabsWidth < extraTabsWidth) {
52471                extraTabs.css("right", "0px");
52472                return extraTabs.css("left", "auto");
52473              } else {
52474                extraTabs.css("left", this.$el.find(".more-tabs").position().left.toString() + "px");
52475                return extraTabs.css("right", "auto");
52476              }
52477            }
52478          }
52479        };
52480        jQuery(".listing-tabs").each(function(index, element) {
52481          return new ListingTabs(jQuery(element));
52482        });
52483        module.exports = ListingTabs;
52484      }).call(exports);
52485    }
52486  });
52487
52488  // apps/base/assets/javascripts/components/lms_trainings.coffee
52489  var require_lms_trainings = __commonJS({
52490    "apps/base/assets/javascripts/components/lms_trainings.coffee"(exports) {
52491      "use strict";
52492      init_esbuild_shims();
52493      (function() {
52494        jQuery("a.button.lms_link").each(function(index, element) {
52495          return jQuery(element).click(function(event2) {
52496            return window.trackEvent("LMS button", "Click", jQuery(event2.currentTarget).attr("href"));
52497          });
52498        });
52499      }).call(exports);
52500    }
52501  });
52502
52503  // apps/base/assets/javascripts/components/login/authentication_dialog.coffee
52504  var require_authentication_dialog = __commonJS({
52505    "apps/base/assets/javascripts/components/login/authentication_dialog.coffee"(exports) {
52506      "use strict";
52507      init_esbuild_shims();
52508      (function() {
52509        var AuthenticationDialog;
52510        AuthenticationDialog = class AuthenticationDialog {
52511          constructor(el) {
52512            this.attachEvents = this.attachEvents.bind(this);
52513            this.toggleDialog = this.toggleDialog.bind(this);
52514            this.el = el;
52515            this.attachEvents();
52516          }
52517          attachEvents() {
52518            return $("body").on("click", this.toggleDialog);
52519          }
52520          toggleDialog(event2) {
52521            if (this.el.hasClass("open") && !$(event2.target).closest("#authentication-modal").length) {
52522              return this.el.removeClass("open");
52523            } else if (!this.el.hasClass("open") && ($(event2.target).is("#authentication_dialog, #logged_user_dialog") || $(event2.target).closest("#authentication_dialog, #logged_user_dialog").length > 0)) {
52524              return this.el.addClass("open");
52525            }
52526          }
52527        };
52528        $(document).ready(function() {
52529          var authenticationDialog, loggedUserDialog;
52530          authenticationDialog = new AuthenticationDialog(jQuery("div#authentication_dialog"));
52531          authenticationDialog.el.removeClass("open");
52532          loggedUserDialog = new AuthenticationDialog(jQuery("div#logged_user_dialog"));
52533          return loggedUserDialog.el.removeClass("open");
52534        });
52535      }).call(exports);
52536    }
52537  });
52538
52539  // apps/base/assets/javascripts/components/login/complete_account_form.coffee
52540  var require_complete_account_form = __commonJS({
52541    "apps/base/assets/javascripts/components/login/complete_account_form.coffee"(exports) {
52542      "use strict";
52543      init_esbuild_shims();
52544      (function() {
52545        var CompleteAccountForm;
52546        CompleteAccountForm = class CompleteAccountForm {
52547          constructor(form) {
52548            this.updateSuccessMessage = this.updateSuccessMessage.bind(this);
52549            this.form = form;
52550            this.disablePrefilledFields();
52551            this.attachEvents();
52552            this.selectFirstAccountType();
52553            this.updateSuccessMessage();
52554            this.serviceUrl = "";
52555          }
52556          selectFirstAccountType() {
52557            return this.form.find("[data-field-element-name='form_field[account_type]'] input:first").click();
52558          }
52559          attachEvents() {
52560            this.form.find("[data-field-element-name='form_field[account_type]'] input").on("change", (event2) => {
52561              return this.updateSuccessMessage();
52562            });
52563            this.form.on("form-submit-success", (event2, data) => {
52564              if (data.service) {
52565                this.serviceUrl = data.service;
52566                window.loginForm.setEmailAddress(this.form.find("input[name='form_field[email_address]']").val());
52567                window.loginForm.setPassword(this.form.find("input[name='form_field[password]']").val());
52568                if (this.form.siblings(".form-result").find("form").data("redirect")) {
52569                  return window.loginForm.setRedirect(this.form.siblings(".form-result").find("form").data("redirect"));
52570                }
52571              }
52572            });
52573            this.form.parents(".inline-form").find("input.login").on("click", (event2) => {
52574              window.loginForm.login(this.serviceUrl);
52575              return event2.preventDefault();
52576            });
52577            this.form.siblings(".form-result").find("button[type='submit']").on("click", (event2) => {
52578              window.loginForm.login(this.serviceUrl);
52579              return event2.preventDefault();
52580            });
52581            return jQuery("form.login").on("login-failed", (event2) => {
52582              if (this.form.hasClass("no-labels")) {
52583                return this.form.siblings(".form-result").find(".failure").show();
52584              } else {
52585                return this.form.siblings(".result").find(".failure").show();
52586              }
52587            });
52588          }
52589          disablePrefilledFields() {
52590            return this.form.find("input[data-type='email']").attr("readonly", "readonly");
52591          }
52592          updateSuccessMessage() {
52593            var field, selectedOption;
52594            selectedOption = this.form.find("[data-field-element-name='form_field[account_type]'] input:checked");
52595            if (selectedOption.length === 0) {
52596              field = this.form.find("[data-field-element-name='form_field[account_type]'] input[type='text']");
52597              if (this.form.hasClass("no-labels")) {
52598                return this.form.siblings("div.form-result").find("p.success").html(field.data("success"));
52599              } else {
52600                return this.form.siblings("div.result").find("div.success p").html(field.data("success"));
52601              }
52602            } else {
52603              if (this.form.hasClass("no-labels")) {
52604                this.form.siblings("div.form-result").find("p.success").html(selectedOption.data("success"));
52605              } else {
52606                this.form.siblings("div.result").find("div.success p").html(selectedOption.data("success"));
52607              }
52608              this.form.find("[data-field-element-name='form_field[account_type]'] p").addClass("hidden");
52609              return selectedOption.siblings("p").removeClass("hidden");
52610            }
52611          }
52612        };
52613        jQuery("#complete-account").each((index, element) => {
52614          return new CompleteAccountForm(jQuery(element));
52615        });
52616      }).call(exports);
52617    }
52618  });
52619
52620  // apps/base/assets/javascripts/components/login/models/login_check.coffee
52621  var require_login_check = __commonJS({
52622    "apps/base/assets/javascripts/components/login/models/login_check.coffee"(exports, module) {
52623      "use strict";
52624      init_esbuild_shims();
52625      (function() {
52626        var LoginCheck;
52627        LoginCheck = class LoginCheck {
52628          constructor(request) {
52629            this.status = request.status;
52630            if (request.responseText) {
52631              this.message = JSON.parse(request.responseText);
52632            }
52633          }
52634          isAuthenticated() {
52635            return this.status === 200 || this.status === 201;
52636          }
52637          hasUnverifiedEmail() {
52638            return this.error() === "unverified_email";
52639          }
52640          lockedOut() {
52641            return this.error() === "locked_out";
52642          }
52643          newPasswordRequired() {
52644            return this.error() === "new_password_required";
52645          }
52646          error() {
52647            if (this.message) {
52648              return this.message.error;
52649            }
52650          }
52651        };
52652        module.exports = LoginCheck;
52653      }).call(exports);
52654    }
52655  });
52656
52657  // apps/base/assets/javascripts/components/login/models/login_response.coffee
52658  var require_login_response = __commonJS({
52659    "apps/base/assets/javascripts/components/login/models/login_response.coffee"(exports, module) {
52660      "use strict";
52661      init_esbuild_shims();
52662      (function() {
52663        var LoginResponse;
52664        LoginResponse = class LoginResponse {
52665          constructor(json) {
52666            this.data = json || {};
52667          }
52668          loggedIn() {
52669            return !!this.data.service_ticket;
52670          }
52671          loginTicket() {
52672            return this.data.login_ticket;
52673          }
52674          serviceTicket() {
52675            return this.data.service_ticket;
52676          }
52677          flowKey() {
52678            return this.data.flow_execution_key;
52679          }
52680          session() {
52681            return this.data.session_id;
52682          }
52683        };
52684        module.exports = LoginResponse;
52685      }).call(exports);
52686    }
52687  });
52688
52689  // apps/base/assets/javascripts/components/login/models/login_service.coffee
52690  var require_login_service = __commonJS({
52691    "apps/base/assets/javascripts/components/login/models/login_service.coffee"(exports, module) {
52692      "use strict";
52693      init_esbuild_shims();
52694      (function() {
52695        var LoginCheck, LoginResponse, LoginService;
52696        LoginCheck = require_login_check();
52697        LoginResponse = require_login_response();
52698        LoginService = class LoginService {
52699          constructor(endpoint, service) {
52700            this.endpoint = endpoint;
52701            this.service = service || window.location.href;
52702          }
52703          casLogin(successCallback, errorCallback) {
52704            var url;
52705            url = `${this.endpoint.split("?")[0] || this.endpoint}?${jQuery.param({
52706              service: this.service,
52707              json: 1
52708            })}`;
52709            return jQuery.ajax({
52710              url,
52711              type: "GET",
52712              headers: {
52713                "Accept": "application/json"
52714              },
52715              timeout: 30 * 1e3,
52716              success: function(data, ...args) {
52717                return successCallback(new LoginResponse(data), ...args);
52718              },
52719              error: function(request, status, error) {
52720                return errorCallback(error);
52721              },
52722              xhrFields: {
52723                withCredentials: true
52724              }
52725            });
52726          }
52727          websiteLogin(data, callback) {
52728            return jQuery.ajax({
52729              url: this.endpoint,
52730              type: "POST",
52731              headers: {
52732                "Accept": "application/json"
52733              },
52734              data,
52735              success: function(data2, status, request) {
52736                return callback(new LoginCheck(request));
52737              },
52738              error: function(request, status, error) {
52739                return callback(new LoginCheck(request));
52740              }
52741            });
52742          }
52743        };
52744        module.exports = LoginService;
52745      }).call(exports);
52746    }
52747  });
52748
52749  // apps/base/assets/javascripts/components/login/register_form.coffee
52750  var require_register_form = __commonJS({
52751    "apps/base/assets/javascripts/components/login/register_form.coffee"(exports) {
52752      "use strict";
52753      init_esbuild_shims();
52754      (function() {
52755        var RegisterForm;
52756        RegisterForm = class RegisterForm {
52757          constructor(form) {
52758            this.form = form;
52759            this.attachEvents();
52760          }
52761          attachEvents() {
52762            $(".register-with-interest-area").on("click", (event2) => {
52763              var uri;
52764              uri = $(event2.currentTarget).data("interest");
52765              return $(".default-interest-area").val(uri);
52766            });
52767            return this.form.on("form-submit-success", (event2, data) => {
52768              var emailAddress, postSubmitModal, postSubmitModalId;
52769              emailAddress = this.form.find("input[data-type='email']").val();
52770              postSubmitModalId = this.form.data("post-submit-modal");
52771              postSubmitModal = jQuery(`#${postSubmitModalId}`);
52772              postSubmitModal.find("strong.email").html(emailAddress);
52773              postSubmitModal.find("a.closemodal").attr("href", data.url);
52774              if (jQuery.magnificPopup.instance.st) {
52775                jQuery.magnificPopup.instance.st.callbacks = {
52776                  close: function() {
52777                    if (data.url) {
52778                      return window.location = data.url;
52779                    }
52780                  }
52781                };
52782              }
52783              jQuery.magnificPopup.open({
52784                items: {
52785                  src: `#${postSubmitModalId}`
52786                },
52787                type: "inline",
52788                mainClass: "login-popup"
52789              });
52790              this.form.find("input[type='text']").val("");
52791              this.form.find("input[type='checkbox']").prop("checked", false);
52792              if (this.form.hasClass("no-labels")) {
52793                this.form.find("fieldset.valid").removeClass("val
52793id");
52794                return this.form.find("input[type='email']").val("");
52795              } else {
52796                return this.form.find("div.valid").removeClass("valid");
52797              }
52798            });
52799          }
52800        };
52801        jQuery("form.register").each((index, element) => {
52802          return new RegisterForm(jQuery(element));
52803        });
52804      }).call(exports);
52805    }
52806  });
52807
52808  // apps/base/assets/javascripts/components/login/views/login_form.coffee
52809  var require_login_form = __commonJS({
52810    "apps/base/assets/javascripts/components/login/views/login_form.coffee"(exports) {
52811      "use strict";
52812      init_esbuild_shims();
52813      (function() {
52814        var LoginForm, LoginService;
52815        LoginService = require_login_service();
52816        LoginForm = class LoginForm {
52817          constructor(form) {
52818            this.showError = this.showError.bind(this);
52819            this.form = form;
52820            this.service = this.form.data("redirect") || window.location.href;
52821            this.login_service = new LoginService(this.form.attr("action"), this.service);
52822            this.attachEvents();
52823          }
52824          attachEvents() {
52825            return this.form.on("form-submit", (event2, parentForm) => {
52826              this.parentForm = parentForm;
52827              event2.preventDefault();
52828              return this.login();
52829            });
52830          }
52831          showError(error) {
52832            this.hideLoadingIndicator();
52833            if (error === "unverified_email") {
52834              return this.form.trigger(error);
52835            } else {
52836              this.showErrorMessage(error);
52837              return this.form.trigger("login-failed");
52838            }
52839          }
52840          login() {
52841            return this.login_service.websiteLogin({
52842              login_attempt: {
52843                email_address: this.form.find("input[data-type='email']").val(),
52844                password: this.form.find("input[type='password']").val()
52845              }
52846            }, (loginAttempt) => {
52847              if (loginAttempt.hasUnverifiedEmail()) {
52848                return this.showError(loginAttempt.error());
52849              } else if (loginAttempt.isAuthenticated()) {
52850                if (this.service && !this.service.includes("freshdesk")) {
52851                  return window.location = this.service;
52852                } else {
52853                  return location.reload();
52854                }
52855              } else {
52856                this.hideLoadingIndicator();
52857                this.showErrorMessage(loginAttempt.error(), this.form.find("input[data-type='email']").val());
52858                if (!this.form.hasClass("no-labels")) {
52859                  return this.form.find("input[type='submit']").prop("disabled", false);
52860                }
52861              }
52862            });
52863          }
52864          hideLoadingIndicator() {
52865            if (this.form.hasClass("no-labels")) {
52866              return this.form.find("button[type='submit']").removeClass("loading").prop("disabled", false);
52867            } else {
52868              return this.form.find("div.form-loading").hide();
52869            }
52870          }
52871          showErrorMessage(error, email) {
52872            if (error === "locked_out") {
52873              this.form.closest(".compliant-password").addClass("hidden");
52874              this.form.closest(".login-form").addClass("hidden");
52875              this.form.closest(".login-form").siblings(".locked-account.sliding-verification-form").removeClass("hidden");
52876              this.form.closest(".login-form").siblings(".locked-account").removeClass("hidden");
52877              jQuery(".locked-account.sliding-verification-form input[name='email']").val(email);
52878              return jQuery(".locked-account input[name='email']").val(email);
52879            } else if (error === "new_password_required") {
52880              this.form.closest(".locked-account").addClass("hidden");
52881              this.form.closest(".login-form").addClass("hidden");
52882              this.form.closest(".login-form").siblings(".compliant-password.sliding-verification-form").removeClass("hidden");
52883              this.form.closest(".login-form").siblings(".compliant-password").removeClass("hidden");
52884              jQuery(".compliant-password.sliding-verification-form input[name='email']").val(email);
52885              return jQuery(".compliant-password input[name='email']").val(email);
52886            } else if (this.form.hasClass("no-labels")) {
52887              this.form.siblings(".form-result").find(".failure").html(error).show();
52888              return this.form.siblings(".form-result").show();
52889            } else {
52890              this.form.siblings("div.result").find(".failure").html(error);
52891              return this.form.siblings("div.result").find(".failure").removeClass("hidden");
52892            }
52893          }
52894          setEmailAddress(emailAddress) {
52895            return this.form.find("input[data-type='email']").val(emailAddress);
52896          }
52897          setPassword(password) {
52898            return this.form.find("input[type='password']").val(password);
52899          }
52900          setRedirect(redirect) {
52901            this.form.data("redirect", redirect);
52902            this.service = this.form.data("redirect");
52903            return this.login_service = new LoginService(this.form.attr("action"), this.service);
52904          }
52905        };
52906        jQuery("form.login").each((index, element) => {
52907          return window.loginForm = new LoginForm(jQuery(element));
52908        });
52909      }).call(exports);
52910    }
52911  });
52912
52913  // apps/base/assets/javascripts/components/login/views/single_sign_on_link.coffee
52914  var require_single_sign_on_link = __commonJS({
52915    "apps/base/assets/javascripts/components/login/views/single_sign_on_link.coffee"(exports) {
52916      "use strict";
52917      init_esbuild_shims();
52918      (function() {
52919        var SingleSignOnLink;
52920        SingleSignOnLink = class SingleSignOnLink {
52921          constructor(ssoLink) {
52922            this.ssoLink = ssoLink;
52923            this.attachEvents();
52924          }
52925          attachEvents() {
52926            return this.ssoLink.on("click", (event2) => {
52927              return this.checkSingleSignOn();
52928            });
52929          }
52930          checkSingleSignOn() {
52931            return window.loginForm.login_service.casLogin(this.handleLoginResponse);
52932          }
52933          handleLoginResponse(loginResponse) {
52934            if (loginResponse.loggedIn()) {
52935              return window.location = jQuery.query.set("ticket", loginResponse.serviceTicket());
52936            }
52937          }
52938        };
52939        if (document.getElementById("sso")) {
52940          new SingleSignOnLink(jQuery("a#sso"));
52941        }
52942      }).call(exports);
52943    }
52944  });
52945
52946  // apps/base/assets/javascripts/components/magic_button.coffee
52947  var require_magic_button = __commonJS({
52948    "apps/base/assets/javascripts/components/magic_button.coffee"(exports) {
52949      "use strict";
52950      init_esbuild_shims();
52951      (function() {
52952        var magicButtonsLinkedToForm;
52953        jQuery("a.button[data-track-clicks='Google Analytics']").each(function(index, element) {
52954          return jQuery(element).click(function(event2) {
52955            return window.trackEvent("Magic button", "Click", jQuery(event2.currentTarget).attr("href"));
52956          });
52957        });
52958        magicButtonsLinkedToForm = jQuery("a.button[data-form-select-value]");
52959        if (magicButtonsLinkedToForm.length > 0) {
52960          magicButtonsLinkedToForm.each((index, element) => {
52961            var magicButton, openPopup, updateLinkedFormSelectField;
52962            magicButton = jQuery(element);
52963            magicButton.on("click", (event2) => {
52964              var linkedForm, magicButtonPopup, optionToBeSelected;
52965              magicButton = jQuery(event2.target);
52966              optionToBeSelected = jQuery(magicButton).data("form-select-value");
52967              linkedForm = jQuery(".campaign-form-container .campaign-form");
52968              magicButtonPopup = jQuery(`#magic-button-popup-${jQuery(magicButton).data("magic-button-popup-id")}`);
52969              updateLinkedFormSelectField(optionToBeSelected);
52970              linkedForm.appendTo(magicButtonPopup);
52971              return openPopup(magicButton);
52972            });
52973            updateLinkedFormSelectField = (optionToBeSelected) => {
52974              var linkedFormSelectField;
52975              linkedFormSelectField = jQuery(`select[data-category-value='${jQuery(element).data("select-field-category")}']`);
52976              return linkedFormSelectField.val(optionToBeSelected).trigger("change");
52977            };
52978            return openPopup = (magicButton2) => {
52979              return jQuery.magnificPopup.open({
52980                items: [
52981                  {
52982                    src: `#magic-button-popup-${jQuery(magicButton2).data("magic-button-popup-id")}`,
52983                    type: "inline"
52984                  }
52985                ],
52986                callbacks: {
52987                  open: () => {
52988                    return jQuery(this.content).find("select.select2").select2();
52989                  },
52990                  close: () => {
52991                    return jQuery(".magic-button-popup .campaign-form").appendTo(".campaign-form-container");
52992                  }
52993                }
52994              });
52995            };
52996          });
52997        }
52998      }).call(exports);
52999    }
53000  });
53001
53002  // apps/base/assets/javascripts/components/magic_webinar.coffee
53003  var require_magic_webinar = __commonJS({
53004    "apps/base/assets/javascripts/components/magic_webinar.coffee"(exports) {
53005      "use strict";
53006      init_esbuild_shims();
53007      (function() {
53008        jQuery(".external-event select.date").on("change", (event2) => {
53009          return jQuery(".external-event a.button").attr("href", jQuery(event2.target).val());
53010        });
53011        jQuery(".icon-map-marker").on("click", function(event2) {
53012          return event2.stopImmediatePropagation();
53013        });
53014        jQuery("article.wide-card .training-dates .future").on("click", (event2) => {
53015          return window.location = $(event2.currentTarget).data("href");
53016        });
53017      }).call(exports);
53018    }
53019  });
53020
53021  // apps/base/assets/javascripts/components/main_navigation.coffee
53022  var require_main_navigation = __commonJS({
53023    "apps/base/assets/javascripts/components/main_navigation.coffee"(exports) {
53024      "use strict";
53025      init_esbuild_shims();
53026      (function() {
53027        var MainNavigation, lastScrollTop;
53028        MainNavigation = class MainNavigation {
53029          constructor(nav) {
53030            this.attachEvents = this.attachEvents.bind(this);
53031            this.setupMenuAim = this.setupMenuAim.bind(this);
53032            this.showSubmenu = this.showSubmenu.bind(this);
53033            this.hideSubmenu = this.hideSubmenu.bind(this);
53034            this.preventFollow = this.preventFollow.bind(this);
53035            this.updateThreshold = this.updateThreshold.bind(this);
53036            this.updateSearch = this.updateSearch.bind(this);
53037            this.updateSticky = this.updateSticky.bind(this);
53038            this.useMobile = this.useMobile.bind(this);
53039            this.useDesktop = this.useDesktop.bind(this);
53040            this.hoverItem = this.hoverItem.bind(this);
53041            this.toggleMobileMenu = this.toggleMobileMenu.bind(this);
53042            this.toggleMobileSearch = this.toggleMobileSearch.bind(this);
53043            this.goDeeper = this.goDeeper.bind(this);
53044            this.goBack = this.goBack.bind(this);
53045            this.changeMobileMenuHeight = this.changeMobileMenuHeight.bind(this);
53046            this.clearAllHoverStates = this.clearAllHoverStates.bind(this);
53047            this.nav = nav;
53048            this.search = this.nav.find("> .search");
53049            this.searchbar = $("header").find("div.search-box");
53050            this.top = this.nav.find("> ul");
53051            this.originalActiveItem = this.top.find(".level-0 > li.active").first();
53052            this.navBaseHeight = this.nav.height();
53053            this.stickyThreshold = this.nav.offset().top;
53054            this.attachEvents();
53055          }
53056          attachEvents() {
53057            jQuery(window).on("scroll", this.updateSticky);
53058            jQuery(window).on("breakpoint-change", (event2, breakpoint) => {
53059              if (breakpoint === "desktop") {
53060                return this.useDesktop();
53061              } else {
53062                return this.useMobile();
53063              }
53064            });
53065            this.search.on("focusin", this.updateSearch);
53066            this.search.on("focusout", this.updateSearch);
53067            this.top.find(".left-side > ul > li, .right-side > ul > li").on("mouseenter", this.preventFollow).on("mouseleave", function() {
53068            });
53069            this.setupMenuAim();
53070            this.nav.on("mouseleave", this.clearAllHoverStates);
53071            $("header").find("a.mobilemenu").on("click", this.toggleMobileMenu);
53072            this.nav.find("div.close-button").on("click", this.toggleMobileMenu);
53073            $("header").find("a.mobilesearch").on("click", this.toggleMobileSearch);
53074            this.nav.find(".left-side li:not(.back-link), .right-side li:not(.back-link)").on("click", this.goDeeper);
53075            this.nav.find(".left-side li:not(.back-link) > a, .right-side li:not(.back-link) > a").on("click", function(e) {
53076              if (window.isMobile()) {
53077                return e.stopPropagation();
53078              }
53079            });
53080            this.nav.find(".left-side li.back-link, .right-side li.back-link").on("click", this.goBack);
53081            jQuery(document).find("#close_cookie").on("click", this.updateThreshold);
53082            this.nav.on("mouseenter", () => {
53083              return this.nav.addClass("instant");
53084            }).on("mouseleave", () => {
53085              return this.nav.removeClass("instant");
53086            });
53087            if (jQuery.find(".accesscontrolbar").length) {
53088              jQuery("nav.main, nav.breadcrumb, nav.dashboard-submenu, header.product-compare, nav.in-
53088page-navigation").addClass("below-accesscontrolbar");
53089            }
53090            if (jQuery.find("nav.breadcrumb").length) {
53091              jQuery("nav.in-page-navigation").addClass("below-breadcrumb");
53092            }
53093            if (jQuery.find("nav.dashboard-submenu").length) {
53094              jQuery("nav.in-page-navigation").addClass("below-breadcrumb");
53095            }
53096            if (jQuery("nav.in-page-navigation").length) {
53097              return jQuery("nav.breadcrumb").addClass("has-in-page-nav");
53098            }
53099          }
53100          setupMenuAim() {
53101            return this.nav.find("ul.level-1, ul.level-1 ul").each((index, submenu) => {
53102              var isLeftSide, isRightSide, submenuDirection, submenuEl;
53103              submenuEl = jQuery(submenu);
53104              isLeftSide = submenuEl.closest(".left-side").length > 0;
53105              isRightSide = submenuEl.closest(".right-side").length > 0;
53106              submenuDirection = isLeftSide ? "right" : isRightSide ? "left" : "below";
53107              return jQuery(submenu).menuAim({
53108                submenuDirection,
53109                tolerance: 50,
53110                activate: (li) => {
53111                  return this.showSubmenu(li);
53112                },
53113                deactivate: (li) => {
53114                  return this.hideSubmenu(li);
53115                }
53116              });
53117            });
53118          }
53119          showSubmenu(li) {
53120            var el;
53121            el = jQuery(li);
53122            this.hoverItem({
53123              currentTarget: li
53124            });
53125            if (el.closest("ul.level-1").length) {
53126              el.siblings().removeClass("hover-active");
53127              return el.addClass("hover-active");
53128            } else if (el.closest("ul.level-1 ul").length) {
53129              el.siblings().removeClass("hover-active");
53130              return el.addClass("hover-active");
53131            }
53132          }
53133          hideSubmenu(li) {
53134            var el;
53135            el = jQuery(li);
53136            return el.removeClass("hover-active");
53137          }
53138          preventFollow(event2) {
53139            var el;
53140            el = jQuery(event2.currentTarget);
53141            this.hoverItem(event2);
53142            if (el.closest("ul.level-0").length && el.children("ul.level-1").length > 0) {
53143              this.nav.find("ul.level-0 > li").removeClass("hover-active");
53144              el.addClass("hover-active");
53145            }
53146            this.top.find(".hovered").removeClass("hovered");
53147            this.top.find(".active").not(this.originalActiveItem).removeClass("active");
53148            el.parentsUntil("ul.level-0", "li").addClass("hovered");
53149            el.addClass("active");
53150            return event2.preventDefault();
53151          }
53152          updateThreshold() {
53153            var event2;
53154            event2 = new Event("closingCookieBar");
53155            window.dispatchEvent(event2);
53156            return this.stickyThreshold = this.nav.offset().top;
53157          }
53158          updateSearch() {
53159            return this.search.toggleClass("active", jQuery("input#q").is(":focus"));
53160          }
53161          updateSticky() {
53162            var navMain;
53163            if (jQuery(window).scrollTop() > this.stickyThreshold && !window.isMobile()) {
53164              if (!jQuery("body").hasClass("sticky")) {
53165                navMain = this.nav.closest("nav.main");
53166                jQuery(".wrapper").children("header.siteheader").css("margin-bottom", navMain.outerHeight() + "px");
53167              }
53168              return jQuery("body").addClass("sticky");
53169            } else {
53170              jQuery("body").removeClass("sticky");
53171              return jQuery(".wrapper").children("header.siteheader").css("margin-bottom", "");
53172            }
53173          }
53174          useMobile() {
53175            jQuery("div.search").removeAttr("style");
53176            jQuery("body").removeClass("sticky");
53177            this.nav.removeAttr("style");
53178            this.top.removeAttr("style");
53179            return this.nav.find("li.active").removeClass("active");
53180          }
53181          useDesktop() {
53182            this.nav.removeAttr("style").removeClass("mobile-expanded");
53183            return this.top.removeAttr("style");
53184          }
53185          hoverItem(event2) {
53186            var el;
53187            if (window.isMobile()) {
53188              return;
53189            }
53190            el = jQuery(event2.currentTarget);
53191            return el.closest("[data-menuitems]").attr("data-menuitems", this.calcMenuLength(el).toString());
53192          }
53193          toggleMobileMenu(event2) {
53194            var height;
53195            if (!window.isMobile()) {
53196              return;
53197            }
53198            event2.stopPropagation();
53199            if (this.nav.hasClass("mobile-expanded")) {
53200              this.nav.removeClass("mobile-expanded");
53201              return this.changeMobileMenuHeight(this.navBaseHeight);
53202            } else {
53203              this.navBaseHeight = this.nav.height();
53204              height = "100vh";
53205              this.nav.addClass("mobile-expanded");
53206              return this.changeMobileMenuHeight(height);
53207            }
53208          }
53209          toggleMobileSearch(event2) {
53210            if (!window.isMobile()) {
53211              return;
53212            }
53213            event2.stopPropagation();
53214            this.searchbar = $("header").find("div.search-box");
53215            if (this.searchbar.hasClass("select")) {
53216              return this.searchbar.removeClass("select");
53217            } else {
53218              return this.searchbar.addClass("select");
53219            }
53220          }
53221          goDeeper(event2) {
53222            var target;
53223            if (!window.isMobile()) {
53224              return;
53225            }
53226            event2.stopPropagation();
53227            target = jQuery(event2.currentTarget);
53228            if (target.children("ul").length) {
53229              return target.addClass("active");
53230            }
53231          }
53232          goBack(event2) {
53233            var target;
53234            if (!window.isMobile()) {
53235              return;
53236            }
53237            event2.stopPropagation();
53238            target = jQuery(event2.currentTarget);
53239            return target.closest(".active").removeClass("active");
53240          }
53241          changeMobileMenuHeight(target) {
53242            return this.nav.stop().transition({
53243              height: target
53244            }, 200);
53245          }
53246          calcMenuLength(el) {
53247            var lengths;
53248            lengths = el.parentsUntil("ul.level-0", "ul").add(el.children("ul")).map(function() {
53249              return jQuery(this).children("li:not(.back-link, .menu-title)").length;
53250            });
53251            return Math.max.apply(null, lengths.toArray());
53252          }
53253          clearAllHoverStates() {
53254            this.nav.find("li").removeClass("hover-active");
53255            this.top.find(".hovered").removeClass("hovered");
53256            return this.top.find(".active").not(this.originalActiveItem).removeClass("active");
53257          }
53258        };
53259        if (jQuery("body.wider nav.main").length > 0) {
53260          new MainNavigation(jQuery("nav.main .page-width"));
53261          lastScrollTop = window.pageYOffset || document.documentElement.scrollTop;
53262          window.addEventListener("scroll", function() {
53263            var currentScroll, headerHeight, scrollDirection, siteHeader;
53264            if (window.innerWidth <= 768) {
53265              siteHeader = document.getElementById("siteheader");
53266              if (!siteHeader) {
53267                return;
53268              }
53269              headerHeight = siteHeader.offsetHeight;
53270              currentScroll = window.pageYOffset || document.documentElement.scrollTop;
53271              scrollDirection = currentScroll > lastScrollTop ? "down" : "up";
53272              if (currentScroll <= headerHeight) {
53273                siteHeader.style.transform = "none";
53274              } else if (scrollDirection === "down") {
53275                siteHeader.style.transform = "translateY(-100%)";
53276              } else {
53277                siteHeader.style.transform = "none";
53278              }
53279              return lastScrollTop = currentScroll;
53280            }
53281          });
53282        }
53283      }).call(exports);
53284    }
53285  });
53286
53287  // apps/base/assets/javascripts/components/main_navigation-old.coffee
53288  var require_main_navigation_old = __commonJS({
53289    "apps/base/assets/javascripts/components/main_navigation-old.coffee"(exports) {
53290      "use strict";
53291      init_esbuild_shims();
53292      (function() {
53293        var MainNavigationOld, lastScrollTop;
53294        MainNavigationOld = class MainNavigationOld {
53295          constructor(nav) {
53296            this.attachEvents = this.attachEvents.bind(this);
53297            this.preventFollow = this.preventFollow.bind(this);
53298            this.updateThreshold = this.updateThreshold.bind(this);
53299            this.updateSearch = this.updateSearch.bind(this);
53300            this.updateSticky = this.updateSticky.bind(this);
53301            this.useMobile = this.useMobile.bind(this);
53302            this.useDesktop = this.useDesktop.bind(this);
53303            this.hoverItem = this.hoverItem.bind(this);
53304            this.toggleMobileMenu = this.toggleMobileMenu.bind(this);
53305            this.toggleMobileSearch = this.toggleMobileSearch.bind(this);
53306            this.goDeeper = this.goDeeper.bind(this);
53307            this.goBack = this.goBack.bind(this);
53308            this.changeMobileMenuHeight = this.changeMobileMenuHeight.bind(this);
53309            this.nav = nav;
53310            this.search = this.nav.find("> .search");
53311            this.searchbar = $("header").find("div.search-box");
53312            this.top = this.nav.find("> ul");
53313            this.navBaseHeight = this.nav.height();
53314            this.stickyThreshold = this.nav.offset().top;
53315            this.attachEvents();
53316          }
53317          attachEvents() {
53318            jQuery(window).scroll(this.updateSticky);
53319            jQuery(window).on("breakpoint-change", (event2, breakpoint) => {
53320              if (breakpoint === "desktop") {
53321                return this.useDesktop();
53322              } else {
53323                return this.useMobile();
53324              }
53325            });
53326            this.search.focusin(this.updateSearch);
53327            this.search.focusout(this.updateSearch);
53328            this.top.find("li").hover(this.hoverItem, function() {
53329            });
53330            $("header").find("a.mobilemenu").on("click", this.toggleMobileMenu);
53331            this.nav.find("div.close-button").on("click", this.toggleMobileMenu);
53332            $("header").find("a.mobilesearch").on("click", this.toggleMobileSearch);
53333            this.nav.find("li:not(.back-link)").on("click", this.goDeeper);
53334            this.nav.find("li:not(.back-link) > a").on("click", function(e) {
53335              if (window.isMobile()) {
53336                return e.stopPropagation();
53337              }
53338            });
53339            this.nav.find("li.back-link").on("click", this.goBack);
53340            jQuery(document).find("#close_cookie").click(this.updateThreshold);
53341            return this.nav.hover((() => {
53342              return this.nav.addClass("instant");
53343            }), (() => {
53344              return this.nav.removeClass("instant");
53345            }));
53346          }
53347          preventFollow(event2) {
53348            var el;
53349            el = jQuery(event2.currentTarget);
53350            if (el.siblings("ul").length === 0 || el.hasClass("active")) {
53351              return;
53352            }
53353            this.top.find(".hovered").removeClass("hovered");
53354            this.top.find(".active").removeClass("active");
53355            el.parentsUntil("ul.level-0", "li").addClass("hovered");
53356            el.addClass("active");
53357            return event2.preventDefault();
53358          }
53359          updateThreshold() {
53360            var event2;
53361            event2 = new Event("closingCookieBar");
53362            window.dispatchEvent(event2);
53363            return this.stickyThreshold = this.nav.offset().top;
53364          }
53365          updateSearch() {
53366            return this.search.toggleClass("active", jQuery("input#q").is(":focus"));
53367          }
53368          updateSticky() {
53369            if (jQuery(window).scrollTop() > this.stickyThreshold && !window.isMobile()) {
53370              jQuery("body").addClass("sticky");
53371            } else {
53372              jQuery("body").removeClass("sticky");
53373            }
53374            if (jQuery.find(".accesscontrolbar").length) {
53375              jQuery("nav.main, nav.breadcrumb, header.product-compare, nav.in-
53375page-navigation").addClass("below-accesscontrolbar");
53376            }
53377            if (jQuery.find("nav.breadcrumb").length) {
53378              return jQuery("nav.in-page-navigation").addClass("below-breadcrumb");
53379            }
53380          }
53381          useMobile() {
53382            jQuery("div.search").removeAttr("style");
53383            jQuery("body").removeClass("sticky");
53384            this.nav.removeAttr("style");
53385            this.top.removeAttr("style");
53386            return this.nav.find("li.active").removeClass("active");
53387          }
53388          useDesktop() {
53389            this.nav.removeAttr("style").removeClass("mobile-expanded");
53390            return this.top.removeAttr("style");
53391          }
53392          hoverItem(event2) {
53393            var el;
53394            if (window.isMobile()) {
53395              return;
53396            }
53397            el = jQuery(event2.currentTarget);
53398            return el.closest("[data-menuitems]").attr("data-menuitems", this.calcMenuLength(el).toString());
53399          }
53400          toggleMobileMenu(event2) {
53401            var height;
53402            if (!window.isMobile()) {
53403              return;
53404            }
53405            event2.stopPropagation();
53406            if (this.nav.hasClass("mobile-expanded")) {
53407              this.nav.removeClass("mobile-expanded");
53408              return this.changeMobileMenuHeight(this.navBaseHeight);
53409            } else {
53410              this.navBaseHeight = this.nav.height();
53411              height = "100vh";
53412              this.nav.addClass("mobile-expanded");
53413              return this.changeMobileMenuHeight(height);
53414            }
53415          }
53416          toggleMobileSearch(event2) {
53417            if (!window.isMobile()) {
53418              return;
53419            }
53420            event2.stopPropagation();
53421            this.searchbar = $("header").find("div.search-box");
53422            if (this.searchbar.hasClass("select")) {
53423              return this.searchbar.removeClass("select");
53424            } else {
53425              return this.searchbar.addClass("select");
53426            }
53427          }
53428          goDeeper(event2) {
53429            var target;
53430            if (!window.isMobile()) {
53431              return;
53432            }
53433            event2.stopPropagation();
53434            target = jQuery(event2.currentTarget);
53435            if (target.children("ul").length) {
53436              return target.addClass("active");
53437            }
53438          }
53439          goBack(event2) {
53440            var target;
53441            if (!window.isMobile()) {
53442              return;
53443            }
53444            event2.stopPropagation();
53445            target = jQuery(event2.currentTarget);
53446            return target.closest(".active").removeClass("active");
53447          }
53448          changeMobileMenuHeight(target) {
53449            return this.nav.stop().transition({
53450              height: target
53451            }, 200);
53452          }
53453          calcMenuLength(el) {
53454            var lengths;
53455            lengths = el.parentsUntil("ul.level-0", "ul").add(el.children("ul")).map(function() {
53456              return jQuery(this).children("li:not(.back-link, .menu-title)").length;
53457            });
53458            return Math.max.apply(null, lengths.toArray());
53459          }
53460        };
53461        if (jQuery("body.old nav.main").length > 0) {
53462          new MainNavigationOld(jQuery("nav.main .page-width"));
53463          lastScrollTop = window.pageYOffset || document.documentElement.scrollTop;
53464          window.addEventListener("scroll", function() {
53465            var currentScroll, headerHeight, scrollDirection, siteHeader;
53466            if (window.innerWidth <= 768) {
53467              siteHeader = document.getElementById("siteheader");
53468              if (!siteHeader) {
53469                return;
53470              }
53471              headerHeight = siteHeader.offsetHeight;
53472              currentScroll = window.pageYOffset || document.documentElement.scrollTop;
53473              scrollDirection = currentScroll > lastScrollTop ? "down" : "up";
53474              if (scrollDirection === "down" && currentScroll > headerHeight) {
53475                siteHeader.style.transform = "translateY(-100%)";
53476              } else if (scrollDirection === "up" || currentScroll <= headerHeight) {
53477                if (currentScroll <= headerHeight) {
53478                  siteHeader.style.position = "relative";
53479                  siteHeader.style.transform = "none";
53480                } else {
53481                  siteHeader.style.position = "fixed";
53482                  siteHeader.style.top = "0";
53483                  siteHeader.style.width = "100vw";
53484                  siteHeader.style.transform = "none";
53485                }
53486              }
53487              return lastScrollTop = currentScroll;
53488            }
53489          });
53490        }
53491      }).call(exports);
53492    }
53493  });
53494
53495  // apps/base/assets/javascripts/components/media_carousel.coffee
53496  var require_media_carousel = __commonJS({
53497    "apps/base/assets/javascripts/components/media_carousel.coffee"(exports) {
53498      "use strict";
53499      init_esbuild_shims();
53500      (function() {
53501        var MediaCarousel;
53502        MediaCarousel = class MediaCarousel {
53503          constructor($el) {
53504            this.attachHandlers = this.attachHandlers.bind(this);
53505            this.animateToVisual = this.animateToVisual.bind(this);
53506            this.updateActiveThumbnail = this.updateActiveThumbnail.bind(this);
53507            this.$el = $el;
53508            this.visualsWidth = this.$el.find(".visuals").width();
53509            this.listElements = this.$el.find(".visuals .list-container > ul > li");
53510            this.listElementWidth = this.listElements.eq(0).width();
53511            this.thumbnailContainerWidth = this.$el.find(".thumbnails .list-container").eq(0).width();
53512            this.thumbnailElements = this.$el.find(".thumbnails .list-container > ul > li");
53513            this.thumbnailElementWidth = this.thumbnailElements.eq(0).width();
53514            if (this.listElements.length > 1) {
53515              this.$el.find(".next").addClass("available");
53516              this.thumbnailElements.eq(0).find("figure").addClass("active");
53517            }
53518            this.isFullWidth = this.$el.hasClass("full_width");
53519            this.isMobile = window.innerWidth < 768;
53520            if (this.isFullWidth && !this.isMobile) {
53521              this.listElementWidth = this.visualsWidth;
53522              this.listElements.each((index, element) => {
53523                return jQuery(element).width(this.visualsWidth);
53524              });
53525            }
53526            this.attachHandlers();
53527            this.position = 0;
53528          }
53529          attachHandlers() {
53530            this.$el.find(".thumbnails li").on("click", (event2) => {
53531              this.position = jQuery(event2.currentTarget).index();
53532              this.animateToVisual();
53533              return this.updateActiveThumbnail();
53534            });
53535            this.$el.find(".previous").on("click", (event2) => {
53536              this.position -= 1;
53537              this.animateToVisual();
53538              return this.updateActiveThumbnail();
53539            });
53540            this.$el.find(".next").on("click", (event2) => {
53541              this.position += 1;
53542              this.animateToVisual();
53543              return this.updateActiveThumbnail();
53544            });
53545            return window.onresize = () => {
53546              if (this.isFullWidth && !this.isMobile) {
53547                this.visualsWidth = this.$el.find(".visuals").width();
53548                this.listElements.each((index, element) => {
53549                  return jQuery(element).width(this.visualsWidth);
53550                });
53551                this.listElementWidth = this.visualsWidth;
53552                return this.animateToVisual();
53553              }
53554            };
53555          }
53556          animateToVisual() {
53557            var pixelsToMove;
53558            this.$el.find(".visuals .list-container > ul").css("transform", "translateX(-" + this.position * this.listElementWidth + "px)");
53559            pixelsToMove = Math.floor(this.position * this.thumbnailElementWidth / this.thumbnailContainerWidth) * this.thumbnailContainerWidth;
53560            this.$el.find(".thumbnails .list-container > ul").css("transform", "translateX(-" + Math.max(0, pixelsToMove) + "px)");
53561            if (this.position === 0) {
53562              this.$el.find(".previous").removeClass("available");
53563            } else {
53564              this.$el.find(".previous").addClass("available");
53565            }
53566            if (this.position === this.listElements.length - 1) {
53567              return this.$el.find(".next").removeClass("available");
53568            } else {
53569              return this.$el.find(".next").addClass("available");
53570            }
53571          }
53572          updateActiveThumbnail() {
53573            this.$el.find(".active").removeClass("active");
53574            return this.$el.find(".thumbnails .list-container > ul > li").eq(this.position).find("figure").addClass("active");
53575          }
53576        };
53577        jQuery(".media-carousel").each(function(index, element) {
53578          return new MediaCarousel(jQuery(element));
53579        });
53580      }).call(exports);
53581    }
53582  });
53583
53584  // apps/base/assets/javascripts/components/navigation_tab.coffee
53585  var require_navigation_tab = __commonJS({
53586    "apps/base/assets/javascripts/components/navigation_tab.coffee"(exports, module) {
53587      "use strict";
53588      init_esbuild_shims();
53589      (function() {
53590        var NavigationTab;
53591        NavigationTab = class NavigationTab {
53592          constructor(el, useHash1 = true) {
53593            this.attachEvents = this.attachEvents.bind(this);
53594            this.showArticle = this.showArticle.bind(this);
53595            this.showSection = this.showSection.bind(this);
53596            this.hide = this.hide.bind(this);
53597            this.breakpointChange = this.breakpointChange.bind(this);
53598            this.isActive = this.isActive.bind(this);
53599            this.handleBrowserNavigation = this.handleBrowserNavigation.bind(this);
53600            this.useHash = useHash1;
53601            this.tab = jQuery(el);
53602            this.tabKey = this.tab.data("content").toString();
53603            this.tabContent = jQuery('section.tabs article[data-content="' + this.tabKey.replace(/'/g, "'") + '"]');
53604            this.accordion = this.tabContent.find("a.accordion");
53605            this.content = this.tabContent.find("> section");
53606            this.moreDropdown = $(".more-dropdown .extra-tabs li a");
53607            this.normalTabs = $("nav.listing-tabs > ul li a");
53608            this.attachEvents();
53609          }
53610          attachEvents() {
53611            this.tab.click((event2) => {
53612              event2.preventDefault();
53613              return this.showArticle(false);
53614            });
53615            this.moreDropdown.click(() => {
53616              $(".more-tabs p").addClass("more-tabs-selected");
53617              return $("nav.listing-tabs > ul li").removeClass("active");
53618            });
53619            this.normalTabs.click(() => {
53620              $(".more-tabs p").removeClass("more-tabs-selected");
53621              return $(".more-dropdown .extra-tabs li").removeClass("active");
53622            });
53623            this.accordion.click(() => {
53624              if (this.isActive()) {
53625                return this.hide();
53626              } else {
53627                return this.showArticle(true);
53628              }
53629            });
53630            jQuery(window).on("popstate", this.handleBrowserNavigation);
53631            return jQuery(window).on("breakpoint-change", this.breakpointChange);
53632          }
53633          showArticle(animate) {
53634            this.showSection(animate);
53635            if (this.useHash) {
53636              location.hash = this.tabKey;
53637            }
53638            return trackEvent(this.tab.data("content"), "Click tab", this.tab.attr("data-tracking-label"));
53639          }
53640          showSection(animate) {
53641            if (animate) {
53642              this.content.slideDown();
53643            } else if (this.content.hasClass("magic-card")) {
53644              this.content.css("display", "flex");
53645            } else {
53646              this.content.show();
53647              if (this.content.parent("article.cards").length > 0) {
53648                this.content.css("display", "flex");
53649              }
53650            }
53651            this.deselectActiveTab();
53652            this.selectTab();
53653            return this.tab.trigger("tab-change", [this.tabContent, this.tab]);
53654          }
53655          hide() {
53656            if (this.useHash) {
53657              location.hash = this.tabKey;
53658            }
53659            this.content.slideUp(() => {
53660              return this.tabContent.removeClass("active");
53661            });
53662            return this.tab.parent().removeClass("active");
53663          }
53664          breakpointChange(event2, breakpoint) {
53665            if (breakpoint === "desktop" && location.hash.substr(1) === this.tabKey) {
53666              return this.showSection(false);
53667            }
53668          }
53669          isActive() {
53670            return this.tab.parent().hasClass("active");
53671          }
53672          deselectActiveTab() {
53673            this.tabContent.siblings(".active").removeClass("active").find("> section").hide();
53674            if ($("nav.tabs").attr("data-content")) {
53675              jQuery("nav.tabs[data-content='" + this.tabKey.charAt(0) + "']").find("li.active").removeClass("active");
53676            }
53677            return this.tab.parents("ul").find("li.active").removeClass("active");
53678          }
53679          selectTab() {
53680            if (this.tab.parents(".extra-tabs").length > 0) {
53681              jQuery(".more-tabs").addClass("active");
53682            }
53683            this.tab.parent().addClass("active");
53684            return this.tabContent.addClass("active");
53685          }
53686          makeActive(el) {
53687            return el.addClass("active").siblings().removeClass("active");
53688          }
53689          handleBrowserNavigation() {
53690            if (location.hash === "" && this.tabKey === "all" || location.hash.substr(1) === this.tabKey) {
53691              if (!this.isActive()) {
53692                return this.showSection(false);
53693              }
53694            }
53695          }
53696        };
53697        window.initTabs = function(useHash = true) {
53698          return jQuery("nav.tabs ul li a").each((index, element) => {
53699            var tab, tabKey;
53700            tab = new NavigationTab(element, useHash);
53701            tabKey = jQuery(element).data("content");
53702            if (location.hash.substr(1) === tabKey) {
53703              return jQuery(document).ready(() => {
53704                return tab.showSection(false);
53705              });
53706            }
53707          });
53708        };
53709        window.initTabs();
53710        jQuery("nav.listing-tabs ul li a").each((index, element) => {
53711          var tab, tabKey;
53712          tab = new NavigationTab(element);
53713          tabKey = jQuery(element).data("content");
53714          if (location.hash.substr(1) === tabKey) {
53715            return jQuery(document).ready(() => {
53716              return tab.showSection(false);
53717            });
53718          }
53719        });
53720        module.exports = NavigationTab;
53721      }).call(exports);
53722    }
53723  });
53724
53725  // apps/base/assets/javascripts/components/news.coffee
53726  var require_news = __commonJS({
53727    "apps/base/assets/javascripts/components/news.coffee"(exports) {
53728      "use strict";
53729      init_esbuild_shims();
53730      (function() {
53731        var News;
53732        News = class News {
53733          constructor(el) {
53734            this.attachHandlers = this.attachHandlers.bind(this);
53735            this.renderCards = this.renderCards.bind(this);
53736            this.el = el;
53737            this.attachHandlers();
53738            this.renderCards();
53739          }
53740          attachHandlers() {
53741            return $(window).on("resize", (event2) => {
53742              return this.renderCards();
53743            });
53744          }
53745          renderCards() {
53746            if ($(window).width() < 512) {
53747              this.el.find(".js-packery article").css("display", "none");
53748              this.el.find(".js-packery article:lt(3)").css("display", "block");
53749            }
53750            if ($(window).width() >= 512) {
53751              return this.el.find(".js-packery article").css("display", "block");
53752            }
53753          }
53754        };
53755        new News(jQuery("#news-cards"));
53756      }).call(exports);
53757    }
53758  });
53759
53760  // apps/base/assets/javascripts/components/news_article.coffee
53761  var require_news_article = __commonJS({
53762    "apps/base/assets/javascripts/components/news_article.coffee"(exports) {
53763      "use strict";
53764      init_esbuild_shims();
53765      (function() {
53766        var NewsArticle;
53767        NewsArticle = class NewsArticle {
53768          constructor(el) {
53769            this.attachHandlers = this.attachHandlers.bind(this);
53770            this.fixSocialIconsPosition = this.fixSocialIconsPosition.bind(this);
53771            this.el = el;
53772            this.socialIcons = this.el.find(".socialicons");
53773            this.nav = $("nav.main .page-width");
53774            this.siteHeaderHeight = $(".siteheader").outerHeight();
53775            this.initialNavHeight = $("nav.separated-navigation").outerHeight();
53776            this.attachHandlers();
53777          }
53778          attachHandlers() {
53779            return $(window).scroll(() => {
53780              return this.fixSocialIconsPosition();
53781            });
53782          }
53783          fixSocialIconsPosition() {
53784            var maxTopPosition;
53785            maxTopPosition = jQuery("article > div.page-width > .content").height() - this.socialIcons.height();
53786            if (jQuery(window).scrollTop() < maxTopPosition) {
53787              return this.socialIcons.css("top", $(window).scrollTop().toString() + "px");
53788            }
53789          }
53790        };
53791        new NewsArticle(jQuery("article"));
53792      }).call(exports);
53793    }
53794  });
53795
53796  // apps/base/assets/javascripts/components/notification.coffee
53797  var require_notification = __commonJS({
53798    "apps/base/assets/javascripts/components/notification.coffee"(exports) {
53799      "use strict";
53800      init_esbuild_shims();
53801      (function() {
53802        var NotificationService;
53803        NotificationService = class NotificationService {
53804          constructor() {
53805            this.attachEvents();
53806            this.notification = jQuery("body > div.notifications > div.notification");
53807            if (this.notification.attr("data-type") === "success") {
53808              this.showSuccessNotification("", this.notification.attr("data-text"));
53809            }
53810            if (this.notification.attr("data-type") === "error") {
53811              this.showErrorNotification("", this.notification.attr("data-text"));
53812            }
53813          }
53814          showSuccessNotification(header, message) {
53815            this.notification.attr("class", "notification success");
53816            return this.showNotification(header, message);
53817          }
53818          showDefaultNotification(header, message) {
53819            this.notification.attr("class", "notification");
53820            return this.showNotification(header, message);
53821          }
53822          showErrorNotification(header, message) {
53823            this.notification.attr("class", "notification error");
53824            return this.showNotification(header, message, false);
53825          }
53826          showNotification(header, message, auto_close = true) {
53827            this.notification.find("h4").html(header);
53828            this.notification.find("p").html(message);
53829            this.notification.parent().show();
53830            if (auto_close) {
53831              return setTimeout((() => {
53832                return this.hideNotification();
53833              }), 5e3);
53834            }
53835          }
53836          hideNotification() {
53837            return this.notification.parent().hide();
53838          }
53839          attachEvents() {
53840            return jQuery("body").on("click", "div.notification span.close", (event2) => {
53841              return this.hideNotification();
53842            });
53843          }
53844        };
53845        jQuery(function() {
53846          return window.notificationService = new NotificationService();
53847        });
53848      }).call(exports);
53849    }
53850  });
53851
53852  // apps/base/assets/javascripts/components/old_doorway.coffee
53853  var require_old_doorway = __commonJS({
53854    "apps/base/assets/javascripts/components/old_doorway.coffee"(exports) {
53855      "use strict";
53856      init_esbuild_shims();
53857      (function() {
53858        var HighlightDivisionHeader;
53859        HighlightDivisionHeader = class HighlightDivisionHeader {
53860          constructor(element1) {
53861            this.selectVisual = this.selectVisual.bind(this);
53862            this.onHover = this.onHover.bind(this);
53863            this.element = element1;
53864            this.element.find("div.division").hover(this.onHover);
53865          }
53866          selectVisual(element) {
53867            if (jQuery(element).is("div.division")) {
53868              return jQuery(element).find("span.visual");
53869            } else {
53870              return jQuery(element).parents("div.division").find("span.visual");
53871            }
53872          }
53873          onHover(event2) {
53874            return this.selectVisual(event2.target).toggleClass("over");
53875          }
53876        };
53877        if (jQuery("div.divisions")) {
53878          new HighlightDivisionHeader(jQuery("div.divisions"));
53879        }
53880      }).call(exports);
53881    }
53882  });
53883
53884  // apps/base/assets/javascripts/components/omron_form_helper.coffee
53885  var require_omron_form_helper = __commonJS({
53886    "apps/base/assets/javascripts/components/omron_form_helper.coffee"(exports) {
53887      "use strict";
53888      init_esbuild_shims();
53889      (function() {
53890        var OmronFormHelper;
53891        OmronFormHelper = class OmronFormHelper {
53892          constructor(forms) {
53893            this.addFormField = this.addFormField.bind(this);
53894            this.forms = forms;
53895            this.addFormField(this.forms);
53896          }
53897          addFormField(forms) {
53898            this.forms = forms;
53899            return this.forms.each(function(index, form) {
53900              if ((jQuery(form).attr("method") || "").toLowerCase() !== "get") {
53901                return jQuery("<input>").attr({
53902                  type: "hidden",
53903                  name: "omronformhelper",
53904                  value: "853947633"
53905                }).appendTo(form);
53906              }
53907            });
53908          }
53909        };
53910        if (jQuery("form").length > 0) {
53911          new OmronFormHelper(jQuery("form"));
53912        }
53913      }).call(exports);
53914    }
53915  });
53916
53917  // apps/base/assets/javascripts/components/page/site_navigation.coffee
53918  var require_site_navigation = __commonJS({
53919    "apps/base/assets/javascripts/components/page/site_navigation.coffee"(exports) {
53920      "use strict";
53921      init_esbuild_shims();
53922      (function() {
53923        jQuery(".icon.my-lists").on("click", function() {
53924          return trackEvent("My list", "Clicked on heart-navigation");
53925        });
53926      }).call(exports);
53927    }
53928  });
53929
53930  // apps/base/assets/javascripts/components/popups.coffee
53931  var require_popups = __commonJS({
53932    "apps/base/assets/javascripts/components/popups.coffee"(exports) {
53933      "use strict";
53934      init_esbuild_shims();
53935      (function() {
53936        var observer;
53937        jQuery().magnificPopup;
53938        jQuery("a.login, a.direct_access, a.register").magnificPopup({
53939          type: "inline",
53940          preloader: false,
53941          midClick: true,
53942          mainClass: "login-popup"
53943        });
53944        jQuery(".visual.video a, a.video").magnificPopup({
53945          disableOn: 700,
53946          type: "iframe",
53947          mainClass: "visual-video-popup",
53948          removalDelay: 160,
53949          preloader: false,
53950          fixedContentPos: false
53951        });
53952        jQuery("a.closemodal").on("click", function(event2) {
53953          if (jQuery(event2.currentTarget).attr("href") == null) {
53954            return jQuery.magnificPopup.close();
53955          }
53956        });
53957        if (jQuery("#newsletterpopup").length) {
53958          window.openNewsletterPopup = function() {
53959            return jQuery.magnificPopup.open({
53960              items: {
53961                src: "#newsletterpopup"
53962              }
53963            });
53964          };
53965          openNewsletterPopup();
53966        }
53967        if (jQuery("#account-verification").length) {
53968          window.openAccountVerificationPopup = function() {
53969            var showEvery, warningDay, yearAndMonth;
53970            showEvery = 3;
53971            yearAndMonth = `${(/* @__PURE__ */ new Date()).getFullYear()}-${(/* @__PURE__ */ new Date()).getMonth()}`;
53972            warningDay = `expiration-popup-${yearAndMonth}-${parseInt(parseInt(jQuery("#account-verification").attr("data-days")) / showEvery)}`;
53973            if (!localStorage.getItem(warningDay)) {
53974              jQuery.magnificPopup.open({
53975                items: {
53976                  src: "#account-verification"
53977                },
53978                mainClass: "account-verification-popup"
53979              });
53980              return localStorage.setItem(warningDay, true);
53981            }
53982          };
53983          openAccountVerificationPopup();
53984          jQuery("#close").on("click", function(event2) {
53985            event2.preventDefault();
53986            return jQuery.magnificPopup.close();
53987          });
53988        }
53989        window.initVideoPopups = () => {
53990          window.initYoutubeVideoPopups();
53991          window.initWistiaVideoPopups();
53992          return window.initLargeVideoPopups();
53993        };
53994        window.initLoginPopup = () => {
53995          return jQuery("a.login, a.direct_access, a.register").magnificPopup({
53996            type: "inline",
53997            preloader: false,
53998            midClick: true,
53999            mainClass: "login-popup"
54000          });
54001        };
54002        window.initLargeVideoPopups = () => {
54003          return jQuery(".large-video-popup").each(function(index, element) {
54004            return jQuery(element).magnificPopup({
54005              type: "inline",
54006              midClick: true,
54007              mainClass: "large-video-popup",
54008              closeBtnInside: true,
54009              callbacks: {
54010                close: function() {
54011                  jQuery("#video-player")[0].pause();
54012                  return jQuery("article.video video").trigger("startPlaying");
54013                }
54014              }
54015            });
54016          });
54017        };
54018        window.initMicrosoftBookingsPopups = () => {
54019          return jQuery(".microsoft-bookings-link").each(function(index, element) {
54020            return jQuery(element).magnificPopup({
54021              type: "inline",
54022              midClick: true,
54023              mainClass: "microsoft-bookings-popup",
54024              closeBtnInside: true
54025            });
54026          });
54027        };
54028        window.initFormPopups = () => {
54029          return jQuery(".form-popup-link").each(function(index, element) {
54030            var popupClassName;
54031            popupClassName = jQuery(element).data("popup-class-name");
54032            return jQuery(element).magnificPopup({
54033              type: "inline",
54034              midClick: true,
54035              mainClass: "form-popup " + popupClassName,
54036              closeBtnInside: true,
54037              focus: ".select2-search",
54038              callbacks: {
54039                open: function() {
54040                  return this.content.find(".select2[data-type='country']").select2({
54041                    width: "100%"
54042                  });
54043                },
54044                close: function() {
54045                  return jQuery("div.form-wrapper iframe").remove();
54046                }
54047              }
54048            });
54049          });
54050        };
54051        window.initYoutubeVideoPopups = () => {
54052          return jQuery(".youtube-video-link").each(function(index, element) {
54053            return jQuery(element).magnificPopup({
54054              type: "inline",
54055              midClick: true,
54056              mainClass: "video-popup",
54057              closeBtnInside: true,
54058              callbacks: {
54059                change: function() {
54060                  var playlistId, videoId;
54061                  videoId = this.content.find("div.video-wrapper").attr("id").replace("player-", "");
54062                  playlistId = this.content.find("div.video-wrapper").data("playlist");
54063                  jQuery("div.video-wrapper iframe").remove();
54064                  this.content.find("div.video-wrapper").html('<div class="youtube-player" id="' + videoId + '"></div>');
54065                  return new window.YouTubeVideo(videoId, playlistId);
54066                },
54067                close: function() {
54068                  return jQuery("div.video-wrapper iframe").remove();
54069                }
54070              }
54071            });
54072          });
54073        };
54074        window.initImagesAndWarnings = () => {
54075          var groupNames;
54076          jQuery(".inline-link").magnificPopup({
54077            type: "inline",
54078            midClick: true,
54079            mainClass: "content-popup",
54080            closeBtnInside: true
54081          });
54082          groupNames = jQuery(".image-link[rel]").map(function() {
54083            return jQuery(this).attr("rel");
54084          });
54085          jQuery.uniqueSort(groupNames).each(function() {
54086            return $('.image-link[rel="' + this + '"]').magnificPopup({
54087              type: "image",
54088              gallery: {
54089                enabled: true
54090              },
54091              mainClass: "image-popup",
54092              closeBtnInside: true
54093            });
54094          });
54095          jQuery(".flash-link").magnificPopup({
54096            type: "inline",
54097            midClick: true,
54098            mainClass: "flash-popup"
54099          });
54100          jQuery(".inline-warning").magnificPopup({
54101            type: "inline",
54102            midClick: true,
54103            mainClass: "error-popup"
54104          });
54105          return jQuery(".wide-popup").magnificPopup({
54106            type: "inline",
54107            midClick: true,
54108            mainClass: "wide-popup",
54109            closeBtnInside: true
54110          });
54111        };
54112        window.initWistiaVideoPopups = () => {
54113          return jQuery(".wistia-video-link").each(function(index, element) {
54114            return jQuery(element).magnificPopup({
54115              type: "inline",
54116              midClick: true,
54117              mainClass: "video-popup",
54118              closeBtnInside: true
54119            });
54120          });
54121        };
54122        jQuery(document).ready(function() {
54123          window.initImagesAndWarnings();
54124          window.initVideoPopups();
54125          window.initFormPopups();
54126          window.initMicrosoftBookingsPopups();
54127          return window.initLoginPopup();
54128        });
54129        if (jQuery("licences-table").length > 0) {
54130          observer = new MutationObserver(function(mutations_list) {
54131            return mutations_list.forEach(function(mutation) {
54132              return mutation.addedNodes.forEach(function(added_node) {
54133                if (jQuery(added_node).find(".open-popup-link").length > 0) {
54134                  return jQuery(".open-popup-link").magnificPopup({
54135                    gallery: {
54136                      enabled: false
54137                    },
54138                    closeBtnInside: true,
54139                    mainClass: "release-notes-popup"
54140                  });
54141                }
54142              });
54143            });
54144          });
54145          observer.observe(document.querySelector("licences-table"), {
54146            subtree: true,
54147            childList: true
54148          });
54149        }
54150      }).call(exports);
54151    }
54152  });
54153
54154  // apps/base/assets/javascripts/components/recaptcha.coffee
54155  var require_recaptcha = __commonJS({
54156    "apps/base/assets/javascripts/components/recaptcha.coffee"(exports) {
54157      "use strict";
54158      init_esbuild_shims();
54159      (function() {
54160        var loadRecaptcha;
54161        loadRecaptcha = function(event2, data) {
54162          $("head").append('<script async defer src="https://www.recaptcha.net/recaptcha/api.js?render=explicit&onload=onCaptchaLoaded"><\/script>');
54163          jQuery("body").off("focus", "form input", loadRecaptcha);
54164          jQuery("#authentication_dialog").off("click", loadRecaptcha);
54165          return jQuery(".form-popup-link").off("click", loadRecaptcha);
54166        };
54167        jQuery(function() {
54168          if (jQuery(".load-recaptcha-when-needed").length === 1) {
54169            jQuery("body").on("focus", "form input", loadRecaptcha);
54170            jQuery("#authentication_dialog").on("click", loadRecaptcha);
54171            jQuery(".form-popup-link").on("click", loadRecaptcha);
54172            if (jQuery("main form:visible").length > 0) {
54173              return loadRecaptcha();
54174            }
54175          } else if (jQuery(".load-recaptcha").length === 1) {
54176            return loadRecaptcha();
54177          }
54178        });
54179      }).call(exports);
54180    }
54181  });
54182
54183  // apps/base/assets/javascripts/components/search_bar.coffee
54184  var require_search_bar = __commonJS({
54185    "apps/base/assets/javascripts/components/search_bar.coffee"(exports) {
54186      "use strict";
54187      init_esbuild_shims();
54188      (function() {
54189        document.addEventListener("DOMContentLoaded", function() {
54190          var checkInput, clearButton, formIcon, inputField, searchForm;
54191          inputField = document.getElementById("q");
54192          if (!inputField) {
54193            return;
54194          }
54195          clearButton = document.getElementById("clear-input");
54196          searchForm = document.getElementById("searchForm");
54197          if (searchForm) {
54198            formIcon = searchForm.querySelector(".fa-search");
54199          }
54200          checkInput = function() {
54201            if (inputField.value.length > 0) {
54202              return clearButton.style.display = "block";
54203            } else {
54204              return clearButton.style.display = "none";
54205            }
54206          };
54207          checkInput();
54208          clearButton.addEventListener("click", function() {
54209            inputField.value = "";
54210            return clearButton.style.display = "none";
54211          });
54212          inputField.addEventListener("keyup", function(event2) {
54213            checkInput();
54214            if (event2.keyCode === 13) {
54215              event2.preventDefault();
54216              if (searchForm) {
54217                return searchForm.submit();
54218              }
54219            }
54220          });
54221          if (searchForm && formIcon) {
54222            searchForm.addEventListener("focusin", function() {
54223              return formIcon.classList.add("selected");
54224            });
54225            return searchForm.addEventListener("focusout", function() {
54226              return formIcon.classList.remove("selected");
54227            });
54228          }
54229        });
54230      }).call(exports);
54231    }
54232  });
54233
54234  // apps/base/assets/javascripts/components/searchbox.coffee
54235  var require_searchbox = __commonJS({
54236    "apps/base/assets/javascripts/components/searchbox.coffee"(exports) {
54237      "use strict";
54238      init_esbuild_shims();
54239      (function() {
54240        jQuery(function() {
54241          var delay, hideSearchBox, showSearchBox, timer;
54242          timer = void 0;
54243          delay = 250;
54244          jQuery("nav .search-container .icon.search").on("mouseover", function() {
54245            clearTimeout(timer);
54246            return showSearchBox();
54247          }).on("mouseleave", function(event2) {
54248            if (!jQuery(event2.target).is("input")) {
54249              return timer = setTimeout(hideSearchBox, delay);
54250            }
54251          });
54252          jQuery("nav .search-container .icon.search").on("click", function() {
54253            return showSearchBox();
54254          });
54255          showSearchBox = function() {
54256            jQuery("nav .search-container .search-box").show();
54257            jQuery("nav .search-container .icon.search").addClass("active");
54258            return jQuery("nav .search-container input[type='text']").focus();
54259          };
54260          return hideSearchBox = function() {
54261            jQuery("nav .search-container .search-box").hide();
54262            return jQuery("nav .search-container .icon.search").removeClass("active");
54263          };
54264        });
54265      }).call(exports);
54266    }
54267  });
54268
54269  // apps/base/assets/javascripts/components/tag_filter.coffee
54270  var require_tag_filter = __commonJS({
54271    "apps/base/assets/javascripts/components/tag_filter.coffee"(exports) {
54272      "use strict";
54273      init_esbuild_shims();
54274      (function() {
54275        var TagFilter;
54276        TagFilter = class TagFilter {
54277          constructor(element) {
54278            this.items = element.parent().find("*[data-tags]");
54279            this.itemsContainer = this.items.parent();
54280            this.allItems = this.items.clone();
54281            this.tags = element.find("a");
54282            this.attachHandlers();
54283            this.countTagItems();
54284          }
54285          attachHandlers() {
54286            return this.tags.on("click", (event2) => {
54287              this.tags.filter(".enabled").removeClass("enabled");
54288              jQuery(event2.currentTarget).toggleClass("enabled");
54289              return this.updateItems();
54290            });
54291          }
54292          countTagItems() {
54293            var count, i, len, ref, results, tag, tagCounts;
54294            tagCounts = {};
54295            this.items.each((index, item) => {
54296              var i2, len2, ref2, results2, tag2;
54297              ref2 = jQuery(item).data("tags");
54298              results2 = [];
54299              for (i2 = 0, len2 = ref2.length; i2 < len2; i2++) {
54300                tag2 = ref2[i2];
54301                results2.push(tagCounts[tag2] = tagCounts[tag2] + 1 || 1);
54302              }
54303              return results2;
54304            });
54305            ref = this.tags;
54306            results = [];
54307            for (i = 0, len = ref.length; i < len; i++) {
54308              tag = ref[i];
54309              if (jQuery(tag).data("all")) {
54310                count = this.items.length;
54311              } else {
54312                count = tagCounts[jQuery(tag).data("tag")];
54313              }
54314              if (count) {
54315                results.push(tag.innerHTML += ` <span class=count>(${count})</span>`);
54316              } else {
54317                results.push(jQuery(tag).hide());
54318              }
54319            }
54320            return results;
54321          }
54322          updateItems() {
54323            var currentTag;
54324            currentTag = this.tags.filter(".enabled");
54325            this.itemsContainer.empty();
54326            this.itemsContainer.append(this.allItems);
54327            if (!currentTag.data("all")) {
54328              return this.itemsContainer.find("*[data-tags]").each((index, item) => {
54329                if (jQuery.inArray(currentTag.data("tag"), jQuery(item).data("tags")) === -1) {
54330                  return jQuery(item).remove();
54331                }
54332              });
54333            }
54334          }
54335        };
54336        jQuery(".tags").each(function(index, element) {
54337          if (element.childElementCount > 0) {
54338            return new TagFilter(jQuery(element));
54339          }
54340        });
54341      }).call(exports);
54342    }
54343  });
54344
54345  // apps/base/assets/javascripts/components/toggle_switch.coffee
54346  var require_toggle_switch = __commonJS({
54347    "apps/base/assets/javascripts/components/toggle_switch.coffee"(exports) {
54348      "use strict";
54349      init_esbuild_shims();
54350      (function() {
54351        jQuery(".toggleswitch").click(function() {
54352          var control, value;
54353          control = jQuery(this);
54354          value = control.find("input:checked").val();
54355          return jQuery(control.data("selector")).each(function() {
54356            var el, name;
54357            el = jQuery(this);
54358            if (name = el.data("toggle")) {
54359              if (name === value) {
54360                return el.addClass("active");
54361              } else {
54362                return el.removeClass("active");
54363              }
54364            }
54365          });
54366        });
54367        jQuery(".toggleswitch input:checked").trigger("click");
54368      }).call(exports);
54369    }
54370  });
54371
54372  // apps/base/assets/javascripts/components/toggles.coffee
54373  var require_toggles = __commonJS({
54374    "apps/base/assets/javascripts/components/toggles.coffee"(exports) {
54375      "use strict";
54376      init_esbuild_shims();
54377      (function() {
54378        jQuery("body").on("click", ".toggle", function(e) {
54379          var checkbox, checkboxID;
54380          checkboxID = jQuery(this).attr("ref");
54381          checkbox = jQuery("#" + checkboxID);
54382          if (checkbox.is(":checked")) {
54383            checkbox.prop("checked", false).trigger("change");
54384          } else {
54385            checkbox.prop("checked", true).trigger("change");
54386          }
54387          jQuery(this).toggleClass("checked").siblings().toggleClass("checked");
54388          return e.preventDefault();
54389        });
54390      }).call(exports);
54391    }
54392  });
54393
54394  // apps/base/assets/javascripts/components/tooltip.coffee
54395  var require_tooltip = __commonJS({
54396    "apps/base/assets/javascripts/components/tooltip.coffee"(exports) {
54397      "use strict";
54398      init_esbuild_shims();
54399      (function() {
54400        var Tooltip;
54401        Tooltip = (function() {
54402          var INTERVAL, SENSITIVITY, TIMEOUT;
54403          class Tooltip2 {
54404            constructor(el) {
54405              this.attachEvents = this.attachEvents.bind(this);
54406              this.el = el;
54407              this.tooltip = jQuery(this.el);
54408              this.elementHasFocus = false;
54409              this.attachEvents();
54410            }
54411            attachEvents() {
54412              var hoverTimeout;
54413              hoverTimeout = null;
54414              this.tooltip.on("mouseover", (e) => {
54415                if (this.tooltip.hasClass("delayed")) {
54416                  clearTimeout(hoverTimeout);
54417                  return hoverTimeout = setTimeout(() => {
54418                    return this.tooltip.addClass("hover");
54419                  }, 1e3);
54420                } else {
54421                  return this.tooltip.addClass("hover");
54422                }
54423              });
54424              this.tooltip.on("mouseleave", (e) => {
54425                var openDropdown;
54426                clearTimeout(hoverTimeout);
54427                openDropdown = this.tooltip.find(".select2-selection--single").attr("aria-expanded");
54428                if (openDropdown === "false" || openDropdown === void 0) {
54429                  this.tooltip.removeClass("hover");
54430                  return this.tooltip.find(".select2-hidden-accessible").select2("close");
54431                }
54432              });
54433              this.tooltip.find("div.tab").on("mouseover", (event2) => {
54434                var tab;
54435                tab = jQuery(event2.currentTarget);
54436                tab.addClass("active");
54437                tab.siblings().removeClass("active");
54438                this.tooltip.find("div.tabcontent").removeClass("active");
54439                return this.tooltip.find("div.tabcontent[data-name='" + tab.data("name") + "']").addClass("active");
54440              });
54441              return this.tooltip.find("input").on("focus", (event2) => {
54442                return this.elementHasFocus = true;
54443              });
54444            }
54445          }
54446          ;
54447          INTERVAL = 50;
54448          SENSITIVITY = 50;
54449          TIMEOUT = 300;
54450          return Tooltip2;
54451        }).call(this);
54452        jQuery("div.tooltip").each(function(index, element) {
54453          return new Tooltip(element);
54454        });
54455        jQuery("tbody.tooltip").each(function(index, element) {
54456          return new Tooltip(element);
54457        });
54458      }).call(exports);
54459    }
54460  });
54461
54462  // apps/base/assets/javascripts/components/video.coffee
54463  var require_video = __commonJS({
54464    "apps/base/assets/javascripts/components/video.coffee"(exports) {
54465      "use strict";
54466      init_esbuild_shims();
54467      (function() {
54468        window.YouTubeVideo = class YouTubeVideo {
54469          constructor(youtubeId, playlistId = void 0, autoplay = true, containerId) {
54470            this.initPlayer = this.initPlayer.bind(this);
54471            this.onStateChangeHandler = this.onStateChangeHandler.bind(this);
54472            this.setTime = this.setTime.bind(this);
54473            this.playVideo = this.playVideo.bind(this);
54474            this.setTimer = this.setTimer.bind(this);
54475            this.cancelTimers = this.cancelTimers.bind(this);
54476            this.trackProgress = this.trackProgress.bind(this);
54477            this.youtubeId = youtubeId;
54478            this.playlistId = playlistId;
54479            this.autoplay = autoplay;
54480            this.containerId = containerId;
54481            if (this.containerId === void 0) {
54482              this.containerId = this.youtubeId;
54483            }
54484            this.timers = [];
54485            this.lastTimecode = null;
54486            this.attempt = 1;
54487            this.max_attempts = 100;
54488            this.initTimer = setInterval(() => {
54489              if (jQuery("#" + this.containerId).length > 0) {
54490                this.initPlayer();
54491                return clearInterval(this.initTimer);
54492              }
54493            }, 100);
54494          }
54495          initPlayer() {
54496            this.attempt += 1;
54497            if (this.attempt > this.max_attempts) {
54498              clearInterval(this.initTimer);
54499            }
54500            if (typeof YT !== "undefined" && YT.Player) {
54501              return this.player = new YT.Player(this.containerId, {
54502                videoId: this.youtubeId,
54503                playerVars: {
54504                  listType: "playlist",
54505                  list: this.playlistId
54506                },
54507                events: {
54508                  "onReady": this.playVideo,
54509                  "onStateChange": this.onStateChangeHandler
54510                }
54511              });
54512            }
54513          }
54514          onStateChangeHandler(event2) {
54515            var i, len, percentage, ref;
54516            switch (event2.data) {
54517              case YT.PlayerState.PLAYING:
54518                ref = [25, 50, 75];
54519                for (i = 0, len = ref.length; i < len; i++) {
54520                  percentage = ref[i];
54521                  this.setTimer(percentage);
54522                }
54523                return this.trackEvent("Play");
54524              case YT.PlayerState.PAUSED:
54525                this.cancelTimers();
54526                return this.trackEvent("Pause");
54527              case YT.PlayerState.ENDED:
54528                this.trackEvent("100%");
54529                return this.timers = [];
54530            }
54531          }
54532          setTime(seconds) {
54533            return this.player.seekTo(seconds);
54534          }
54535          playVideo() {
54536            if (this.autoplay) {
54537              return this.player.playVideo();
54538            }
54539          }
54540          setTimer(percentage) {
54541            var delay;
54542            if (this.player.getDuration() > 0) {
54543              delay = (this.player.getDuration() * (percentage / 100) - this.player.getCurrentTime()) * 1e3;
54544              if (delay > 0) {
54545                return this.timers.push(window.setTimeout(this.trackProgress, delay, percentage));
54546              }
54547            }
54548          }
54549          cancelTimers() {
54550            var i, len, ref, timeoutId;
54551            ref = this.timers;
54552            for (i = 0, len = ref.length; i < len; i++) {
54553              timeoutId = ref[i];
54554              window.clearTimeout(timeoutId);
54555            }
54556            return this.timers = [];
54557          }
54558          trackProgress(percentage) {
54559            return this.trackEvent(percentage + "%");
54560          }
54561          trackEvent(event2) {
54562            window.trackEvent("Videos", event2, "youtube_" + this.youtubeId);
54563            return window.trackEloquaEvent(["youtube_" + this.youtubeId, event2]);
54564          }
54565        };
54566        window.onYouTubeIframeAPIReady = function() {
54567          return jQuery('div[data-youtube-tracked="true"]').each(function(index, element) {
54568            return new window.YouTubeVideo(jQuery(element).find("iframe").id());
54569          });
54570        };
54571      }).call(exports);
54572    }
54573  });
54574
54575  // apps/base/assets/javascripts/components/webinar-filter/availability_filter.coffee
54576  var require_availability_filter = __commonJS({
54577    "apps/base/assets/javascripts/components/webinar-filter/availability_filter.coffee"(exports) {
54578      "use strict";
54579      init_esbuild_shims();
54580      (function() {
54581        var AvailabilityFilter;
54582        AvailabilityFilter = class AvailabilityFilter {
54583          constructor(availability) {
54584            this.attachEventHandlers = this.attachEventHandlers.bind(this);
54585            this.getChecked = this.getChecked.bind(this);
54586            this.handleFiltering = this.handleFiltering.bind(this);
54587            this.removeAvailability = this.removeAvailability.bind(this);
54588            this.setAvailability = this.setAvailability.bind(this);
54589            this.availability = availability;
54590            this.selectedAvailability = [];
54591            this.select = this.availability.find("select");
54592            this.attachEventHandlers();
54593          }
54594          attachEventHandlers() {
54595            return this.select.on("change", () => {
54596              this.removeAvailability();
54597              this.setAvailability();
54598              return this.getChecked();
54599            });
54600          }
54601          getChecked() {
54602            return $.map(this.select.find("option:selected"), (option, index) => {
54603              return this.handleFiltering(jQuery(option).val());
54604            });
54605          }
54606          handleFiltering(option) {
54607            this.removeAvailability();
54608            return this.setAvailability(option);
54609          }
54610          removeAvailability() {
54611            return this.selectedAvailability = [];
54612          }
54613          setAvailability(option) {
54614            return this.selectedAvailability.push(option);
54615          }
54616        };
54617        new AvailabilityFilter(jQuery(".webinar-filter .availability"));
54618      }).call(exports);
54619    }
54620  });
54621
54622  // apps/base/assets/javascripts/components/webinar-filter/event_filter.coffee
54623  var require_event_filter = __commonJS({
54624    "apps/base/assets/javascripts/components/webinar-filter/event_filter.coffee"(exports) {
54625      "use strict";
54626      init_esbuild_shims();
54627      (function() {
54628        var WebinarFilter;
54629        require_select22();
54630        WebinarFilter = class WebinarFilter {
54631          constructor(filterContainer) {
54632            this.attachEventHandlers = this.attachEventHandlers.bind(this);
54633            this.getChecked = this.getChecked.bind(this);
54634            this.showListItems = this.showListItems.bind(this);
54635            this.filterContainer = filterContainer;
54636            this.searchSelect = this.filterContainer.find(".search-webinar select");
54637            this.clearButton = this.filterContainer.find(".search-webinar .clear");
54638            this.searchButton = this.filterContainer.find(".search-webinar span");
54639            this.topicSelect = this.filterContainer.find(".topic select");
54640            this.availabilitySelect = this.filterContainer.find(".availability select");
54641            this.select = this.filterContainer.find("select");
54642            this.endpoint = jQuery("section.listing").attr("data-endpoint");
54643            this.landingUri = jQuery("section.listing").attr("data-landing");
54644            this.blockUri = jQuery("section.listing").attr("data-block");
54645            this.loadingIndicator = jQuery("section.listing .loading-container");
54646            this.attachEventHandlers();
54647          }
54648          attachEventHandlers() {
54649            this.topicSelect.select2({
54650              minimumResultsForSearch: -1,
54651              placeholder: "Topic",
54652              allowClear: true
54653            });
54654            this.availabilitySelect.select2({
54655              minimumResultsForSearch: -1,
54656              placeholder: "Availability",
54657              allowClear: true
54658            });
54659            this.clearButton.hide();
54660            this.select.on("change", (e) => {
54661              return this.getChecked();
54662            });
54663            this.searchButton.on("click", () => {
54664              return this.getChecked();
54665            });
54666            this.filterContainer.on("keyup", ".search-webinar input", (e) => {
54667              e.preventDefault();
54668              if (e.target.value.length === 0) {
54669                return this.clearButton.hide();
54670              } else {
54671                return this.clearButton.show();
54672              }
54673            });
54674            return this.clearButton.on("click", () => {
54675              this.searchSelect.val("");
54676              jQuery(".search-webinar input").val("");
54677              this.getChecked();
54678              return this.clearButton.hide();
54679            });
54680          }
54681          getChecked() {
54682            return this.updateListing(this.getPageParam(), true, this.topicSelect.find("option:selected").val(), this.availabilitySelect.find("option:selected").val(), this.searchSelect.find("option:selected").val());
54683          }
54684          getPageParam() {
54685            var page;
54686            page = "1";
54687            if (location.search.indexOf("page=") > 0) {
54688              page = location.search.slice("-1");
54689            }
54690            return page;
54691          }
54692          updatePageParam(page) {
54693            var pageUrl;
54694            pageUrl = location.pathname + "?page=" + page;
54695            if (location.hash) {
54696              pageUrl = pageUrl + location.hash;
54697            }
54698            return history.pushState({
54699              path: pageUrl
54700            }, "", pageUrl);
54701          }
54702          showListItems() {
54703            jQuery("article.card").hide();
54704            return jQuery(".list-item").css("display", "flex");
54705          }
54706          updateListing(page, updatePageParam = true, topic = null, availability = null, searchValue = null) {
54707            var params, query, tabNumber;
54708            this.loadingIndicator.show();
54709            if (updatePageParam) {
54710              this.updatePageParam(page);
54711            }
54712            tabNumber = jQuery(".cards.active").attr("data-tab");
54713            params = {
54714              landing_uri: this.landingUri,
54715              block_uri: this.blockUri,
54716              page,
54717              tab_number: tabNumber,
54718              topic,
54719              availability,
54720              search_value: searchValue
54721            };
54722            query = this.endpoint + "?" + jQuery.param(params);
54723            return jQuery.get(query, (data) => {
54724              jQuery(".cards.active section").empty();
54725              jQuery(".cards.active section").append(data);
54726              if (jQuery("#list-view").hasClass("selected") || !jQuery("article.card").length) {
54727                this.showListItems();
54728              }
54729              return this.loadingIndicator.hide();
54730            });
54731          }
54732        };
54733        jQuery(function() {
54734          return new WebinarFilter(jQuery(".webinar-filter"));
54735        });
54736      }).call(exports);
54737    }
54738  });
54739
54740  // apps/base/assets/javascripts/components/webinar-filter/get_keywords.coffee
54741  var require_get_keywords = __commonJS({
54742    "apps/base/assets/javascripts/components/webinar-filter/get_keywords.coffee"(exports) {
54743      "use strict";
54744      init_esbuild_shims();
54745      (function() {
54746        var GetKeywords;
54747        GetKeywords = class GetKeywords {
54748          constructor(container, keywords) {
54749            this.attachEventHandlers = this.attachEventHandlers.bind(this);
54750            this.container = container;
54751            this.keywords = keywords;
54752            this.currentKeywords = [];
54753            this.attachEventHandlers();
54754          }
54755          attachEventHandlers() {
54756            jQuery.each(this.container.find(".event-card"), (index, card) => {
54757              if (jQuery(card).data("keywords").length !== 0) {
54758                return jQuery.each(jQuery(card).data("keywords"), (index2, keyword) => {
54759                  if (!this.currentKeywords.includes(keyword)) {
54760                    return this.currentKeywords.push(keyword);
54761                  }
54762                });
54763              }
54764            });
54765            jQuery.each(this.currentKeywords, (index, keyword) => {
54766              return this.keywords.append(new Option(keyword, keyword));
54767            });
54768            return jQuery(".search-webinar .search").selectToAutocomplete();
54769          }
54770        };
54771        new GetKeywords(jQuery(".cards[data-content=webinars]"), jQuery(".search-webinar select"));
54772      }).call(exports);
54773    }
54774  });
54775
54776  // apps/base/assets/javascripts/components/webinar-filter/get_topics.coffee
54777  var require_get_topics = __commonJS({
54778    "apps/base/assets/javascripts/components/webinar-filter/get_topics.coffee"(exports) {
54779      "use strict";
54780      init_esbuild_shims();
54781      (function() {
54782        var GetTopics;
54783        GetTopics = class GetTopics {
54784          constructor(container, topics) {
54785            this.attachEventHandlers = this.attachEventHandlers.bind(this);
54786            this.container = container;
54787            this.topics = topics;
54788            this.currentTopics = [];
54789            this.attachEventHandlers();
54790          }
54791          attachEventHandlers() {
54792            jQuery.each(this.container.find(".event-card"), (index, card) => {
54793              if (!this.currentTopics.includes(jQuery(card).attr("data-topic")) && jQuery(card).attr("data-topic") !== void 0) {
54794                return this.currentTopics.push(jQuery(card).attr("data-topic"));
54795              }
54796            });
54797            return jQuery.each(this.currentTopics, (index, topic) => {
54798              return this.topics.append(new Option(topic, topic));
54799            });
54800          }
54801        };
54802        new GetTopics(jQuery(".cards[data-content=webinars]"), jQuery(".webinar-filter .topic select"));
54803      }).call(exports);
54804    }
54805  });
54806
54807  // apps/base/assets/javascripts/components/webinar-filter/new-event-filter.coffee
54808  var require_new_event_filter = __commonJS({
54809    "apps/base/assets/javascripts/components/webinar-filter/new-event-filter.coffee"(exports) {
54810      "use strict";
54811      init_esbuild_shims();
54812      (function() {
54813        var EventFilter;
54814        EventFilter = class EventFilter {
54815          constructor(filterContainer) {
54816            this.attachEventHandlers = this.attachEventHandlers.bind(this);
54817            this.getChecked = this.getChecked.bind(this);
54818            this.showListItems = this.showListItems.bind(this);
54819            this.filterContainer = filterContainer;
54820            this.content = jQuery('article.cards[data-tab="' + this.filterContainer.data("tab") + '"]');
54821            this.tabNumber = this.filterContainer.data("tab");
54822            this.searchSelect = this.filterContainer.find(".search-keyword select");
54823            this.clearButton = this.filterContainer.find(".search-keyword .clear");
54824            this.searchButton = this.filterContainer.find(".search-keyword span");
54825            this.topicSelect = this.filterContainer.find(".topic select");
54826            this.endpoint = jQuery("section.listing").attr("data-endpoint");
54827            this.landingUri = jQuery("section.listing").attr("data-landing");
54828            this.blockUri = jQuery("section.listing").attr("data-block");
54829            this.loadingIndicator = jQuery("section.listing .loading-container");
54830            this.currentTopics = this.content.data("topics");
54831            this.currentKeywords = this.content.data("keywords");
54832            this.attachEventHandlers();
54833          }
54834          attachEventHandlers() {
54835            this.topicSelect.select2({
54836              minimumResultsForSearch: -1
54837            });
54838            this.getTopics();
54839            this.getKeywords();
54840            this.clearButton.hide();
54841            this.topicSelect.on("change", (e) => {
54842              return this.getChecked();
54843            });
54844            this.searchButton.on("click", () => {
54845              return this.getChecked();
54846            });
54847            this.filterContainer.on("keyup", ".search-keyword input", (e) => {
54848              e.preventDefault();
54849              if (e.target.value.length === 0) {
54850                return this.clearButton.hide();
54851              } else {
54852                return this.clearButton.show();
54853              }
54854            });
54855            return this.clearButton.on("click", () => {
54856              this.searchSelect.val("");
54857              this.filterContainer.find(".search-keyword input").val("");
54858              this.getChecked();
54859              return this.clearButton.hide();
54860            });
54861          }
54862          getChecked() {
54863            return this.updateListing(this.topicSelect.find("option:selected").val(), this.searchSelect.find("option:selected").val());
54864          }
54865          updatePageParam() {
54866            var pageUrl;
54867            pageUrl = location.pathname + "?page=1";
54868            if (location.hash) {
54869              pageUrl = pageUrl + location.hash;
54870            }
54871            return history.pushState({
54872              path: pageUrl
54873            }, "", pageUrl);
54874          }
54875          showListItems() {
54876            jQuery("article.card").hide();
54877            return jQuery(".list-item").css("display", "flex");
54878          }
54879          updateListing(topic = null, keyword = null) {
54880            var params, query;
54881            this.loadingIndicator.show();
54882            this.updatePageParam();
54883            params = {
54884              landing_uri: this.landingUri,
54885              block_uri: this.blockUri,
54886              page: 1,
54887              tab_number: this.tabNumber,
54888              topic,
54889              search_value: keyword
54890            };
54891            query = this.endpoint + "?" + jQuery.param(params);
54892            return jQuery.get(query, (data) => {
54893              jQuery(".cards.active section").empty();
54894              jQuery(".cards.active section").append(data);
54895              if (jQuery("#list-view").hasClass("selected") || !jQuery("article.card").length) {
54896                this.showListItems();
54897              }
54898              return this.loadingIndicator.hide();
54899            });
54900          }
54901          getTopics() {
54902            if (this.currentTopics !== void 0 && this.currentTopics.length > 0) {
54903              return jQuery.each(this.currentTopics, (index, topic) => {
54904                return this.topicSelect.append(new Option(topic, topic));
54905              });
54906            }
54907          }
54908          getKeywords() {
54909            if (this.currentKeywords !== void 0 && this.currentKeywords.length > 0) {
54910              jQuery.each(this.currentKeywords, (index, keyword) => {
54911                return this.searchSelect.append(new Option(keyword, keyword));
54912              });
54913            } else {
54914              this.filterContainer.find(".search-keyword").hide();
54915            }
54916            return this.searchSelect.selectToAutocomplete();
54917          }
54918        };
54919        jQuery(function() {
54920          new EventFilter(jQuery(".new-event-filter[data-tab='4']"));
54921          return new EventFilter(jQuery(".new-event-filter[data-tab='5']"));
54922        });
54923      }).call(exports);
54924    }
54925  });
54926
54927  // apps/base/assets/javascripts/application.coffee
54928  init_esbuild_shims();
54929  var import_jquery = __toESM(require_jquery());
54930  var import_select2 = __toESM(require_select2());
54931  var import_moment = __toESM(require_moment());
54932  var import_pikaday = __toESM(require_pikaday());
54933  var import_slick_carousel = __toESM(require_slick());
54934  var DataTable;
54935  if (window.jQuery == null) {
54936    window.jQuery = import_jquery.default;
54937  }
54938  if (window.$ == null) {
54939    window.$ = import_jquery.d
54939efault;
54940  }
54941  if (window.global == null) {
54942    window.global = window;
54943  }
54944  window.Pikaday = import_pikaday.default;
54945  (0, import_select2.default)(import_jquery.default);
54946  require_moment();
54947  require_packery();
54948  require_jquery_menu_aim();
54949  DataTable = require_jquery_dataTables()(window, import_jquery.default);
54950  window.introJs = require_intro();
54951  require_underscore();
54952  require_array_from_polyfill();
54953  require_bootstrap_datepicker();
54954  require_balancetext();
54955  require_email_address_decoder();
54956  require_hamlcoffee();
54957  require_jquery_autoellipsis_1_0_10();
54958  require_jquery_cookie();
54959  require_jquery_doubleScroll();
54960  require_jquery_hoverIntent();
54961  require_jquery_iframe_transport();
54962  require_jquery_query_object();
54963  require_jquery_select_to_autocomplete();
54964  require_jquery_touchSwipe_min();
54965  require_jquery_transit_min();
54966  require_jquery_ui_autocomplete();
54967  require_jquery_ujs();
54968  require_magnific_popup();
54969  require_media_query_events();
54970  require_nouislider();
54971  require_pikaday2();
54972  require_placeholders();
54973  require_promise_polyfill();
54974  require_scroll_up_bar();
54975  require_swfobject();
54976  require_table_head_fixer();
54977  require_webfontloader();
54978  require_mobile();
54979  require_account_verification();
54980  require_unlock();
54981  require_compliant_password();
54982  require_analytics();
54983  require_balance_text();
54984  require_banner();
54985  require_billboard();
54986  require_links();
54987  require_breadcrumbs();
54988  require_call_to_action();
54989  require_contact_landing_page();
54990  require_cards();
54991  require_downloads();
54992  require_footnotes();
54993  require_product();
54994  require_product_compare();
54995  require_product_export_dialog();
54996  require_product_family_filter();
54997  require_product_selector();
54998  require_shortener();
54999  require_slider();
55000  require_categories_filter();
55001  require_category();
55002  require_option();
55003  require_categories_filter2();
55004  require_country_selector();
55005  require_date_picker_jst();
55006  require_data_table_view();
55007  require_downloads2();
55008  require_droptarget();
55009  require_expandable_listing();
55010  require_expandable_row();
55011  require_export_downloader();
55012  require_follow_anchor();
55013  require_footer();
55014  require_footer_old();
55015  require_form_controller();
55016  require_information_block_video();
55017  require_insights();
55018  require_landing_pages();
55019  require_listing_tabs();
55020  require_lms_trainings();
55021  require_authentication_dialog();
55022  require_complete_account_form();
55023  require_login_check();
55024  require_login_response();
55025  require_login_service();
55026  require_register_form();
55027  require_login_form();
55028  require_single_sign_on_link();
55029  require_magic_button();
55030  require_magic_webinar();
55031  require_main_navigation();
55032  require_main_navigation_old();
55033  require_media_carousel();
55034  require_navigation_tab();
55035  require_news();
55036  require_news_article();
55037  require_notification();
55038  require_old_doorway();
55039  require_omron_form_helper();
55040  require_site_navigation();
55041  require_popups();
55042  require_recaptcha();
55043  require_search_bar();
55044  require_searchbox();
55045  require_tag_filter();
55046  require_toggle_switch();
55047  require_toggles();
55048  require_tooltip();
55049  require_video();
55050  require_availability_filter();
55051  require_event_filter();
55052  require_get_keywords();
55053  require_get_topics();
55054  require_new_event_filter();
55055  require_select2();
55056})();
55057/*!
55058 * Intro.js v4.3.0
55059 * https://introjs.com
55060 *
55061 * Copyright (C) 2012-2021 Afshin Mehrabani (@afshinmeh).
55062 * https://raw.githubusercontent.com/usablica/intro.js/master/license.md
55063 *
55064 * Date: Sat, 06 Nov 2021 14:22:05 GMT
55065 */
55066/*!
55067 * Datepicker for Bootstrap v1.10.0 (https://github.com/uxsolutions/bootstrap-datepicker)
55068 *
55069 * Licensed under the Apache License v2.0 (https://www.apache.org/licenses/LICENSE-2.0)
55070 */
55071/*!
55072
55073    Copyright (c) 2011 Peter van der Spek
55074
55075    Permission is hereby granted, free of charge, to any person obtaining a copy
55076    of this software and associated documentation files (the "Software"), to deal
55077    in the Software without restriction, including without limitation the rights
55078    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
55079    copies of the Software, and to permit persons to whom the Software is
55080    furnished to do so, subject to the following conditions:
55081
55082    The above copyright notice and this permission notice shall be included in
55083    all copies or substantial portions of the Software.
55084
55085    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
55086    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
55087    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
55088    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
55089    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
55090    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
55091    THE SOFTWARE.
55092    
55093 */
55094/*!
55095 * jQuery Cookie Plugin v1.3.1
55096 * https://github.com/carhartl/jquery-cookie
55097 *
55098 * Copyright 2013 Klaus Hartl
55099 * Released under the MIT license
55100 */
55101/*!
55102 * hoverIntent v1.8.1 // 2014.08.11 // jQuery v1.9.1+
55103 * http://cherne.net/brian/resources/jquery.hoverIntent.html
55104 *
55105 * You may use hoverIntent under the terms of the MIT license. Basically that
55106 * means you are free to use hoverIntent as long as this header is left intact.
55107 * Copyright 2007, 2014 Brian Cherne
55108 */
55109/*!
55110 * jQuery UI Keycode 1.12.1
55111 * http://jqueryui.com
55112 *
55113 * Copyright jQuery Foundation and other contributors
55114 * Released under the MIT license.
55115 * http://jquery.org/license
55116 */
55117/*!
55118 * jQuery UI Position 1.12.1
55119 * http://jqueryui.com
55120 *
55121 * Copyright jQuery Foundation and other contributors
55122 * Released under the MIT license.
55123 * http://jquery.org/license
55124 *
55125 * http://api.jqueryui.com/position/
55126 */
55127/*!
55128 * jQuery UI Unique ID 1.12.1
55129 * http://jqueryui.com
55130 *
55131 * Copyright jQuery Foundation and other contributors
55132 * Released under the MIT license.
55133 * http://jquery.org/license
55134 */
55135/*!
55136 * jQuery UI Widget 1.12.1
55137 * http://jqueryui.com
55138 *
55139 * Copyright jQuery Foundation and other contributors
55140 * Released under the MIT license.
55141 * http://jquery.org/license
55142 */
55143/*!
55144 * jQuery UI Menu 1.12.1
55145 * http://jqueryui.com
55146 *
55147 * Copyright jQuery Foundation and other contributors
55148 * Released under the MIT license.
55149 * http://jquery.org/license
55150 */
55151/*!
55152 * jQuery UI Autocomplete 1.12.1
55153 * http://jqueryui.com
55154 *
55155 * Copyright jQuery Foundation and other contributors
55156 * Released under the MIT license.
55157 * http://jquery.org/license
55158 */
55159/*! Magnific Popup - v1.1.0 - 2016-02-20
55160* http://dimsemenov.com/plugins/magnific-popup/
55161* Copyright (c) 2016 Dmitry Semenov; */
55162/*! nouislider - 8.2.1 - 2015-12-02 21:43:14 */
55163/*!
55164 * Pikaday
55165 *
55166 * Copyright © 2014 David Bushell | BSD & MIT license | https://github.com/dbushell/Pikaday
55167 */
55168/*!
55169 * The MIT License
55170 *
55171 * Copyright (c) 2012 James Allardice
55172 *
55173 * Permission is hereby granted, free of charge, to any person obtaining a copy
55174 * of this software and associated documentation files (the "Software"), to
55175 * deal in the Software without restriction, including without limitation the
55176 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
55177 * sell copies of the Software, and to permit persons to whom the Software is
55178 * furnished to do so, subject to the following conditions:
55179 *
55180 * The above copyright notice and this permission notice shall be included in
55181 * all copies or substantial portions of the Software.
55182 *
55183 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
55184 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
55185 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
55186 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
55187 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
55188 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
55189 * IN THE SOFTWARE.
55190 */
55191/*! Bundled license information:
55192
55193ieee754/index.js:
55194  (*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> *)
55195
55196buffer/index.js:
55197  (*!
55198   * The buffer module from node.js, for the browser.
55199   *
55200   * @author   Feross Aboukhadijeh <https://feross.org>
55201   * @license  MIT
55202   *)
55203
55204jquery/dist/jquery.js:
55205  (*!
55206   * jQuery JavaScript Library v3.7.1
55207   * https://jquery.com/
55208   *
55209   * Copyright OpenJS Foundation and other contributors
55210   * Released under the MIT license
55211   * https://jquery.org/license
55212   *
55213   * Date: 2023-08-28T13:37Z
55214   *)
55215
55216select2/dist/js/select2.js:
55217  (*!
55218   * Select2 4.1.0-rc.0
55219   * https://select2.github.io
55220   *
55221   * Released under the MIT license
55222   * https://github.com/select2/select2/blob/master/LICENSE.md
55223   *)
55224  (**
55225   * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.
55226   * Released under MIT license, http://github.com/requirejs/almond/LICENSE
55227   *)
55228
55229moment/moment.js:
55230  (*! moment.js *)
55231  (*! version : 2.31.0 *)
55232  (*! authors : Tim Wood, Iskren Chernev, Moment.js contributors *)
55233  (*! license : MIT *)
55234  (*! momentjs.com *)
55235
55236pikaday/pikaday.js:
55237  (*!
55238   * Pikaday
55239   *
55240   * Copyright © 2014 David Bushell | BSD & MIT license | https://github.com/Pikaday/Pikaday
55241   *)
55242
55243get-size/get-size.js:
55244  (*!
55245   * getSize v2.0.3
55246   * measure size of elements
55247   * MIT license
55248   *)
55249
55250outlayer/outlayer.js:
55251  (*!
55252   * Outlayer v2.1.1
55253   * the brains and guts of a layout library
55254   * MIT license
55255   *)
55256
55257packery/js/packery.js:
55258  (*!
55259   * Packery v2.1.2
55260   * Gapless, draggable grid layouts
55261   *
55262   * Licensed GPLv3 for open source use
55263   * or Packery Commercial License for commercial use
55264   *
55265   * http://packery.metafizzy.co
55266   * Copyright 2013-2018 Metafizzy
55267   *)
55268
55269datatables.net/js/jquery.dataTables.js:
55270  (*! DataTables 1.13.11
55271   * ©2008-2024 SpryMedia Ltd - datatables.net/license
55272   *)
55273*/;

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.