PageSourceSearch

https://museumsurfaces.com/assets/museum/js/contact.js?id=a7fd106c190e8cb98823af9f1fdc049c

js museumsurfaces.com collected 2026-10-08 22:39:42 UTC 810,851 bytes, 26,013 lines download raw bytes

vendor: 78 bytes, lines 1-3
1/******/ (() => { // webpackBootstrap
2/******/ 	var __webpack_modules__ = ({
3
vendor: 342 bytes, lines 4-13
4/***/ "./node_modules/axios/index.js":
5/*!*************************************!*\
6  !*** ./node_modules/axios/index.js ***!
7  \*************************************/
8/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
9
10module.exports = __webpack_require__(/*! ./lib/axios */ "./node_modules/axios/lib/axios.js");
11
12/***/ }),
13
vendor: 7,873 bytes, lines 14-236
14/***/ "./node_modules/axios/lib/adapters/xhr.js":
15/*!************************************************!*\
16  !*** ./node_modules/axios/lib/adapters/xhr.js ***!
17  \************************************************/
18/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
19
20"use strict";
21
22
23var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
24var settle = __webpack_require__(/*! ./../core/settle */ "./node_modules/axios/lib/core/settle.js");
25var cookies = __webpack_require__(/*! ./../helpers/cookies */ "./node_modules/axios/lib/helpers/cookies.js");
26var buildURL = __webpack_require__(/*! ./../helpers/buildURL */ "./node_modules/axios/lib/helpers/buildURL.js");
27var buildFullPath = __webpack_require__(/*! ../core/buildFullPath */ "./node_modules/axios/lib/core/buildFullPath.js");
28var parseHeaders = __webpack_require__(/*! ./../helpers/parseHeaders */ "./node_modules/axios/lib/helpers/parseHeaders.js");
29var isURLSameOrigin = __webpack_require__(/*! ./../helpers/isURLSameOrigin */ "./node_modules/axios/lib/helpers/isURLSameOrigin.js");
30var createError = __webpack_require__(/*! ../core/createError */ "./node_modules/axios/lib/core/createError.js");
31var defaults = __webpack_require__(/*! ../defaults */ "./node_modules/axios/lib/defaults.js");
32var Cancel = __webpack_require__(/*! ../cancel/Cancel */ "./node_modules/axios/lib/cancel/Cancel.js");
33
34module.exports = function xhrAdapter(config) {
35  return new Promise(function dispatchXhrRequest(resolve, reject) {
36    var requestData = config.data;
37    var requestHeaders = config.headers;
38    var responseType = config.responseType;
39    var onCanceled;
40    function done() {
41      if (config.cancelToken) {
42        config.cancelToken.unsubscribe(onCanceled);
43      }
44
45      if (config.signal) {
46        config.signal.removeEventListener('abort', onCanceled);
47      }
48    }
49
50    if (utils.isFormData(requestData)) {
51      delete requestHeaders['Content-Type']; // Let the browser set it
52    }
53
54    var request = new XMLHttpRequest();
55
56    // HTTP basic authentication
57    if (config.auth) {
58      var username = config.auth.username || '';
59      var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';
60      requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);
61    }
62
63    var fullPath = buildFullPath(config.baseURL, config.url);
64    request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);
65
66    // Set the request timeout in MS
67    request.timeout = config.timeout;
68
69    function onloadend() {
70      if (!request) {
71        return;
72      }
73      // Prepare the response
74      var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;
75      var responseData = !responseType || responseType === 'text' ||  responseType === 'json' ?
76        request.responseText : request.response;
77      var response = {
78        data: responseData,
79        status: request.status,
80        statusText: request.statusText,
81        headers: responseHeaders,
82        config: config,
83        request: request
84      };
85
86      settle(function _resolve(value) {
87        resolve(value);
88        done();
89      }, function _reject(err) {
90        reject(err);
91        done();
92      }, response);
93
94      // Clean up request
95      request = null;
96    }
97
98    if ('onloadend' in request) {
99      // Use onloadend if available
100      request.onloadend = onloadend;
101    } else {
102      // Listen for ready state to emulate onloadend
103      request.onreadystatechange = function handleLoad() {
104        if (!request || request.readyState !== 4) {
105          return;
106        }
107
108        // The request errored out and we didn't get a response, this will be
109        // handled by onerror instead
110        // With one exception: request that using file: protocol, most browsers
111        // will return status as 0 even though it's a successful request
112        if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {
113          return;
114        }
115        // readystate handler is calling before onerror or ontimeout handlers,
116        // so we should call onloadend on the next 'tick'
117        setTimeout(onloadend);
118      };
119    }
120
121    // Handle browser request cancellation (as opposed to a manual cancellation)
122    request.onabort = function handleAbort() {
123      if (!request) {
124        return;
125      }
126
127      reject(createError('Request aborted', config, 'ECONNABORTED', request));
128
129      // Clean up request
130      request = null;
131    };
132
133    // Handle low level network errors
134    request.onerror = function handleError() {
135      // Real errors are hidden from us by the browser
136      // onerror should only fire if it's a network error
137      reject(createError('Network Error', config, null, request));
138
139      // Clean up request
140      request = null;
141    };
142
143    // Handle timeout
144    request.ontimeout = function handleTimeout() {
145      var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';
146      var transitional = config.transitional || defaults.transitional;
147      if (config.timeoutErrorMessage) {
148        timeoutErrorMessage = config.timeoutErrorMessage;
149      }
150      reject(createError(
151        timeoutErrorMessage,
152        config,
153        transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED',
154        request));
155
156      // Clean up request
157      request = null;
158    };
159
160    // Add xsrf header
161    // This is only done if running in a standard browser environment.
162    // Specifically not if we're in a web worker, or react-native.
163    if (utils.isStandardBrowserEnv()) {
164      // Add xsrf header
165      var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?
166        cookies.read(config.xsrfCookieName) :
167        undefined;
168
169      if (xsrfValue) {
170        requestHeaders[config.xsrfHeaderName] = xsrfValue;
171      }
172    }
173
174    // Add headers to the request
175    if ('setRequestHeader' in request) {
176      utils.forEach(requestHeaders, function setRequestHeader(val, key) {
177        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
178          // Remove Content-Type if data is undefined
179          delete requestHeaders[key];
180        } else {
181          // Otherwise add header to the request
182          request.setRequestHeader(key, val);
183        }
184      });
185    }
186
187    // Add withCredentials to request if needed
188    if (!utils.isUndefined(config.withCredentials)) {
189      request.withCredentials = !!config.withCredentials;
190    }
191
192    // Add responseType to request if needed
193    if (responseType && responseType !== 'json') {
194      request.responseType = config.responseType;
195    }
196
197    // Handle progress if needed
198    if (typeof config.onDownloadProgress === 'function') {
199      request.addEventListener('progress', config.onDownloadProgress);
200    }
201
202    // Not all browsers support upload events
203    if (typeof config.onUploadProgress === 'function' && request.upload) {
204      request.upload.addEventListener('progress', config.onUploadProgress);
205    }
206
207    if (config.cancelToken || config.signal) {
208      // Handle cancellation
209      // eslint-disable-next-line func-names
210      onCanceled = function(cancel) {
211        if (!request) {
212          return;
213        }
214        reject(!cancel || (cancel && cancel.type) ? new Cancel('canceled') : cancel);
215        request.abort();
216        request = null;
217      };
218
219      config.cancelToken && config.cancelToken.subscribe(onCanceled);
220      if (config.signal) {
221        config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);
222      }
223    }
224
225    if (!requestData) {
226      requestData = null;
227    }
228
229    // Send the request
230    request.send(requestData);
231  });
232};
233
234
235/***/ }),
236
vendor: 2,498 bytes, lines 237-304
237/***/ "./node_modules/axios/lib/axios.js":
238/*!*****************************************!*\
239  !*** ./node_modules/axios/lib/axios.js ***!
240  \*****************************************/
241/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
242
243"use strict";
244
245
246var utils = __webpack_require__(/*! ./utils */ "./node_modules/axios/lib/utils.js");
247var bind = __webpack_require__(/*! ./helpers/bind */ "./node_modules/axios/lib/helpers/bind.js");
248var Axios = __webpack_require__(/*! ./core/Axios */ "./node_modules/axios/lib/core/Axios.js");
249var mergeConfig = __webpack_require__(/*! ./core/mergeConfig */ "./node_modules/axios/lib/core/mergeConfig.js");
250var defaults = __webpack_require__(/*! ./defaults */ "./node_modules/axios/lib/defaults.js");
251
252/**
253 * Create an instance of Axios
254 *
255 * @param {Object} defaultConfig The default config for the instance
256 * @return {Axios} A new instance of Axios
257 */
258function createInstance(defaultConfig) {
259  var context = new Axios(defaultConfig);
260  var instance = bind(Axios.prototype.request, context);
261
262  // Copy axios.prototype to instance
263  utils.extend(instance, Axios.prototype, context);
264
265  // Copy context to instance
266  utils.extend(instance, context);
267
268  // Factory for creating new instances
269  instance.create = function create(instanceConfig) {
270    return createInstance(mergeConfig(defaultConfig, instanceConfig));
271  };
272
273  return instance;
274}
275
276// Create the default instance to be exported
277var axios = createInstance(defaults);
278
279// Expose Axios class to allow class inheritance
280axios.Axios = Axios;
281
282// Expose Cancel & CancelToken
283axios.Cancel = __webpack_require__(/*! ./cancel/Cancel */ "./node_modules/axios/lib/cancel/Cancel.js");
284axios.CancelToken = __webpack_require__(/*! ./cancel/CancelToken */ "./node_modules/axios/lib/cancel/CancelToken.js");
285axios.isCancel = __webpack_require__(/*! ./cancel/isCancel */ "./node_modules/axios/lib/cancel/isCancel.js");
286axios.VERSION = (__webpack_require__(/*! ./env/data */ "./node_modules/axios/lib/env/data.js").version);
287
288// Expose all/spread
289axios.all = function all(promises) {
290  return Promise.all(promises);
291};
292axios.spread = __webpack_require__(/*! ./helpers/spread */ "./node_modules/axios/lib/helpers/spread.js");
293
294// Expose isAxiosError
295axios.isAxiosError = __webpack_require__(/*! ./helpers/isAxiosError */ "./node_modules/axios/lib/helpers/isAxiosError.js");
296
297module.exports = axios;
298
299// Allow use of default import syntax in TypeScript
300module.exports["default"] = axios;
301
302
303/***/ }),
304
vendor: 636 bytes, lines 305-334
305/***/ "./node_modules/axios/lib/cancel/Cancel.js":
306/*!*************************************************!*\
307  !*** ./node_modules/axios/lib/cancel/Cancel.js ***!
308  \*************************************************/
309/***/ ((module) => {
310
311"use strict";
312
313
314/**
315 * A `Cancel` is an object that is thrown when an operation is canceled.
316 *
317 * @class
318 * @param {string=} message The message.
319 */
320function Cancel(message) {
321  this.message = message;
322}
323
324Cancel.prototype.toString = function toString() {
325  return 'Cancel' + (this.message ? ': ' + this.message : '');
326};
327
328Cancel.prototype.__CANCEL__ = true;
329
330module.exports = Cancel;
331
332
333/***/ }),
334
vendor: 2,848 bytes, lines 335-464
335/***/ "./node_modules/axios/lib/cancel/CancelToken.js":
336/*!******************************************************!*\
337  !*** ./node_modules/axios/lib/cancel/CancelToken.js ***!
338  \******************************************************/
339/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
340
341"use strict";
342
343
344var Cancel = __webpack_require__(/*! ./Cancel */ "./node_modules/axios/lib/cancel/Cancel.js");
345
346/**
347 * A `CancelToken` is an object that can be used to request cancellation of an operation.
348 *
349 * @class
350 * @param {Function} executor The executor function.
351 */
352function CancelToken(executor) {
353  if (typeof executor !== 'function') {
354    throw new TypeError('executor must be a function.');
355  }
356
357  var resolvePromise;
358
359  this.promise = new Promise(function promiseExecutor(resolve) {
360    resolvePromise = resolve;
361  });
362
363  var token = this;
364
365  // eslint-disable-next-line func-names
366  this.promise.then(function(cancel) {
367    if (!token._listeners) return;
368
369    var i;
370    var l = token._listeners.length;
371
372    for (i = 0; i < l; i++) {
373      token._listeners[i](cancel);
374    }
375    token._listeners = null;
376  });
377
378  // eslint-disable-next-line func-names
379  this.promise.then = function(onfulfilled) {
380    var _resolve;
381    // eslint-disable-next-line func-names
382    var promise = new Promise(function(resolve) {
383      token.subscribe(resolve);
384      _resolve = resolve;
385    }).then(onfulfilled);
386
387    promise.cancel = function reject() {
388      token.unsubscribe(_resolve);
389    };
390
391    return promise;
392  };
393
394  executor(function cancel(message) {
395    if (token.reason) {
396      // Cancellation has already been requested
397      return;
398    }
399
400    token.reason = new Cancel(message);
401    resolvePromise(token.reason);
402  });
403}
404
405/**
406 * Throws a `Cancel` if cancellation has been requested.
407 */
408CancelToken.prototype.throwIfRequested = function throwIfRequested() {
409  if (this.reason) {
410    throw this.reason;
411  }
412};
413
414/**
415 * Subscribe to the cancel signal
416 */
417
418CancelToken.prototype.subscribe = function subscribe(listener) {
419  if (this.reason) {
420    listener(this.reason);
421    return;
422  }
423
424  if (this._listeners) {
425    this._listeners.push(listener);
426  } else {
427    this._listeners = [listener];
428  }
429};
430
431/**
432 * Unsubscribe from the cancel signal
433 */
434
435CancelToken.prototype.unsubscribe = function unsubscribe(listener) {
436  if (!this._listeners) {
437    return;
438  }
439  var index = this._listeners.indexOf(listener);
440  if (index !== -1) {
441    this._listeners.splice(index, 1);
442  }
443};
444
445/**
446 * Returns an object that contains a new `CancelToken` and a function that, when called,
447 * cancels the `CancelToken`.
448 */
449CancelToken.source = function source() {
450  var cancel;
451  var token = new CancelToken(function executor(c) {
452    cancel = c;
453  });
454  return {
455    token: token,
456    cancel: cancel
457  };
458};
459
460module.exports = CancelToken;
461
462
463/***/ }),
464
vendor: 361 bytes, lines 465-480
465/***/ "./node_modules/axios/lib/cancel/isCancel.js":
466/*!***************************************************!*\
467  !*** ./node_modules/axios/lib/cancel/isCancel.js ***!
468  \***************************************************/
469/***/ ((module) => {
470
471"use strict";
472
473
474module.exports = function isCancel(value) {
475  return !!(value && value.__CANCEL__);
476};
477
478
479/***/ }),
480
vendor: 5,073 bytes, lines 481-646
481/***/ "./node_modules/axios/lib/core/Axios.js":
482/*!**********************************************!*\
483  !*** ./node_modules/axios/lib/core/Axios.js ***!
484  \**********************************************/
485/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
486
487"use strict";
488
489
490var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
491var buildURL = __webpack_require__(/*! ../helpers/buildURL */ "./node_modules/axios/lib/helpers/buildURL.js");
492var InterceptorManager = __webpack_require__(/*! ./InterceptorManager */ "./node_modules/axios/lib/core/InterceptorManager.js");
493var dispatchRequest = __webpack_require__(/*! ./dispatchRequest */ "./node_modules/axios/lib/core/dispatchRequest.js");
494var mergeConfig = __webpack_require__(/*! ./mergeConfig */ "./node_modules/axios/lib/core/mergeConfig.js");
495var validator = __webpack_require__(/*! ../helpers/validator */ "./node_modules/axios/lib/helpers/validator.js");
496
497var validators = validator.validators;
498/**
499 * Create a new instance of Axios
500 *
501 * @param {Object} instanceConfig The default config for the instance
502 */
503function Axios(instanceConfig) {
504  this.defaults = instanceConfig;
505  this.interceptors = {
506    request: new InterceptorManager(),
507    response: new InterceptorManager()
508  };
509}
510
511/**
512 * Dispatch a request
513 *
514 * @param {Object} config The config specific for this request (merged with this.defaults)
515 */
516Axios.prototype.request = function request(configOrUrl, config) {
517  /*eslint no-param-reassign:0*/
518  // Allow for axios('example/url'[, config]) a la fetch API
519  if (typeof configOrUrl === 'string') {
520    config = config || {};
521    config.url = configOrUrl;
522  } else {
523    config = configOrUrl || {};
524  }
525
526  if (!config.url) {
527    throw new Error('Provided config url is not valid');
528  }
529
530  config = mergeConfig(this.defaults, config);
531
532  // Set config.method
533  if (config.method) {
534    config.method = config.method.toLowerCase();
535  } else if (this.defaults.method) {
536    config.method = this.defaults.method.toLowerCase();
537  } else {
538    config.method = 'get';
539  }
540
541  var transitional = config.transitional;
542
543  if (transitional !== undefined) {
544    validator.assertOptions(transitional, {
545      silentJSONParsing: validators.transitional(validators.boolean),
546      forcedJSONParsing: validators.transitional(validators.boolean),
547      clarifyTimeoutError: validators.transitional(validators.boolean)
548    }, false);
549  }
550
551  // filter out skipped interceptors
552  var requestInterceptorChain = [];
553  var synchronousRequestInterceptors = true;
554  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
555    if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {
556      return;
557    }
558
559    synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;
560
561    requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);
562  });
563
564  var responseInterceptorChain = [];
565  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
566    responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);
567  });
568
569  var promise;
570
571  if (!synchronousRequestInterceptors) {
572    var chain = [dispatchRequest, undefined];
573
574    Array.prototype.unshift.apply(chain, requestInterceptorChain);
575    chain = chain.concat(responseInterceptorChain);
576
577    promise = Promise.resolve(config);
578    while (chain.length) {
579      promise = promise.then(chain.shift(), chain.shift());
580    }
581
582    return promise;
583  }
584
585
586  var newConfig = config;
587  while (requestInterceptorChain.length) {
588    var onFulfilled = requestInterceptorChain.shift();
589    var onRejected = requestInterceptorChain.shift();
590    try {
591      newConfig = onFulfilled(newConfig);
592    } catch (error) {
593      onRejected(error);
594      break;
595    }
596  }
597
598  try {
599    promise = dispatchRequest(newConfig);
600  } catch (error) {
601    return Promise.reject(error);
602  }
603
604  while (responseInterceptorChain.length) {
605    promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());
606  }
607
608  return promise;
609};
610
611Axios.prototype.getUri = function getUri(config) {
612  if (!config.url) {
613    throw new Error('Provided config url is not valid');
614  }
615  config = mergeConfig(this.defaults, config);
616  return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\?/, '');
617};
618
619// Provide aliases for supported request methods
620utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {
621  /*eslint func-names:0*/
622  Axios.prototype[method] = function(url, config) {
623    return this.request(mergeConfig(config || {}, {
624      method: method,
625      url: url,
626      data: (config || {}).data
627    }));
628  };
629});
630
631utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
632  /*eslint func-names:0*/
633  Axios.prototype[method] = function(url, data, config) {
634    return this.request(mergeConfig(config || {}, {
635      method: method,
636      url: url,
637      data: data
638    }));
639  };
640});
641
642module.exports = Axios;
643
644
645/***/ }),
646
vendor: 1,754 bytes, lines 647-711
647/***/ "./node_modules/axios/lib/core/InterceptorManager.js":
648/*!***********************************************************!*\
649  !*** ./node_modules/axios/lib/core/InterceptorManager.js ***!
650  \***********************************************************/
651/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
652
653"use strict";
654
655
656var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
657
658function InterceptorManager() {
659  this.handlers = [];
660}
661
662/**
663 * Add a new interceptor to the stack
664 *
665 * @param {Function} fulfilled The function to handle `then` for a `Promise`
666 * @param {Function} rejected The function to handle `reject` for a `Promise`
667 *
668 * @return {Number} An ID used to remove interceptor later
669 */
670InterceptorManager.prototype.use = function use(fulfilled, rejected, options) {
671  this.handlers.push({
672    fulfilled: fulfilled,
673    rejected: rejected,
674    synchronous: options ? options.synchronous : false,
675    runWhen: options ? options.runWhen : null
676  });
677  return this.handlers.length - 1;
678};
679
680/**
681 * Remove an interceptor from the stack
682 *
683 * @param {Number} id The ID that was returned by `use`
684 */
685InterceptorManager.prototype.eject = function eject(id) {
686  if (this.handlers[id]) {
687    this.handlers[id] = null;
688  }
689};
690
691/**
692 * Iterate over all the registered interceptors
693 *
694 * This method is particularly useful for skipping over any
695 * interceptors that may have become `null` calling `eject`.
696 *
697 * @param {Function} fn The function to call for each interceptor
698 */
699InterceptorManager.prototype.forEach = function forEach(fn) {
700  utils.forEach(this.handlers, function forEachHandler(h) {
701    if (h !== null) {
702      fn(h);
703    }
704  });
705};
706
707module.exports = InterceptorManager;
708
709
710/***/ }),
711
vendor: 1,149 bytes, lines 712-742
712/***/ "./node_modules/axios/lib/core/buildFullPath.js":
713/*!******************************************************!*\
714  !*** ./node_modules/axios/lib/core/buildFullPath.js ***!
715  \******************************************************/
716/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
717
718"use strict";
719
720
721var isAbsoluteURL = __webpack_require__(/*! ../helpers/isAbsoluteURL */ "./node_modules/axios/lib/helpers/isAbsoluteURL.js");
722var combineURLs = __webpack_require__(/*! ../helpers/combineURLs */ "./node_modules/axios/lib/helpers/combineURLs.js");
723
724/**
725 * Creates a new URL by combining the baseURL with the requestedURL,
726 * only when the requestedURL is not already an absolute URL.
727 * If the requestURL is absolute, this function returns the requestedURL untouched.
728 *
729 * @param {string} baseURL The base URL
730 * @param {string} requestedURL Absolute or relative URL to combine
731 * @returns {string} The combined full path
732 */
733module.exports = function buildFullPath(baseURL, requestedURL) {
734  if (baseURL && !isAbsoluteURL(requestedURL)) {
735    return combineURLs(baseURL, requestedURL);
736  }
737  return requestedURL;
738};
739
740
741/***/ }),
742
vendor: 1,000 bytes, lines 743-771
743/***/ "./node_modules/axios/lib/core/createError.js":
744/*!****************************************************!*\
745  !*** ./node_modules/axios/lib/core/createError.js ***!
746  \****************************************************/
747/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
748
749"use strict";
750
751
752var enhanceError = __webpack_require__(/*! ./enhanceError */ "./node_modules/axios/lib/core/enhanceError.js");
753
754/**
755 * Create an Error with the specified message, config, error code, request and response.
756 *
757 * @param {string} message The error message.
758 * @param {Object} config The config.
759 * @param {string} [code] The error code (for example, 'ECONNABORTED').
760 * @param {Object} [request] The request.
761 * @param {Object} [response] The response.
762 * @returns {Error} The created error.
763 */
764module.exports = function createError(message, config, code, request, response) {
765  var error = new Error(message);
766  return enhanceError(error, config, code, request, response);
767};
768
769
770/***/ }),
771
vendor: 2,747 bytes, lines 772-869
772/***/ "./node_modules/axios/lib/core/dispatchRequest.js":
773/*!********************************************************!*\
774  !*** ./node_modules/axios/lib/core/dispatchRequest.js ***!
775  \********************************************************/
776/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
777
778"use strict";
779
780
781var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
782var transformData = __webpack_require__(/*! ./transformData */ "./node_modules/axios/lib/core/transformData.js");
783var isCancel = __webpack_require__(/*! ../cancel/isCancel */ "./node_modules/axios/lib/cancel/isCancel.js");
784var defaults = __webpack_require__(/*! ../defaults */ "./node_modules/axios/lib/defaults.js");
785var Cancel = __webpack_require__(/*! ../cancel/Cancel */ "./node_modules/axios/lib/cancel/Cancel.js");
786
787/**
788 * Throws a `Cancel` if cancellation has been requested.
789 */
790function throwIfCancellationRequested(config) {
791  if (config.cancelToken) {
792    config.cancelToken.throwIfRequested();
793  }
794
795  if (config.signal && config.signal.aborted) {
796    throw new Cancel('canceled');
797  }
798}
799
800/**
801 * Dispatch a request to the server using the configured adapter.
802 *
803 * @param {object} config The config that is to be used for the request
804 * @returns {Promise} The Promise to be fulfilled
805 */
806module.exports = function dispatchRequest(config) {
807  throwIfCancellationRequested(config);
808
809  // Ensure headers exist
810  config.headers = config.headers || {};
811
812  // Transform request data
813  config.data = transformData.call(
814    config,
815    config.data,
816    config.headers,
817    config.transformRequest
818  );
819
820  // Flatten headers
821  config.headers = utils.merge(
822    config.headers.common || {},
823    config.headers[config.method] || {},
824    config.headers
825  );
826
827  utils.forEach(
828    ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],
829    function cleanHeaderConfig(method) {
830      delete config.headers[method];
831    }
832  );
833
834  var adapter = config.adapter || defaults.adapter;
835
836  return adapter(config).then(function onAdapterResolution(response) {
837    throwIfCancellationRequested(config);
838
839    // Transform response data
840    response.data = transformData.call(
841      config,
842      response.data,
843      response.headers,
844      config.transformResponse
845    );
846
847    return response;
848  }, function onAdapterRejection(reason) {
849    if (!isCancel(reason)) {
850      throwIfCancellationRequested(config);
851
852      // Transform response data
853      if (reason && reason.response) {
854        reason.response.data = transformData.call(
855          config,
856          reason.response.data,
857          reason.response.headers,
858          config.transformResponse
859        );
860      }
861    }
862
863    return Promise.reject(reason);
864  });
865};
866
867
868/***/ }),
869
vendor: 1,399 bytes, lines 870-923
870/***/ "./node_modules/axios/lib/core/enhanceError.js":
871/*!*****************************************************!*\
872  !*** ./node_modules/axios/lib/core/enhanceError.js ***!
873  \*****************************************************/
874/***/ ((module) => {
875
876"use strict";
877
878
879/**
880 * Update an Error with the specified config, error code, and response.
881 *
882 * @param {Error} error The error to update.
883 * @param {Object} config The config.
884 * @param {string} [code] The error code (for example, 'ECONNABORTED').
885 * @param {Object} [request] The request.
886 * @param {Object} [response] The response.
887 * @returns {Error} The error.
888 */
889module.exports = function enhanceError(error, config, code, request, response) {
890  error.config = config;
891  if (code) {
892    error.code = code;
893  }
894
895  error.request = request;
896  error.response = response;
897  error.isAxiosError = true;
898
899  error.toJSON = function toJSON() {
900    return {
901      // Standard
902      message: this.message,
903      name: this.name,
904      // Microsoft
905      description: this.description,
906      number: this.number,
907      // Mozilla
908      fileName: this.fileName,
909      lineNumber: this.lineNumber,
910      columnNumber: this.columnNumber,
911      stack: this.stack,
912      // Axios
913      config: this.config,
914      code: this.code,
915      status: this.response && this.response.status ? this.response.status : null
916    };
917  };
918  return error;
919};
920
921
922/***/ }),
923
vendor: 3,558 bytes, lines 924-1033
924/***/ "./node_modules/axios/lib/core/mergeConfig.js":
925/*!****************************************************!*\
926  !*** ./node_modules/axios/lib/core/mergeConfig.js ***!
927  \****************************************************/
928/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
929
930"use strict";
931
932
933var utils = __webpack_require__(/*! ../utils */ "./node_modules/axios/lib/utils.js");
934
935/**
936 * Config-specific merge-function which creates a new config-object
937 * by merging two configuration objects together.
938 *
939 * @param {Object} config1
940 * @param {Object} config2
941 * @returns {Object} New object resulting from merging config2 to config1
942 */
943module.exports = function mergeConfig(config1, config2) {
944  // eslint-disable-next-line no-param-reassign
945  config2 = config2 || {};
946  var config = {};
947
948  function getMergedValue(target, source) {
949    if (utils.isPlainObject(target) && utils.isPlainObject(source)) {
950      return utils.merge(target, source);
951    } else if (utils.isPlainObject(source)) {
952      return utils.merge({}, source);
953    } else if (utils.isArray(source)) {
954      return source.slice();
955    }
956    return source;
957  }
958
959  // eslint-disable-next-line consistent-return
960  function mergeDeepProperties(prop) {
961    if (!utils.isUndefined(config2[prop])) {
962      return getMergedValue(config1[prop], config2[prop]);
963    } else if (!utils.isUndefined(config1[prop])) {
964      return getMergedValue(undefined, config1[prop]);
965    }
966  }
967
968  // eslint-disable-next-line consistent-return
969  function valueFromConfig2(prop) {
970    if (!utils.isUndefined(config2[prop])) {
971      return getMergedValue(undefined, config2[prop]);
972    }
973  }
974
975  // eslint-disable-next-line consistent-return
976  function defaultToConfig2(prop) {
977    if (!utils.isUndefined(config2[prop])) {
978      return getMergedValue(undefined, config2[prop]);
979    } else if (!utils.isUndefined(config1[prop])) {
980      return getMergedValue(undefined, config1[prop]);
981    }
982  }
983
984  // eslint-disable-next-line consistent-return
985  function mergeDirectKeys(prop) {
986    if (prop in config2) {
987      return getMergedValue(config1[prop], config2[prop]);
988    } else if (prop in config1) {
989      return getMergedValue(undefined, config1[prop]);
990    }
991  }
992
993  var mergeMap = {
994    'url': valueFromConfig2,
995    'method': valueFromConfig2,
996    'data': valueFromConfig2,
997    'baseURL': defaultToConfig2,
998    'transformRequest': defaultToConfig2,
999    'transformResponse': defaultToConfig2,
1000    'paramsSerializer': defaultToConfig2,
1001    'timeout': defaultToConfig2,
1002    'timeoutMessage': defaultToConfig2,
1003    'withCredentials': defaultToConfig2,
1004    'adapter': defaultToConfig2,
1005    'responseType': defaultToConfig2,
1006    'xsrfCookieName': defaultToConfig2,
1007    'xsrfHeaderName': defaultToConfig2,
1008    'onUploadProgress': defaultToConfig2,
1009    'onDownloadProgress': defaultToConfig2,
1010    'decompress': defaultToConfig2,
1011    'maxContentLength': defaultToConfig2,
1012    'maxBodyLength': defaultToConfig2,
1013    'transport': defaultToConfig2,
1014    'httpAgent': defaultToConfig2,
1015    'httpsAgent': defaultToConfig2,
1016    'cancelToken': defaultToConfig2,
1017    'socketPath': defaultToConfig2,
1018    'responseEncoding': defaultToConfig2,
1019    'validateStatus': mergeDirectKeys
1020  };
1021
1022  utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {
1023    var merge = mergeMap[prop] || mergeDeepProperties;
1024    var configValue = merge(prop);
1025    (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);
1026  });
1027
1028  return config;
1029};
1030
1031
1032/***/ }),
1033
vendor: 1,060 bytes, lines 1034-1069
1034/***/ "./node_modules/axios/lib/core/settle.js":
1035/*!***********************************************!*\
1036  !*** ./node_modules/axios/lib/core/settle.js ***!
1037  \***********************************************/
1038/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1039
1040"use strict";
1041
1042
1043var createError = __webpack_require__(/*! ./createError */ "./node_modules/axios/lib/core/createError.js");
1044
1045/**
1046 * Resolve or reject a Promise based on response status.
1047 *
1048 * @param {Function} resolve A function that resolves the promise.
1049 * @param {Function} reject A function that rejects the promise.
1050 * @param {object} response The response.
1051 */
1052module.exports = function settle(resolve, reject, response) {
1053  var validateStatus = response.config.validateStatus;
1054  if (!response.status || !validateStatus || validateStatus(response.status)) {
1055    resolve(response);
1056  } else {
1057    reject(createError(
1058      'Request failed with status code ' + response.status,
1059      response.config,
1060      null,
1061      response.request,
1062      response
1063    ));
1064  }
1065};
1066
1067
1068/***/ }),
1069
vendor: 1,066 bytes, lines 1070-1102
1070/***/ "./node_modules/axios/lib/core/transformData.js":
1071/*!******************************************************!*\
1072  !*** ./node_modules/axios/lib/core/transformData.js ***!
1073  \******************************************************/
1074/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1075
1076"use strict";
1077
1078
1079var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
1080var defaults = __webpack_require__(/*! ./../defaults */ "./node_modules/axios/lib/defaults.js");
1081
1082/**
1083 * Transform the data for a request or a response
1084 *
1085 * @param {Object|String} data The data to be transformed
1086 * @param {Array} headers The headers for the request or response
1087 * @param {Array|Function} fns A single function or Array of functions
1088 * @returns {*} The resulting transformed data
1089 */
1090module.exports = function transformData(data, headers, fns) {
1091  var context = this || defaults;
1092  /*eslint no-param-reassign:0*/
1093  utils.forEach(fns, function transform(fn) {
1094    data = fn.call(context, data, headers);
1095  });
1096
1097  return data;
1098};
1099
1100
1101/***/ }),
1102
vendor: 4,297 bytes, lines 1103-1248
1103/***/ "./node_modules/axios/lib/defaults.js":
1104/*!********************************************!*\
1105  !*** ./node_modules/axios/lib/defaults.js ***!
1106  \********************************************/
1107/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1108
1109"use strict";
1110/* provided dependency */ var process = __webpack_require__(/*! process/browser.js */ "./node_modules/process/browser.js");
1111
1112
1113var utils = __webpack_require__(/*! ./utils */ "./node_modules/axios/lib/utils.js");
1114var normalizeHeaderName = __webpack_require__(/*! ./helpers/normalizeHeaderName */ "./node_modules/axios/lib/helpers/normalizeHeaderName.js");
1115var enhanceError = __webpack_require__(/*! ./core/enhanceError */ "./node_modules/axios/lib/core/enhanceError.js");
1116
1117var DEFAULT_CONTENT_TYPE = {
1118  'Content-Type': 'application/x-www-form-urlencoded'
1119};
1120
1121function setContentTypeIfUnset(headers, value) {
1122  if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {
1123    headers['Content-Type'] = value;
1124  }
1125}
1126
1127function getDefaultAdapter() {
1128  var adapter;
1129  if (typeof XMLHttpRequest !== 'undefined') {
1130    // For browsers use XHR adapter
1131    adapter = __webpack_require__(/*! ./adapters/xhr */ "./node_modules/axios/lib/adapters/xhr.js");
1132  } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {
1133    // For node use HTTP adapter
1134    adapter = __webpack_require__(/*! ./adapters/http */ "./node_modules/axios/lib/adapters/xhr.js");
1135  }
1136  return adapter;
1137}
1138
1139function stringifySafely(rawValue, parser, encoder) {
1140  if (utils.isString(rawValue)) {
1141    try {
1142      (parser || JSON.parse)(rawValue);
1143      return utils.trim(rawValue);
1144    } catch (e) {
1145      if (e.name !== 'SyntaxError') {
1146        throw e;
1147      }
1148    }
1149  }
1150
1151  return (encoder || JSON.stringify)(rawValue);
1152}
1153
1154var defaults = {
1155
1156  transitional: {
1157    silentJSONParsing: true,
1158    forcedJSONParsing: true,
1159    clarifyTimeoutError: false
1160  },
1161
1162  adapter: getDefaultAdapter(),
1163
1164  transformRequest: [function transformRequest(data, headers) {
1165    normalizeHeaderName(headers, 'Accept');
1166    normalizeHeaderName(headers, 'Content-Type');
1167
1168    if (utils.isFormData(data) ||
1169      utils.isArrayBuffer(data) ||
1170      utils.isBuffer(data) ||
1171      utils.isStream(data) ||
1172      utils.isFile(data) ||
1173      utils.isBlob(data)
1174    ) {
1175      return data;
1176    }
1177    if (utils.isArrayBufferView(data)) {
1178      return data.buffer;
1179    }
1180    if (utils.isURLSearchParams(data)) {
1181      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
1182      return data.toString();
1183    }
1184    if (utils.isObject(data) || (headers && headers['Content-Type'] === 'application/json')) {
1185      setContentTypeIfUnset(headers, 'application/json');
1186      return stringifySafely(data);
1187    }
1188    return data;
1189  }],
1190
1191  transformResponse: [function transformResponse(data) {
1192    var transitional = this.transitional || defaults.transitional;
1193    var silentJSONParsing = transitional && transitional.silentJSONParsing;
1194    var forcedJSONParsing = transitional && transitional.forcedJSONParsing;
1195    var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';
1196
1197    if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {
1198      try {
1199        return JSON.parse(data);
1200      } catch (e) {
1201        if (strictJSONParsing) {
1202          if (e.name === 'SyntaxError') {
1203            throw enhanceError(e, this, 'E_JSON_PARSE');
1204          }
1205          throw e;
1206        }
1207      }
1208    }
1209
1210    return data;
1211  }],
1212
1213  /**
1214   * A timeout in milliseconds to abort a request. If set to 0 (default) a
1215   * timeout is not created.
1216   */
1217  timeout: 0,
1218
1219  xsrfCookieName: 'XSRF-TOKEN',
1220  xsrfHeaderName: 'X-XSRF-TOKEN',
1221
1222  maxContentLength: -1,
1223  maxBodyLength: -1,
1224
1225  validateStatus: function validateStatus(status) {
1226    return status >= 200 && status < 300;
1227  },
1228
1229  headers: {
1230    common: {
1231      'Accept': 'application/json, text/plain, */*'
1232    }
1233  }
1234};
1235
1236utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {
1237  defaults.headers[method] = {};
1238});
1239
1240utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
1241  defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);
1242});
1243
1244module.exports = defaults;
1245
1246
1247/***/ }),
1248
vendor: 273 bytes, lines 1249-1260
1249/***/ "./node_modules/axios/lib/env/data.js":
1250/*!********************************************!*\
1251  !*** ./node_modules/axios/lib/env/data.js ***!
1252  \********************************************/
1253/***/ ((module) => {
1254
1255module.exports = {
1256  "version": "0.25.0"
1257};
1258
1259/***/ }),
1260
vendor: 503 bytes, lines 1261-1282
1261/***/ "./node_modules/axios/lib/helpers/bind.js":
1262/*!************************************************!*\
1263  !*** ./node_modules/axios/lib/helpers/bind.js ***!
1264  \************************************************/
1265/***/ ((module) => {
1266
1267"use strict";
1268
1269
1270module.exports = function bind(fn, thisArg) {
1271  return function wrap() {
1272    var args = new Array(arguments.length);
1273    for (var i = 0; i < args.length; i++) {
1274      args[i] = arguments[i];
1275    }
1276    return fn.apply(thisArg, args);
1277  };
1278};
1279
1280
1281/***/ }),
1282
vendor: 2,007 bytes, lines 1283-1363
1283/***/ "./node_modules/axios/lib/helpers/buildURL.js":
1284/*!****************************************************!*\
1285  !*** ./node_modules/axios/lib/helpers/buildURL.js ***!
1286  \****************************************************/
1287/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1288
1289"use strict";
1290
1291
1292var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
1293
1294function encode(val) {
1295  return encodeURIComponent(val).
1296    replace(/%3A/gi, ':').
1297    replace(/%24/g, '$').
1298    replace(/%2C/gi, ',').
1299    replace(/%20/g, '+').
1300    replace(/%5B/gi, '[').
1301    replace(/%5D/gi, ']');
1302}
1303
1304/**
1305 * Build a URL by appending params to the end
1306 *
1307 * @param {string} url The base of the url (e.g., http://www.google.com)
1308 * @param {object} [params] The params to be appended
1309 * @returns {string} The formatted url
1310 */
1311module.exports = function buildURL(url, params, paramsSerializer) {
1312  /*eslint no-param-reassign:0*/
1313  if (!params) {
1314    return url;
1315  }
1316
1317  var serializedParams;
1318  if (paramsSerializer) {
1319    serializedParams = paramsSerializer(params);
1320  } else if (utils.isURLSearchParams(params)) {
1321    serializedParams = params.toString();
1322  } else {
1323    var parts = [];
1324
1325    utils.forEach(params, function serialize(val, key) {
1326      if (val === null || typeof val === 'undefined') {
1327        return;
1328      }
1329
1330      if (utils.isArray(val)) {
1331        key = key + '[]';
1332      } else {
1333        val = [val];
1334      }
1335
1336      utils.forEach(val, function parseValue(v) {
1337        if (utils.isDate(v)) {
1338          v = v.toISOString();
1339        } else if (utils.isObject(v)) {
1340          v = JSON.stringify(v);
1341        }
1342        parts.push(encode(key) + '=' + encode(v));
1343      });
1344    });
1345
1346    serializedParams = parts.join('&');
1347  }
1348
1349  if (serializedParams) {
1350    var hashmarkIndex = url.indexOf('#');
1351    if (hashmarkIndex !== -1) {
1352      url = url.slice(0, hashmarkIndex);
1353    }
1354
1355    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;
1356  }
1357
1358  return url;
1359};
1360
1361
1362/***/ }),
1363
vendor: 655 bytes, lines 1364-1388
1364/***/ "./node_modules/axios/lib/helpers/combineURLs.js":
1365/*!*******************************************************!*\
1366  !*** ./node_modules/axios/lib/helpers/combineURLs.js ***!
1367  \*******************************************************/
1368/***/ ((module) => {
1369
1370"use strict";
1371
1372
1373/**
1374 * Creates a new URL by combining the specified URLs
1375 *
1376 * @param {string} baseURL The base URL
1377 * @param {string} relativeURL The relative URL
1378 * @returns {string} The combined URL
1379 */
1380module.exports = function combineURLs(baseURL, relativeURL) {
1381  return relativeURL
1382    ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '')
1383    : baseURL;
1384};
1385
1386
1387/***/ }),
1388
vendor: 1,794 bytes, lines 1389-1452
1389/***/ "./node_modules/axios/lib/helpers/cookies.js":
1390/*!***************************************************!*\
1391  !*** ./node_modules/axios/lib/helpers/cookies.js ***!
1392  \***************************************************/
1393/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1394
1395"use strict";
1396
1397
1398var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
1399
1400module.exports = (
1401  utils.isStandardBrowserEnv() ?
1402
1403  // Standard browser envs support document.cookie
1404    (function standardBrowserEnv() {
1405      return {
1406        write: function write(name, value, expires, path, domain, secure) {
1407          var cookie = [];
1408          cookie.push(name + '=' + encodeURIComponent(value));
1409
1410          if (utils.isNumber(expires)) {
1411            cookie.push('expires=' + new Date(expires).toGMTString());
1412          }
1413
1414          if (utils.isString(path)) {
1415            cookie.push('path=' + path);
1416          }
1417
1418          if (utils.isString(domain)) {
1419            cookie.push('domain=' + domain);
1420          }
1421
1422          if (secure === true) {
1423            cookie.push('secure');
1424          }
1425
1426          document.cookie = cookie.join('; ');
1427        },
1428
1429        read: function read(name) {
1430          var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)'));
1431          return (match ? decodeURIComponent(match[3]) : null);
1432        },
1433
1434        remove: function remove(name) {
1435          this.write(name, '', Date.now() - 86400000);
1436        }
1437      };
1438    })() :
1439
1440  // Non standard browser env (web workers, react-native) lack needed support.
1441    (function nonStandardBrowserEnv() {
1442      return {
1443        write: function write() {},
1444        read: function read() { return null; },
1445        remove: function remove() {}
1446      };
1447    })()
1448);
1449
1450
1451/***/ }),
1452
vendor: 844 bytes, lines 1453-1477
1453/***/ "./node_modules/axios/lib/helpers/isAbsoluteURL.js":
1454/*!*********************************************************!*\
1455  !*** ./node_modules/axios/lib/helpers/isAbsoluteURL.js ***!
1456  \*********************************************************/
1457/***/ ((module) => {
1458
1459"use strict";
1460
1461
1462/**
1463 * Determines whether the specified URL is absolute
1464 *
1465 * @param {string} url The URL to test
1466 * @returns {boolean} True if the specified URL is absolute, otherwise false
1467 */
1468module.exports = function isAbsoluteURL(url) {
1469  // A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL).
1470  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
1471  // by any combination of letters, digits, plus, period, or hyphen.
1472  return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url);
1473};
1474
1475
1476/***/ }),
1477
vendor: 752 bytes, lines 1478-1501
1478/***/ "./node_modules/axios/lib/helpers/isAxiosError.js":
1479/*!********************************************************!*\
1480  !*** ./node_modules/axios/lib/helpers/isAxiosError.js ***!
1481  \********************************************************/
1482/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1483
1484"use strict";
1485
1486
1487var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
1488
1489/**
1490 * Determines whether the payload is an error thrown by Axios
1491 *
1492 * @param {*} payload The value to test
1493 * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false
1494 */
1495module.exports = function isAxiosError(payload) {
1496  return utils.isObject(payload) && (payload.isAxiosError === true);
1497};
1498
1499
1500/***/ }),
1501
vendor: 2,696 bytes, lines 1502-1580
1502/***/ "./node_modules/axios/lib/helpers/isURLSameOrigin.js":
1503/*!***********************************************************!*\
1504  !*** ./node_modules/axios/lib/helpers/isURLSameOrigin.js ***!
1505  \***********************************************************/
1506/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1507
1508"use strict";
1509
1510
1511var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
1512
1513module.exports = (
1514  utils.isStandardBrowserEnv() ?
1515
1516  // Standard browser envs have full support of the APIs needed to test
1517  // whether the request URL is of the same origin as current location.
1518    (function standardBrowserEnv() {
1519      var msie = /(msie|trident)/i.test(navigator.userAgent);
1520      var urlParsingNode = document.createElement('a');
1521      var originURL;
1522
1523      /**
1524    * Parse a URL to discover it's components
1525    *
1526    * @param {String} url The URL to be parsed
1527    * @returns {Object}
1528    */
1529      function resolveURL(url) {
1530        var href = url;
1531
1532        if (msie) {
1533        // IE needs attribute set twice to normalize properties
1534          urlParsingNode.setAttribute('href', href);
1535          href = urlParsingNode.href;
1536        }
1537
1538        urlParsingNode.setAttribute('href', href);
1539
1540        // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils
1541        return {
1542          href: urlParsingNode.href,
1543          protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
1544          host: urlParsingNode.host,
1545          search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
1546          hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
1547          hostname: urlParsingNode.hostname,
1548          port: urlParsingNode.port,
1549          pathname: (urlParsingNode.pathname.charAt(0) === '/') ?
1550            urlParsingNode.pathname :
1551            '/' + urlParsingNode.pathname
1552        };
1553      }
1554
1555      originURL = resolveURL(window.location.href);
1556
1557      /**
1558    * Determine if a URL shares the same origin as the current location
1559    *
1560    * @param {String} requestURL The URL to test
1561    * @returns {boolean} True if URL shares the same origin, otherwise false
1562    */
1563      return function isURLSameOrigin(requestURL) {
1564        var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;
1565        return (parsed.protocol === originURL.protocol &&
1566            parsed.host === originURL.host);
1567      };
1568    })() :
1569
1570  // Non standard browser envs (web workers, react-native) lack needed support.
1571    (function nonStandardBrowserEnv() {
1572      return function isURLSameOrigin() {
1573        return true;
1574      };
1575    })()
1576);
1577
1578
1579/***/ }),
1580
vendor: 764 bytes, lines 1581-1603
1581/***/ "./node_modules/axios/lib/helpers/normalizeHeaderName.js":
1582/*!***************************************************************!*\
1583  !*** ./node_modules/axios/lib/helpers/normalizeHeaderName.js ***!
1584  \***************************************************************/
1585/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1586
1587"use strict";
1588
1589
1590var utils = __webpack_require__(/*! ../utils */ "./node_modules/axios/lib/utils.js");
1591
1592module.exports = function normalizeHeaderName(headers, normalizedName) {
1593  utils.forEach(headers, function processHeader(value, name) {
1594    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {
1595      headers[normalizedName] = value;
1596      delete headers[name];
1597    }
1598  });
1599};
1600
1601
1602/***/ }),
1603
vendor: 1,772 bytes, lines 1604-1667
1604/***/ "./node_modules/axios/lib/helpers/parseHeaders.js":
1605/*!********************************************************!*\
1606  !*** ./node_modules/axios/lib/helpers/parseHeaders.js ***!
1607  \********************************************************/
1608/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1609
1610"use strict";
1611
1612
1613var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
1614
1615// Headers whose duplicates are ignored by node
1616// c.f. https://nodejs.org/api/http.html#http_message_headers
1617var ignoreDuplicateOf = [
1618  'age', 'authorization', 'content-length', 'content-type', 'etag',
1619  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',
1620  'last-modified', 'location', 'max-forwards', 'proxy-authorization',
1621  'referer', 'retry-after', 'user-agent'
1622];
1623
1624/**
1625 * Parse headers into an object
1626 *
1627 * ```
1628 * Date: Wed, 27 Aug 2014 08:58:49 GMT
1629 * Content-Type: application/json
1630 * Connection: keep-alive
1631 * Transfer-Encoding: chunked
1632 * ```
1633 *
1634 * @param {String} headers Headers needing to be parsed
1635 * @returns {Object} Headers parsed into an object
1636 */
1637module.exports = function parseHeaders(headers) {
1638  var parsed = {};
1639  var key;
1640  var val;
1641  var i;
1642
1643  if (!headers) { return parsed; }
1644
1645  utils.forEach(headers.split('\n'), function parser(line) {
1646    i = line.indexOf(':');
1647    key = utils.trim(line.substr(0, i)).toLowerCase();
1648    val = utils.trim(line.substr(i + 1));
1649
1650    if (key) {
1651      if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {
1652        return;
1653      }
1654      if (key === 'set-cookie') {
1655        parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);
1656      } else {
1657        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
1658      }
1659    }
1660  });
1661
1662  return parsed;
1663};
1664
1665
1666/***/ }),
1667
vendor: 819 bytes, lines 1668-1705
1668/***/ "./node_modules/axios/lib/helpers/spread.js":
1669/*!**************************************************!*\
1670  !*** ./node_modules/axios/lib/helpers/spread.js ***!
1671  \**************************************************/
1672/***/ ((module) => {
1673
1674"use strict";
1675
1676
1677/**
1678 * Syntactic sugar for invoking a function and expanding an array for arguments.
1679 *
1680 * Common use case would be to use `Function.prototype.apply`.
1681 *
1682 *  ```js
1683 *  function f(x, y, z) {}
1684 *  var args = [1, 2, 3];
1685 *  f.apply(null, args);
1686 *  ```
1687 *
1688 * With `spread` this example can be re-written.
1689 *
1690 *  ```js
1691 *  spread(function(x, y, z) {})([1, 2, 3]);
1692 *  ```
1693 *
1694 * @param {Function} callback
1695 * @returns {Function}
1696 */
1697module.exports = function spread(callback) {
1698  return function wrap(arr) {
1699    return callback.apply(null, arr);
1700  };
1701};
1702
1703
1704/***/ }),
1705
vendor: 2,719 bytes, lines 1706-1798
1706/***/ "./node_modules/axios/lib/helpers/validator.js":
1707/*!*****************************************************!*\
1708  !*** ./node_modules/axios/lib/helpers/validator.js ***!
1709  \*****************************************************/
1710/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1711
1712"use strict";
1713
1714
1715var VERSION = (__webpack_require__(/*! ../env/data */ "./node_modules/axios/lib/env/data.js").version);
1716
1717var validators = {};
1718
1719// eslint-disable-next-line func-names
1720['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {
1721  validators[type] = function validator(thing) {
1722    return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;
1723  };
1724});
1725
1726var deprecatedWarnings = {};
1727
1728/**
1729 * Transitional option validator
1730 * @param {function|boolean?} validator - set to false if the transitional option has been removed
1731 * @param {string?} version - deprecated version / removed since version
1732 * @param {string?} message - some message with additional info
1733 * @returns {function}
1734 */
1735validators.transitional = function transitional(validator, version, message) {
1736  function formatMessage(opt, desc) {
1737    return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : '');
1738  }
1739
1740  // eslint-disable-next-line func-names
1741  return function(value, opt, opts) {
1742    if (validator === false) {
1743      throw new Error(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')));
1744    }
1745
1746    if (version && !deprecatedWarnings[opt]) {
1747      deprecatedWarnings[opt] = true;
1748      // eslint-disable-next-line no-console
1749      console.warn(
1750        formatMessage(
1751          opt,
1752          ' has been deprecated since v' + version + ' and will be removed in the near future'
1753        )
1754      );
1755    }
1756
1757    return validator ? validator(value, opt, opts) : true;
1758  };
1759};
1760
1761/**
1762 * Assert object's properties type
1763 * @param {object} options
1764 * @param {object} schema
1765 * @param {boolean?} allowUnknown
1766 */
1767
1768function assertOptions(options, schema, allowUnknown) {
1769  if (typeof options !== 'object') {
1770    throw new TypeError('options must be an object');
1771  }
1772  var keys = Object.keys(options);
1773  var i = keys.length;
1774  while (i-- > 0) {
1775    var opt = keys[i];
1776    var validator = schema[opt];
1777    if (validator) {
1778      var value = options[opt];
1779      var result = value === undefined || validator(value, opt, options);
1780      if (result !== true) {
1781        throw new TypeError('option ' + opt + ' must be ' + result);
1782      }
1783      continue;
1784    }
1785    if (allowUnknown !== true) {
1786      throw Error('Unknown option ' + opt);
1787    }
1788  }
1789}
1790
1791module.exports = {
1792  assertOptions: assertOptions,
1793  validators: validators
1794};
1795
1796
1797/***/ }),
1798
vendor: 9,185 bytes, lines 1799-2158
1799/***/ "./node_modules/axios/lib/utils.js":
1800/*!*****************************************!*\
1801  !*** ./node_modules/axios/lib/utils.js ***!
1802  \*****************************************/
1803/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1804
1805"use strict";
1806
1807
1808var bind = __webpack_require__(/*! ./helpers/bind */ "./node_modules/axios/lib/helpers/bind.js");
1809
1810// utils is a library of generic helper functions non-specific to axios
1811
1812var toString = Object.prototype.toString;
1813
1814/**
1815 * Determine if a value is an Array
1816 *
1817 * @param {Object} val The value to test
1818 * @returns {boolean} True if value is an Array, otherwise false
1819 */
1820function isArray(val) {
1821  return Array.isArray(val);
1822}
1823
1824/**
1825 * Determine if a value is undefined
1826 *
1827 * @param {Object} val The value to test
1828 * @returns {boolean} True if the value is undefined, otherwise false
1829 */
1830function isUndefined(val) {
1831  return typeof val === 'undefined';
1832}
1833
1834/**
1835 * Determine if a value is a Buffer
1836 *
1837 * @param {Object} val The value to test
1838 * @returns {boolean} True if value is a Buffer, otherwise false
1839 */
1840function isBuffer(val) {
1841  return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)
1842    && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);
1843}
1844
1845/**
1846 * Determine if a value is an ArrayBuffer
1847 *
1848 * @param {Object} val The value to test
1849 * @returns {boolean} True if value is an ArrayBuffer, otherwise false
1850 */
1851function isArrayBuffer(val) {
1852  return toString.call(val) === '[object ArrayBuffer]';
1853}
1854
1855/**
1856 * Determine if a value is a FormData
1857 *
1858 * @param {Object} val The value to test
1859 * @returns {boolean} True if value is an FormData, otherwise false
1860 */
1861function isFormData(val) {
1862  return toString.call(val) === '[object FormData]';
1863}
1864
1865/**
1866 * Determine if a value is a view on an ArrayBuffer
1867 *
1868 * @param {Object} val The value to test
1869 * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false
1870 */
1871function isArrayBufferView(val) {
1872  var result;
1873  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {
1874    result = ArrayBuffer.isView(val);
1875  } else {
1876    result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));
1877  }
1878  return result;
1879}
1880
1881/**
1882 * Determine if a value is a String
1883 *
1884 * @param {Object} val The value to test
1885 * @returns {boolean} True if value is a String, otherwise false
1886 */
1887function isString(val) {
1888  return typeof val === 'string';
1889}
1890
1891/**
1892 * Determine if a value is a Number
1893 *
1894 * @param {Object} val The value to test
1895 * @returns {boolean} True if value is a Number, otherwise false
1896 */
1897function isNumber(val) {
1898  return typeof val === 'number';
1899}
1900
1901/**
1902 * Determine if a value is an Object
1903 *
1904 * @param {Object} val The value to test
1905 * @returns {boolean} True if value is an Object, otherwise false
1906 */
1907function isObject(val) {
1908  return val !== null && typeof val === 'object';
1909}
1910
1911/**
1912 * Determine if a value is a plain Object
1913 *
1914 * @param {Object} val The value to test
1915 * @return {boolean} True if value is a plain Object, otherwise false
1916 */
1917function isPlainObject(val) {
1918  if (toString.call(val) !== '[object Object]') {
1919    return false;
1920  }
1921
1922  var prototype = Object.getPrototypeOf(val);
1923  return prototype === null || prototype === Object.prototype;
1924}
1925
1926/**
1927 * Determine if a value is a Date
1928 *
1929 * @param {Object} val The value to test
1930 * @returns {boolean} True if value is a Date, otherwise false
1931 */
1932function isDate(val) {
1933  return toString.call(val) === '[object Date]';
1934}
1935
1936/**
1937 * Determine if a value is a File
1938 *
1939 * @param {Object} val The value to test
1940 * @returns {boolean} True if value is a File, otherwise false
1941 */
1942function isFile(val) {
1943  return toString.call(val) === '[object File]';
1944}
1945
1946/**
1947 * Determine if a value is a Blob
1948 *
1949 * @param {Object} val The value to test
1950 * @returns {boolean} True if value is a Blob, otherwise false
1951 */
1952function isBlob(val) {
1953  return toString.call(val) === '[object Blob]';
1954}
1955
1956/**
1957 * Determine if a value is a Function
1958 *
1959 * @param {Object} val The value to test
1960 * @returns {boolean} True if value is a Function, otherwise false
1961 */
1962function isFunction(val) {
1963  return toString.call(val) === '[object Function]';
1964}
1965
1966/**
1967 * Determine if a value is a Stream
1968 *
1969 * @param {Object} val The value to test
1970 * @returns {boolean} True if value is a Stream, otherwise false
1971 */
1972function isStream(val) {
1973  return isObject(val) && isFunction(val.pipe);
1974}
1975
1976/**
1977 * Determine if a value is a URLSearchParams object
1978 *
1979 * @param {Object} val The value to test
1980 * @returns {boolean} True if value is a URLSearchParams object, otherwise false
1981 */
1982function isURLSearchParams(val) {
1983  return toString.call(val) === '[object URLSearchParams]';
1984}
1985
1986/**
1987 * Trim excess whitespace off the beginning and end of a string
1988 *
1989 * @param {String} str The String to trim
1990 * @returns {String} The String freed of excess whitespace
1991 */
1992function trim(str) {
1993  return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, '');
1994}
1995
1996/**
1997 * Determine if we're running in a standard browser environment
1998 *
1999 * This allows axios to run in a web worker, and react-native.
2000 * Both environments support XMLHttpRequest, but not fully standard globals.
2001 *
2002 * web workers:
2003 *  typeof window -> undefined
2004 *  typeof document -> undefined
2005 *
2006 * react-native:
2007 *  navigator.product -> 'ReactNative'
2008 * nativescript
2009 *  navigator.product -> 'NativeScript' or 'NS'
2010 */
2011function isStandardBrowserEnv() {
2012  if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||
2013                                           navigator.product === 'NativeScript' ||
2014                                           navigator.product === 'NS')) {
2015    return false;
2016  }
2017  return (
2018    typeof window !== 'undefined' &&
2019    typeof document !== 'undefined'
2020  );
2021}
2022
2023/**
2024 * Iterate over an Array or an Object invoking a function for each item.
2025 *
2026 * If `obj` is an Array callback will be called passing
2027 * the value, index, and complete array for each item.
2028 *
2029 * If 'obj' is an Object callback will be called passing
2030 * the value, key, and complete object for each property.
2031 *
2032 * @param {Object|Array} obj The object to iterate
2033 * @param {Function} fn The callback to invoke for each item
2034 */
2035function forEach(obj, fn) {
2036  // Don't bother if no value provided
2037  if (obj === null || typeof obj === 'undefined') {
2038    return;
2039  }
2040
2041  // Force an array if not already something iterable
2042  if (typeof obj !== 'object') {
2043    /*eslint no-param-reassign:0*/
2044    obj = [obj];
2045  }
2046
2047  if (isArray(obj)) {
2048    // Iterate over array values
2049    for (var i = 0, l = obj.length; i < l; i++) {
2050      fn.call(null, obj[i], i, obj);
2051    }
2052  } else {
2053    // Iterate over object keys
2054    for (var key in obj) {
2055      if (Object.prototype.hasOwnProperty.call(obj, key)) {
2056        fn.call(null, obj[key], key, obj);
2057      }
2058    }
2059  }
2060}
2061
2062/**
2063 * Accepts varargs expecting each argument to be an object, then
2064 * immutably merges the properties of each object and returns result.
2065 *
2066 * When multiple objects contain the same key the later object in
2067 * the arguments list will take precedence.
2068 *
2069 * Example:
2070 *
2071 * ```js
2072 * var result = merge({foo: 123}, {foo: 456});
2073 * console.log(result.foo); // outputs 456
2074 * ```
2075 *
2076 * @param {Object} obj1 Object to merge
2077 * @returns {Object} Result of all merge properties
2078 */
2079function merge(/* obj1, obj2, obj3, ... */) {
2080  var result = {};
2081  function assignValue(val, key) {
2082    if (isPlainObject(result[key]) && isPlainObject(val)) {
2083      result[key] = merge(result[key], val);
2084    } else if (isPlainObject(val)) {
2085      result[key] = merge({}, val);
2086    } else if (isArray(val)) {
2087      result[key] = val.slice();
2088    } else {
2089      result[key] = val;
2090    }
2091  }
2092
2093  for (var i = 0, l = arguments.length; i < l; i++) {
2094    forEach(arguments[i], assignValue);
2095  }
2096  return result;
2097}
2098
2099/**
2100 * Extends object a by mutably adding to it the properties of object b.
2101 *
2102 * @param {Object} a The object to be extended
2103 * @param {Object} b The object to copy properties from
2104 * @param {Object} thisArg The object to bind function to
2105 * @return {Object} The resulting value of object a
2106 */
2107function extend(a, b, thisArg) {
2108  forEach(b, function assignValue(val, key) {
2109    if (thisArg && typeof val === 'function') {
2110      a[key] = bind(val, thisArg);
2111    } else {
2112      a[key] = val;
2113    }
2114  });
2115  return a;
2116}
2117
2118/**
2119 * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)
2120 *
2121 * @param {string} content with BOM
2122 * @return {string} content value without BOM
2123 */
2124function stripBOM(content) {
2125  if (content.charCodeAt(0) === 0xFEFF) {
2126    content = content.slice(1);
2127  }
2128  return content;
2129}
2130
2131module.exports = {
2132  isArray: isArray,
2133  isArrayBuffer: isArrayBuffer,
2134  isBuffer: isBuffer,
2135  isFormData: isFormData,
2136  isArrayBufferView: isArrayBufferView,
2137  isString: isString,
2138  isNumber: isNumber,
2139  isObject: isObject,
2140  isPlainObject: isPlainObject,
2141  isUndefined: isUndefined,
2142  isDate: isDate,
2143  isFile: isFile,
2144  isBlob: isBlob,
2145  isFunction: isFunction,
2146  isStream: isStream,
2147  isURLSearchParams: isURLSearchParams,
2148  isStandardBrowserEnv: isStandardBrowserEnv,
2149  forEach: forEach,
2150  merge: merge,
2151  extend: extend,
2152  trim: trim,
2153  stripBOM: stripBOM
2154};
2155
2156
2157/***/ }),
2158
2159/***/ "./resources/assets/js/general/axios-global.js":
2160/*!*****************************************************!*\
2161  !*** ./resources/assets/js/general/axios-global.js ***!
2162  \*****************************************************/
2163/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2164
2165"use strict";
2166__webpack_require__.r(__webpack_exports__);
2167/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! axios */ "./node_modules/axios/index.js");
2168/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_0__);
2169
2170window.axios = (axios__WEBPACK_IMPORTED_MODULE_0___default());
2171window.axios.defaults.headers.common = {
2172  'X-Requested-With': 'XMLHttpRequest'
2173};
2174var token = document.head.querySelector('meta[name="work-script"]');
2175if (token) {
2176  window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
2177} else {
2178  console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
2179}
2180
2181/***/ }),
2182
2183/***/ "./resources/assets/js/general/jquery-global.js":
2184/*!******************************************************!*\
2185  !*** ./resources/assets/js/general/jquery-global.js ***!
2186  \******************************************************/
2187/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2188
2189"use strict";
2190__webpack_require__.r(__webpack_exports__);
2191/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");
2192/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);
2193// jquery-global.js
2194
2195window.jQuery = (jquery__WEBPACK_IMPORTED_MODULE_0___default());
2196window.$ = (jquery__WEBPACK_IMPORTED_MODULE_0___default());
2197
2198/***/ }),
2199
2200/***/ "./resources/assets/js/general/vue-global.js":
2201/*!***************************************************!*\
2202  !*** ./resources/assets/js/general/vue-global.js ***!
2203  \***************************************************/
2204/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2205
2206"use strict";
2207__webpack_require__.r(__webpack_exports__);
2208/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm.js");
2209
2210window.Vue = vue__WEBPACK_IMPORTED_MODULE_0__["default"];
2211vue__WEBPACK_IMPORTED_MODULE_0__["default"].directive('clickoutside', {
2212  inserted: function inserted(el, binding, vnode) {
2213    // assign event to the element
2214    el.clickOutsideEvent = function (event) {
2215      // here we check if the click event is outside the element and it's children
2216      if (!(el == event.target || el.contains(event.target))) {
2217        // if clicked outside, call the provided method
2218        // vnode.context[binding.expression](event)
2219      }
2220    };
2221    // register click and touch events
2222    document.body.addEventListener('click', el.clickOutsideEvent);
2223    document.body.addEventListener('touchstart', el.clickOutsideEvent);
2224  },
2225  unbind: function unbind(el) {
2226    // unregister click and touch events before the element is unmounted
2227    document.body.removeEventListener('click', el.clickOutsideEvent);
2228    document.body.removeEventListener('touchstart', el.clickOutsideEvent);
2229  },
2230  stopProp: function stopProp(event) {
2231    event.stopPropagation();
2232  }
2233});
2234
2235/***/ }),
2236
2237/***/ "./resources/assets/js/museum/utilities/load.js":
2238/*!******************************************************!*\
2239  !*** ./resources/assets/js/museum/utilities/load.js ***!
2240  \******************************************************/
2241/***/ (() => {
2242
2243$(document).ready(function () {
2244  setTimeout(function () {
2245    $("body").addClass("body--loaded");
2246  }, 500);
2247  $("body").on('click', '.js-page-transition', function (e) {
2248    e.preventDefault();
2249    var url = $(this).attr('href');
2250    $("body").addClass("body--leave");
2251    setTimeout(function () {
2252      window.location.href = url;
2253    }, 300);
2254  });
2255});
2256
2257/***/ }),
2258
2259/***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=style&index=0&id=35989352&lang=css":
2260/*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
2261  !*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=style&index=0&id=35989352&lang=css ***!
2262  \*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
2263/***/ ((module, __webpack_exports__, __webpack_require__) => {
2264
2265"use strict";
2266__webpack_require__.r(__webpack_exports__);
2267/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2268/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
2269/* harmony export */ });
2270/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
2271/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);
2272// Imports
2273
2274var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});
2275// Module
2276___CSS_LOADER_EXPORT___.push([module.id, "\n.v-spinner\n{\n/*\t  font-size: 10px; \n\n    width: 60px;\n    height: 40px;*/\n    /*margin: 25px auto;*/\n    text-align: center;\n}\n.v-spinner .v-clip\n{\n    animation: v-clipDelay 0.75s 0s infinite linear;\n\t   animation-fill-mode: both;\n\n    display: inline-block;\n}\n@keyframes v-clipDelay\n{\n0%\n    {\n        transform: rotate(0deg) scale(1);\n}\n50%\n    {\n        transform: rotate(180deg) scale(0.8);\n}\n100%\n    {\n        transform: rotate(360deg) scale(1);\n}\n}\n", ""]);
2277// Exports
2278/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
2279
2280
2281/***/ }),
2282
vendor: 1,872 bytes, lines 2283-2358
2283/***/ "./node_modules/css-loader/dist/runtime/api.js":
2284/*!*****************************************************!*\
2285  !*** ./node_modules/css-loader/dist/runtime/api.js ***!
2286  \*****************************************************/
2287/***/ ((module) => {
2288
2289"use strict";
2290
2291
2292/*
2293  MIT License http://www.opensource.org/licenses/mit-license.php
2294  Author Tobias Koppers @sokra
2295*/
2296// css base code, injected by the css-loader
2297// eslint-disable-next-line func-names
2298module.exports = function (cssWithMappingToString) {
2299  var list = []; // return the list of modules as css string
2300
2301  list.toString = function toString() {
2302    return this.map(function (item) {
2303      var content = cssWithMappingToString(item);
2304
2305      if (item[2]) {
2306        return "@media ".concat(item[2], " {").concat(content, "}");
2307      }
2308
2309      return content;
2310    }).join("");
2311  }; // import a list of modules into the list
2312  // eslint-disable-next-line func-names
2313
2314
2315  list.i = function (modules, mediaQuery, dedupe) {
2316    if (typeof modules === "string") {
2317      // eslint-disable-next-line no-param-reassign
2318      modules = [[null, modules, ""]];
2319    }
2320
2321    var alreadyImportedModules = {};
2322
2323    if (dedupe) {
2324      for (var i = 0; i < this.length; i++) {
2325        // eslint-disable-next-line prefer-destructuring
2326        var id = this[i][0];
2327
2328        if (id != null) {
2329          alreadyImportedModules[id] = true;
2330        }
2331      }
2332    }
2333
2334    for (var _i = 0; _i < modules.length; _i++) {
2335      var item = [].concat(modules[_i]);
2336
2337      if (dedupe && alreadyImportedModules[item[0]]) {
2338        // eslint-disable-next-line no-continue
2339        continue;
2340      }
2341
2342      if (mediaQuery) {
2343        if (!item[2]) {
2344          item[2] = mediaQuery;
2345        } else {
2346          item[2] = "".concat(mediaQuery, " and ").concat(item[2]);
2347        }
2348      }
2349
2350      list.push(item);
2351    }
2352  };
2353
2354  return list;
2355};
2356
2357/***/ }),
2358
vendor: 285,755 bytes, lines 2359-13085
2359/***/ "./node_modules/jquery/dist/jquery.js":
2360/*!********************************************!*\
2361  !*** ./node_modules/jquery/dist/jquery.js ***!
2362  \********************************************/
2363/***/ (function(module, exports) {
2364
2365var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
2366 * jQuery JavaScript Library v3.7.1
2367 * https://jquery.com/
2368 *
2369 * Copyright OpenJS Foundation and other contributors
2370 * Released under the MIT license
2371 * https://jquery.org/license
2372 *
2373 * Date: 2023-08-28T13:37Z
2374 */
2375( function( global, factory ) {
2376
2377	"use strict";
2378
2379	if (  true && typeof module.exports === "object" ) {
2380
2381		// For CommonJS and CommonJS-like environments where a proper `window`
2382		// is present, execute the factory and get jQuery.
2383		// For environments that do not have a `window` with a `document`
2384		// (such as Node.js), expose a factory as module.exports.
2385		// This accentuates the need for the creation of a real `window`.
2386		// e.g. var jQuery = require("jquery")(window);
2387		// See ticket trac-14549 for more info.
2388		module.exports = global.document ?
2389			factory( global, true ) :
2390			function( w ) {
2391				if ( !w.document ) {
2392					throw new Error( "jQuery requires a window with a document" );
2393				}
2394				return factory( w );
2395			};
2396	} else {
2397		factory( global );
2398	}
2399
2400// Pass this if window is not defined yet
2401} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
2402
2403// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
2404// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
2405// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
2406// enough that all such attempts are guarded in a try block.
2407"use strict";
2408
2409var arr = [];
2410
2411var getProto = Object.getPrototypeOf;
2412
2413var slice = arr.slice;
2414
2415var flat = arr.flat ? function( array ) {
2416	return arr.flat.call( array );
2417} : function( array ) {
2418	return arr.concat.apply( [], array );
2419};
2420
2421
2422var push = arr.push;
2423
2424var indexOf = arr.indexOf;
2425
2426var class2type = {};
2427
2428var toString = class2type.toString;
2429
2430var hasOwn = class2type.hasOwnProperty;
2431
2432var fnToString = hasOwn.toString;
2433
2434var ObjectFunctionString = fnToString.call( Object );
2435
2436var support = {};
2437
2438var isFunction = function isFunction( obj ) {
2439
2440		// Support: Chrome <=57, Firefox <=52
2441		// In some browsers, typeof returns "function" for HTML <object> elements
2442		// (i.e., `typeof document.createElement( "object" ) === "function"`).
2443		// We don't want to classify *any* DOM node as a function.
2444		// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5
2445		// Plus for old WebKit, typeof returns "function" for HTML collections
2446		// (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756)
2447		return typeof obj === "function" && typeof obj.nodeType !== "number" &&
2448			typeof obj.item !== "function";
2449	};
2450
2451
2452var isWindow = function isWindow( obj ) {
2453		return obj != null && obj === obj.window;
2454	};
2455
2456
2457var document = window.document;
2458
2459
2460
2461	var preservedScriptAttributes = {
2462		type: true,
2463		src: true,
2464		nonce: true,
2465		noModule: true
2466	};
2467
2468	function DOMEval( code, node, doc ) {
2469		doc = doc || document;
2470
2471		var i, val,
2472			script = doc.createElement( "script" );
2473
2474		script.text = code;
2475		if ( node ) {
2476			for ( i in preservedScriptAttributes ) {
2477
2478				// Support: Firefox 64+, Edge 18+
2479				// Some browsers don't support the "nonce" property on scripts.
2480				// On the other hand, just using `getAttribute` is not enough as
2481				// the `nonce` attribute is reset to an empty string whenever it
2482				// becomes browsing-context connected.
2483				// See https://github.com/whatwg/html/issues/2369
2484				// See https://html.spec.whatwg.org/#nonce-attributes
2485				// The `node.getAttribute` check was added for the sake of
2486				// `jQuery.globalEval` so that it can fake a nonce-containing node
2487				// via an object.
2488				val = node[ i ] || node.getAttribute && node.getAttribute( i );
2489				if ( val ) {
2490					script.setAttribute( i, val );
2491				}
2492			}
2493		}
2494		doc.head.appendChild( script ).parentNode.removeChild( script );
2495	}
2496
2497
2498function toType( obj ) {
2499	if ( obj == null ) {
2500		return obj + "";
2501	}
2502
2503	// Support: Android <=2.3 only (functionish RegExp)
2504	return typeof obj === "object" || typeof obj === "function" ?
2505		class2type[ toString.call( obj ) ] || "object" :
2506		typeof obj;
2507}
2508/* global Symbol */
2509// Defining this global in .eslintrc.json would create a danger of using the global
2510// unguarded in another place, it seems safer to define global only for this module
2511
2512
2513
2514var version = "3.7.1",
2515
2516	rhtmlSuffix = /HTML$/i,
2517
2518	// Define a local copy of jQuery
2519	jQuery = function( selector, context ) {
2520
2521		// The jQuery object is actually just the init constructor 'enhanced'
2522		// Need init if jQuery is called (just allow error to be thrown if not included)
2523		return new jQuery.fn.init( selector, context );
2524	};
2525
2526jQuery.fn = jQuery.prototype = {
2527
2528	// The current version of jQuery being used
2529	jquery: version,
2530
2531	constructor: jQuery,
2532
2533	// The default length of a jQuery object is 0
2534	length: 0,
2535
2536	toArray: function() {
2537		return slice.call( this );
2538	},
2539
2540	// Get the Nth element in the matched element set OR
2541	// Get the whole matched element set as a clean array
2542	get: function( num ) {
2543
2544		// Return all the elements in a clean array
2545		if ( num == null ) {
2546			return slice.call( this );
2547		}
2548
2549		// Return just the one element from the set
2550		return num < 0 ? this[ num + this.length ] : this[ num ];
2551	},
2552
2553	// Take an array of elements and push it onto the stack
2554	// (returning the new matched element set)
2555	pushStack: function( elems ) {
2556
2557		// Build a new jQuery matched element set
2558		var ret = jQuery.merge( this.constructor(), elems );
2559
2560		// Add the old object onto the stack (as a reference)
2561		ret.prevObject = this;
2562
2563		// Return the newly-formed element set
2564		return ret;
2565	},
2566
2567	// Execute a callback for every element in the matched set.
2568	each: function( callback ) {
2569		return jQuery.each( this, callback );
2570	},
2571
2572	map: function( callback ) {
2573		return this.pushStack( jQuery.map( this, function( elem, i ) {
2574			return callback.call( elem, i, elem );
2575		} ) );
2576	},
2577
2578	slice: function() {
2579		return this.pushStack( slice.apply( this, arguments ) );
2580	},
2581
2582	first: function() {
2583		return this.eq( 0 );
2584	},
2585
2586	last: function() {
2587		return this.eq( -1 );
2588	},
2589
2590	even: function() {
2591		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
2592			return ( i + 1 ) % 2;
2593		} ) );
2594	},
2595
2596	odd: function() {
2597		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
2598			return i % 2;
2599		} ) );
2600	},
2601
2602	eq: function( i ) {
2603		var len = this.length,
2604			j = +i + ( i < 0 ? len : 0 );
2605		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
2606	},
2607
2608	end: function() {
2609		return this.prevObject || this.constructor();
2610	},
2611
2612	// For internal use only.
2613	// Behaves like an Array's method, not like a jQuery method.
2614	push: push,
2615	sort: arr.sort,
2616	splice: arr.splice
2617};
2618
2619jQuery.extend = jQuery.fn.extend = function() {
2620	var options, name, src, copy, copyIsArray, clone,
2621		target = arguments[ 0 ] || {},
2622		i = 1,
2623		length = arguments.length,
2624		deep = false;
2625
2626	// Handle a deep copy situation
2627	if ( typeof target === "boolean" ) {
2628		deep = target;
2629
2630		// Skip the boolean and the target
2631		target = arguments[ i ] || {};
2632		i++;
2633	}
2634
2635	// Handle case when target is a string or something (possible in deep copy)
2636	if ( typeof target !== "object" && !isFunction( target ) ) {
2637		target = {};
2638	}
2639
2640	// Extend jQuery itself if only one argument is passed
2641	if ( i === length ) {
2642		target = this;
2643		i--;
2644	}
2645
2646	for ( ; i < length; i++ ) {
2647
2648		// Only deal with non-null/undefined values
2649		if ( ( options = arguments[ i ] ) != null ) {
2650
2651			// Extend the base object
2652			for ( name in options ) {
2653				copy = options[ name ];
2654
2655				// Prevent Object.prototype pollution
2656				// Prevent never-ending loop
2657				if ( name === "__proto__" || target === copy ) {
2658					continue;
2659				}
2660
2661				// Recurse if we're merging plain objects or arrays
2662				if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
2663					( copyIsArray = Array.isArray( copy ) ) ) ) {
2664					src = target[ name ];
2665
2666					// Ensure proper type for the source value
2667					if ( copyIsArray && !Array.isArray( src ) ) {
2668						clone = [];
2669					} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {
2670						clone = {};
2671					} else {
2672						clone = src;
2673					}
2674					copyIsArray = false;
2675
2676					// Never move original objects, clone them
2677					target[ name ] = jQuery.extend( deep, clone, copy );
2678
2679				// Don't bring in undefined values
2680				} else if ( copy !== undefined ) {
2681					target[ name ] = copy;
2682				}
2683			}
2684		}
2685	}
2686
2687	// Return the modified object
2688	return target;
2689};
2690
2691jQuery.extend( {
2692
2693	// Unique for each copy of jQuery on the page
2694	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
2695
2696	// Assume jQuery is ready without the ready module
2697	isReady: true,
2698
2699	error: function( msg ) {
2700		throw new Error( msg );
2701	},
2702
2703	noop: function() {},
2704
2705	isPlainObject: function( obj ) {
2706		var proto, Ctor;
2707
2708		// Detect obvious negatives
2709		// Use toString instead of jQuery.type to catch host objects
2710		if ( !obj || toString.call( obj ) !== "[object Object]" ) {
2711			return false;
2712		}
2713
2714		proto = getProto( obj );
2715
2716		// Objects with no prototype (e.g., `Object.create( null )`) are plain
2717		if ( !proto ) {
2718			return true;
2719		}
2720
2721		// Objects with prototype are plain iff they were constructed by a global Object function
2722		Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
2723		return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
2724	},
2725
2726	isEmptyObject: function( obj ) {
2727		var name;
2728
2729		for ( name in obj ) {
2730			return false;
2731		}
2732		return true;
2733	},
2734
2735	// Evaluates a script in a provided context; falls back to the global one
2736	// if not specified.
2737	globalEval: function( code, options, doc ) {
2738		DOMEval( code, { nonce: options && options.nonce }, doc );
2739	},
2740
2741	each: function( obj, callback ) {
2742		var length, i = 0;
2743
2744		if ( isArrayLike( obj ) ) {
2745			length = obj.length;
2746			for ( ; i < length; i++ ) {
2747				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
2748					break;
2749				}
2750			}
2751		} else {
2752			for ( i in obj ) {
2753				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
2754					break;
2755				}
2756			}
2757		}
2758
2759		return obj;
2760	},
2761
2762
2763	// Retrieve the text value of an array of DOM nodes
2764	text: function( elem ) {
2765		var node,
2766			ret = "",
2767			i = 0,
2768			nodeType = elem.nodeType;
2769
2770		if ( !nodeType ) {
2771
2772			// If no nodeType, this is expected to be an array
2773			while ( ( node = elem[ i++ ] ) ) {
2774
2775				// Do not traverse comment nodes
2776				ret += jQuery.text( node );
2777			}
2778		}
2779		if ( nodeType === 1 || nodeType === 11 ) {
2780			return elem.textContent;
2781		}
2782		if ( nodeType === 9 ) {
2783			return elem.documentElement.textContent;
2784		}
2785		if ( nodeType === 3 || nodeType === 4 ) {
2786			return elem.nodeValue;
2787		}
2788
2789		// Do not include comment or processing instruction nodes
2790
2791		return ret;
2792	},
2793
2794	// results is for internal usage only
2795	makeArray: function( arr, results ) {
2796		var ret = results || [];
2797
2798		if ( arr != null ) {
2799			if ( isArrayLike( Object( arr ) ) ) {
2800				jQuery.merge( ret,
2801					typeof arr === "string" ?
2802						[ arr ] : arr
2803				);
2804			} else {
2805				push.call( ret, arr );
2806			}
2807		}
2808
2809		return ret;
2810	},
2811
2812	inArray: function( elem, arr, i ) {
2813		return arr == null ? -1 : indexOf.call( arr, elem, i );
2814	},
2815
2816	isXMLDoc: function( elem ) {
2817		var namespace = elem && elem.namespaceURI,
2818			docElem = elem && ( elem.ownerDocument || elem ).documentElement;
2819
2820		// Assume HTML when documentElement doesn't yet exist, such as inside
2821		// document fragments.
2822		return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" );
2823	},
2824
2825	// Support: Android <=4.0 only, PhantomJS 1 only
2826	// push.apply(_, arraylike) throws on ancient WebKit
2827	merge: function( first, second ) {
2828		var len = +second.length,
2829			j = 0,
2830			i = first.length;
2831
2832		for ( ; j < len; j++ ) {
2833			first[ i++ ] = second[ j ];
2834		}
2835
2836		first.length = i;
2837
2838		return first;
2839	},
2840
2841	grep: function( elems, callback, invert ) {
2842		var callbackInverse,
2843			matches = [],
2844			i = 0,
2845			length = elems.length,
2846			callbackExpect = !invert;
2847
2848		// Go through the array, only saving the items
2849		// that pass the validator function
2850		for ( ; i < length; i++ ) {
2851			callbackInverse = !callback( elems[ i ], i );
2852			if ( callbackInverse !== callbackExpect ) {
2853				matches.push( elems[ i ] );
2854			}
2855		}
2856
2857		return matches;
2858	},
2859
2860	// arg is for internal usage only
2861	map: function( elems, callback, arg ) {
2862		var length, value,
2863			i = 0,
2864			ret = [];
2865
2866		// Go through the array, translating each of the items to their new values
2867		if ( isArrayLike( elems ) ) {
2868			length = elems.length;
2869			for ( ; i < length; i++ ) {
2870				value = callback( elems[ i ], i, arg );
2871
2872				if ( value != null ) {
2873					ret.push( value );
2874				}
2875			}
2876
2877		// Go through every key on the object,
2878		} else {
2879			for ( i in elems ) {
2880				value = callback( elems[ i ], i, arg );
2881
2882				if ( value != null ) {
2883					ret.push( value );
2884				}
2885			}
2886		}
2887
2888		// Flatten any nested arrays
2889		return flat( ret );
2890	},
2891
2892	// A global GUID counter for objects
2893	guid: 1,
2894
2895	// jQuery.support is not used in Core but other projects attach their
2896	// properties to it so it needs to exist.
2897	support: support
2898} );
2899
2900if ( typeof Symbol === "function" ) {
2901	jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
2902}
2903
2904// Populate the class2type map
2905jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
2906	function( _i, name ) {
2907		class2type[ "[object " + name + "]" ] = name.toLowerCase();
2908	} );
2909
2910function isArrayLike( obj ) {
2911
2912	// Support: real iOS 8.2 only (not reproducible in simulator)
2913	// `in` check used to prevent JIT error (gh-2145)
2914	// hasOwn isn't used here due to false negatives
2915	// regarding Nodelist length in IE
2916	var length = !!obj && "length" in obj && obj.length,
2917		type = toType( obj );
2918
2919	if ( isFunction( obj ) || isWindow( obj ) ) {
2920		return false;
2921	}
2922
2923	return type === "array" || length === 0 ||
2924		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
2925}
2926
2927
2928function nodeName( elem, name ) {
2929
2930	return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
2931
2932}
2933var pop = arr.pop;
2934
2935
2936var sort = arr.sort;
2937
2938
2939var splice = arr.splice;
2940
2941
2942var whitespace = "[\\x20\\t\\r\\n\\f]";
2943
2944
2945var rtrimCSS = new RegExp(
2946	"^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$",
2947	"g"
2948);
2949
2950
2951
2952
2953// Note: an element does not contain itself
2954jQuery.contains = function( a, b ) {
2955	var bup = b && b.parentNode;
2956
2957	return a === bup || !!( bup && bup.nodeType === 1 && (
2958
2959		// Support: IE 9 - 11+
2960		// IE doesn't have `contains` on SVG.
2961		a.contains ?
2962			a.contains( bup ) :
2963			a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
2964	) );
2965};
2966
2967
2968
2969
2970// CSS string/identifier serialization
2971// https://drafts.csswg.org/cssom/#common-serializing-idioms
2972var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;
2973
2974function fcssescape( ch, asCodePoint ) {
2975	if ( asCodePoint ) {
2976
2977		// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
2978		if ( ch === "\0" ) {
2979			return "\uFFFD";
2980		}
2981
2982		// Control characters and (dependent upon position) numbers get escaped as code points
2983		return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
2984	}
2985
2986	// Other potentially-special ASCII characters get backslash-escaped
2987	return "\\" + ch;
2988}
2989
2990jQuery.escapeSelector = function( sel ) {
2991	return ( sel + "" ).replace( rcssescape, fcssescape );
2992};
2993
2994
2995
2996
2997var preferredDoc = document,
2998	pushNative = push;
2999
3000( function() {
3001
3002var i,
3003	Expr,
3004	outermostContext,
3005	sortInput,
3006	hasDuplicate,
3007	push = pushNative,
3008
3009	// Local document vars
3010	document,
3011	documentElement,
3012	documentIsHTML,
3013	rbuggyQSA,
3014	matches,
3015
3016	// Instance-specific data
3017	expando = jQuery.expando,
3018	dirruns = 0,
3019	done = 0,
3020	classCache = createCache(),
3021	tokenCache = createCache(),
3022	compilerCache = createCache(),
3023	nonnativeSelectorCache = createCache(),
3024	sortOrder = function( a, b ) {
3025		if ( a === b ) {
3026			hasDuplicate = true;
3027		}
3028		return 0;
3029	},
3030
3031	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" +
3032		"loop|multiple|open|readonly|required|scoped",
3033
3034	// Regular expressions
3035
3036	// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
3037	identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace +
3038		"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
3039
3040	// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors
3041	attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
3042
3043		// Operator (capture 2)
3044		"*([*^$|!~]?=)" + whitespace +
3045
3046		// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
3047		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" +
3048		whitespace + "*\\]",
3049
3050	pseudos = ":(" + identifier + ")(?:\\((" +
3051
3052		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
3053		// 1. quoted (capture 3; capture 4 or capture 5)
3054		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
3055
3056		// 2. simple (capture 6)
3057		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
3058
3059		// 3. anything else (capture 2)
3060		".*" +
3061		")\\)|)",
3062
3063	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
3064	rwhitespace = new RegExp( whitespace + "+", "g" ),
3065
3066	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
3067	rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" +
3068		whitespace + "*" ),
3069	rdescend = new RegExp( whitespace + "|>" ),
3070
3071	rpseudo = new RegExp( pseudos ),
3072	ridentifier = new RegExp( "^" + identifier + "$" ),
3073
3074	matchExpr = {
3075		ID: new RegExp( "^#(" + identifier + ")" ),
3076		CLASS: new RegExp( "^\\.(" + identifier + ")" ),
3077		TAG: new RegExp( "^(" + identifier + "|[*])" ),
3078		ATTR: new RegExp( "^" + attributes ),
3079		PSEUDO: new RegExp( "^" + pseudos ),
3080		CHILD: new RegExp(
3081			"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" +
3082				whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" +
3083				whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
3084		bool: new RegExp( "^(?:" + booleans + ")$", "i" ),
3085
3086		// For use in libraries implementing .is()
3087		// We use this for POS matching in `select`
3088		needsContext: new RegExp( "^" + whitespace +
3089			"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
3090			"*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
3091	},
3092
3093	rinputs = /^(?:input|select|textarea|button)$/i,
3094	rheader = /^h\d$/i,
3095
3096	// Easily-parseable/retrievable ID or TAG or CLASS selectors
3097	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
3098
3099	rsibling = /[+~]/,
3100
3101	// CSS escapes
3102	// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters
3103	runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace +
3104		"?|\\\\([^\\r\\n\\f])", "g" ),
3105	funescape = function( escape, nonHex ) {
3106		var high = "0x" + escape.slice( 1 ) - 0x10000;
3107
3108		if ( nonHex ) {
3109
3110			// Strip the backslash prefix from a non-hex escape sequence
3111			return nonHex;
3112		}
3113
3114		// Replace a hexadecimal escape sequence with the encoded Unicode code point
3115		// Support: IE <=11+
3116		// For values outside the Basic Multilingual Plane (BMP), manually construct a
3117		// surrogate pair
3118		return high < 0 ?
3119			String.fromCharCode( high + 0x10000 ) :
3120			String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
3121	},
3122
3123	// Used for iframes; see `setDocument`.
3124	// Support: IE 9 - 11+, Edge 12 - 18+
3125	// Removing the function wrapper causes a "Permission Denied"
3126	// error in IE/Edge.
3127	unloadHandler = function() {
3128		setDocument();
3129	},
3130
3131	inDisabledFieldset = addCombinator(
3132		function( elem ) {
3133			return elem.disabled === true && nodeName( elem, "fieldset" );
3134		},
3135		{ dir: "parentNode", next: "legend" }
3136	);
3137
3138// Support: IE <=9 only
3139// Accessing document.activeElement can throw unexpectedly
3140// https://bugs.jquery.com/ticket/13393
3141function safeActiveElement() {
3142	try {
3143		return document.activeElement;
3144	} catch ( err ) { }
3145}
3146
3147// Optimize for push.apply( _, NodeList )
3148try {
3149	push.apply(
3150		( arr = slice.call( preferredDoc.childNodes ) ),
3151		preferredDoc.childNodes
3152	);
3153
3154	// Support: Android <=4.0
3155	// Detect silently failing push.apply
3156	// eslint-disable-next-line no-unused-expressions
3157	arr[ preferredDoc.childNodes.length ].nodeType;
3158} catch ( e ) {
3159	push = {
3160		apply: function( target, els ) {
3161			pushNative.apply( target, slice.call( els ) );
3162		},
3163		call: function( target ) {
3164			pushNative.apply( target, slice.call( arguments, 1 ) );
3165		}
3166	};
3167}
3168
3169function find( selector, context, results, seed ) {
3170	var m, i, elem, nid, match, groups, newSelector,
3171		newContext = context && context.ownerDocument,
3172
3173		// nodeType defaults to 9, since context defaults to document
3174		nodeType = context ? context.nodeType : 9;
3175
3176	results = results || [];
3177
3178	// Return early from calls with invalid selector or context
3179	if ( typeof selector !== "string" || !selector ||
3180		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
3181
3182		return results;
3183	}
3184
3185	// Try to shortcut find operations (as opposed to filters) in HTML documents
3186	if ( !seed ) {
3187		setDocument( context );
3188		context = context || document;
3189
3190		if ( documentIsHTML ) {
3191
3192			// If the selector is sufficiently simple, try using a "get*By*" DOM method
3193			// (excepting DocumentFragment context, where the methods don't exist)
3194			if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {
3195
3196				// ID selector
3197				if ( ( m = match[ 1 ] ) ) {
3198
3199					// Document context
3200					if ( nodeType === 9 ) {
3201						if ( ( elem = context.getElementById( m ) ) ) {
3202
3203							// Support: IE 9 only
3204							// getElementById can match elements by name instead of ID
3205							if ( elem.id === m ) {
3206								push.call( results, elem );
3207								return results;
3208							}
3209						} else {
3210							return results;
3211						}
3212
3213					// Element context
3214					} else {
3215
3216						// Support: IE 9 only
3217						// getElementById can match elements by name instead of ID
3218						if ( newContext && ( elem = newContext.getElementById( m ) ) &&
3219							find.contains( context, elem ) &&
3220							elem.id === m ) {
3221
3222							push.call( results, elem );
3223							return results;
3224						}
3225					}
3226
3227				// Type selector
3228				} else if ( match[ 2 ] ) {
3229					push.apply( results, context.getElementsByTagName( selector ) );
3230					return results;
3231
3232				// Class selector
3233				} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {
3234					push.apply( results, context.getElementsByClassName( m ) );
3235					return results;
3236				}
3237			}
3238
3239			// Take advantage of querySelectorAll
3240			if ( !nonnativeSelectorCache[ selector + " " ] &&
3241				( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {
3242
3243				newSelector = selector;
3244				newContext = context;
3245
3246				// qSA considers elements outside a scoping root when evaluating child or
3247				// descendant combinators, which is not what we want.
3248				// In such cases, we work around the behavior by prefixing every selector in the
3249				// list with an ID selector referencing the scope context.
3250				// The technique has to be used as well when a leading combinator is used
3251				// as such selectors are not recognized by querySelectorAll.
3252				// Thanks to Andrew Dupont for this technique.
3253				if ( nodeType === 1 &&
3254					( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {
3255
3256					// Expand context for sibling selectors
3257					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
3258						context;
3259
3260					// We can use :scope instead of the ID hack if the browser
3261					// supports it & if we're not changing the context.
3262					// Support: IE 11+, Edge 17 - 18+
3263					// IE/Edge sometimes throw a "Permission denied" error when
3264					// strict-comparing two documents; shallow comparisons work.
3265					// eslint-disable-next-line eqeqeq
3266					if ( newContext != context || !support.scope ) {
3267
3268						// Capture the context ID, setting it first if necessary
3269						if ( ( nid = context.getAttribute( "id" ) ) ) {
3270							nid = jQuery.escapeSelector( nid );
3271						} else {
3272							context.setAttribute( "id", ( nid = expando ) );
3273						}
3274					}
3275
3276					// Prefix every selector in the list
3277					groups = tokenize( selector );
3278					i = groups.length;
3279					while ( i-- ) {
3280						groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " +
3281							toSelector( groups[ i ] );
3282					}
3283					newSelector = groups.join( "," );
3284				}
3285
3286				try {
3287					push.apply( results,
3288						newContext.querySelectorAll( newSelector )
3289					);
3290					return results;
3291				} catch ( qsaError ) {
3292					nonnativeSelectorCache( selector, true );
3293				} finally {
3294					if ( nid === expando ) {
3295						context.removeAttribute( "id" );
3296					}
3297				}
3298			}
3299		}
3300	}
3301
3302	// All others
3303	return select( selector.replace( rtrimCSS, "$1" ), context, results, seed );
3304}
3305
3306/**
3307 * Create key-value caches of limited size
3308 * @returns {function(string, object)} Returns the Object data after storing it on itself with
3309 *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
3310 *	deleting the oldest entry
3311 */
3312function createCache() {
3313	var keys = [];
3314
3315	function cache( key, value ) {
3316
3317		// Use (key + " ") to avoid collision with native prototype properties
3318		// (see https://github.com/jquery/sizzle/issues/157)
3319		if ( keys.push( key + " " ) > Expr.cacheLength ) {
3320
3321			// Only keep the most recent entries
3322			delete cache[ keys.shift() ];
3323		}
3324		return ( cache[ key + " " ] = value );
3325	}
3326	return cache;
3327}
3328
3329/**
3330 * Mark a function for special use by jQuery selector module
3331 * @param {Function} fn The function to mark
3332 */
3333function markFunction( fn ) {
3334	fn[ expando ] = true;
3335	return fn;
3336}
3337
3338/**
3339 * Support testing using an element
3340 * @param {Function} fn Passed the created element and returns a boolean result
3341 */
3342function assert( fn ) {
3343	var el = document.createElement( "fieldset" );
3344
3345	try {
3346		return !!fn( el );
3347	} catch ( e ) {
3348		return false;
3349	} finally {
3350
3351		// Remove from its parent by default
3352		if ( el.parentNode ) {
3353			el.parentNode.removeChild( el );
3354		}
3355
3356		// release memory in IE
3357		el = null;
3358	}
3359}
3360
3361/**
3362 * Returns a function to use in pseudos for input types
3363 * @param {String} type
3364 */
3365function createInputPseudo( type ) {
3366	return function( elem ) {
3367		return nodeName( elem, "input" ) && elem.type === type;
3368	};
3369}
3370
3371/**
3372 * Returns a function to use in pseudos for buttons
3373 * @param {String} type
3374 */
3375function createButtonPseudo( type ) {
3376	return function( elem ) {
3377		return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) &&
3378			elem.type === type;
3379	};
3380}
3381
3382/**
3383 * Returns a function to use in pseudos for :enabled/:disabled
3384 * @param {Boolean} disabled true for :disabled; false for :enabled
3385 */
3386function createDisabledPseudo( disabled ) {
3387
3388	// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
3389	return function( elem ) {
3390
3391		// Only certain elements can match :enabled or :disabled
3392		// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
3393		// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
3394		if ( "form" in elem ) {
3395
3396			// Check for inherited disabledness on relevant non-disabled elements:
3397			// * listed form-associated elements in a disabled fieldset
3398			//   https://html.spec.whatwg.org/multipage/forms.html#category-listed
3399			//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
3400			// * option elements in a disabled optgroup
3401			//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
3402			// All such elements have a "form" property.
3403			if ( elem.parentNode && elem.disabled === false ) {
3404
3405				// Option elements defer to a parent optgroup if present
3406				if ( "label" in elem ) {
3407					if ( "label" in elem.parentNode ) {
3408						return elem.parentNode.disabled === disabled;
3409					} else {
3410						return elem.disabled === disabled;
3411					}
3412				}
3413
3414				// Support: IE 6 - 11+
3415				// Use the isDisabled shortcut property to check for disabled fieldset ancestors
3416				return elem.isDisabled === disabled ||
3417
3418					// Where there is no isDisabled, check manually
3419					elem.isDisabled !== !disabled &&
3420						inDisabledFieldset( elem ) === disabled;
3421			}
3422
3423			return elem.disabled === disabled;
3424
3425		// Try to winnow out elements that can't be disabled before trusting the disabled property.
3426		// Some victims get caught in our net (label, legend, menu, track), but it shouldn't
3427		// even exist on them, let alone have a boolean value.
3428		} else if ( "label" in elem ) {
3429			return elem.disabled === disabled;
3430		}
3431
3432		// Remaining elements are neither :enabled nor :disabled
3433		return false;
3434	};
3435}
3436
3437/**
3438 * Returns a function to use in pseudos for positionals
3439 * @param {Function} fn
3440 */
3441function createPositionalPseudo( fn ) {
3442	return markFunction( function( argument ) {
3443		argument = +argument;
3444		return markFunction( function( seed, matches ) {
3445			var j,
3446				matchIndexes = fn( [], seed.length, argument ),
3447				i = matchIndexes.length;
3448
3449			// Match elements found at the specified indexes
3450			while ( i-- ) {
3451				if ( seed[ ( j = matchIndexes[ i ] ) ] ) {
3452					seed[ j ] = !( matches[ j ] = seed[ j ] );
3453				}
3454			}
3455		} );
3456	} );
3457}
3458
3459/**
3460 * Checks a node for validity as a jQuery selector context
3461 * @param {Element|Object=} context
3462 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
3463 */
3464function testContext( context ) {
3465	return context && typeof context.getElementsByTagName !== "undefined" && context;
3466}
3467
3468/**
3469 * Sets document-related variables once based on the current document
3470 * @param {Element|Object} [node] An element or document object to use to set the document
3471 * @returns {Object} Returns the current document
3472 */
3473function setDocument( node ) {
3474	var subWindow,
3475		doc = node ? node.ownerDocument || node : preferredDoc;
3476
3477	// Return early if doc is invalid or already selected
3478	// Support: IE 11+, Edge 17 - 18+
3479	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
3480	// two documents; shallow comparisons work.
3481	// eslint-disable-next-line eqeqeq
3482	if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {
3483		return document;
3484	}
3485
3486	// Update global variables
3487	document = doc;
3488	documentElement = document.documentElement;
3489	documentIsHTML = !jQuery.isXMLDoc( document );
3490
3491	// Support: iOS 7 only, IE 9 - 11+
3492	// Older browsers didn't support unprefixed `matches`.
3493	matches = documentElement.matches ||
3494		documentElement.webkitMatchesSelector ||
3495		documentElement.msMatchesSelector;
3496
3497	// Support: IE 9 - 11+, Edge 12 - 18+
3498	// Accessing iframe documents after unload throws "permission denied" errors
3499	// (see trac-13936).
3500	// Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`,
3501	// all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well.
3502	if ( documentElement.msMatchesSelector &&
3503
3504		// Support: IE 11+, Edge 17 - 18+
3505		// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
3506		// two documents; shallow comparisons work.
3507		// eslint-disable-next-line eqeqeq
3508		preferredDoc != document &&
3509		( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {
3510
3511		// Support: IE 9 - 11+, Edge 12 - 18+
3512		subWindow.addEventListener( "unload", unloadHandler );
3513	}
3514
3515	// Support: IE <10
3516	// Check if getElementById returns elements by name
3517	// The broken getElementById methods don't pick up programmatically-set names,
3518	// so use a roundabout getElementsByName test
3519	support.getById = assert( function( el ) {
3520		documentElement.appendChild( el ).id = jQuery.expando;
3521		return !document.getElementsByName ||
3522			!document.getElementsByName( jQuery.expando ).length;
3523	} );
3524
3525	// Support: IE 9 only
3526	// Check to see if it's possible to do matchesSelector
3527	// on a disconnected node.
3528	support.disconnectedMatch = assert( function( el ) {
3529		return matches.call( el, "*" );
3530	} );
3531
3532	// Support: IE 9 - 11+, Edge 12 - 18+
3533	// IE/Edge don't support the :scope pseudo-class.
3534	support.scope = assert( function() {
3535		return document.querySelectorAll( ":scope" );
3536	} );
3537
3538	// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only
3539	// Make sure the `:has()` argument is parsed unforgivingly.
3540	// We include `*` in the test to detect buggy implementations that are
3541	// _selectively_ forgiving (specifically when the list includes at least
3542	// one valid selector).
3543	// Note that we treat complete lack of support for `:has()` as if it were
3544	// spec-compliant support, which is fine because use of `:has()` in such
3545	// environments will fail in the qSA path and fall back to jQuery traversal
3546	// anyway.
3547	support.cssHas = assert( function() {
3548		try {
3549			document.querySelector( ":has(*,:jqfake)" );
3550			return false;
3551		} catch ( e ) {
3552			return true;
3553		}
3554	} );
3555
3556	// ID filter and find
3557	if ( support.getById ) {
3558		Expr.filter.ID = function( id ) {
3559			var attrId = id.replace( runescape, funescape );
3560			return function( elem ) {
3561				return elem.getAttribute( "id" ) === attrId;
3562			};
3563		};
3564		Expr.find.ID = function( id, context ) {
3565			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
3566				var elem = context.getElementById( id );
3567				return elem ? [ elem ] : [];
3568			}
3569		};
3570	} else {
3571		Expr.filter.ID =  function( id ) {
3572			var attrId = id.replace( runescape, funescape );
3573			return function( elem ) {
3574				var node = typeof elem.getAttributeNode !== "undefined" &&
3575					elem.getAttributeNode( "id" );
3576				return node && node.value === attrId;
3577			};
3578		};
3579
3580		// Support: IE 6 - 7 only
3581		// getElementById is not reliable as a find shortcut
3582		Expr.find.ID = function( id, context ) {
3583			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
3584				var node, i, elems,
3585					elem = context.getElementById( id );
3586
3587				if ( elem ) {
3588
3589					// Verify the id attribute
3590					node = elem.getAttributeNode( "id" );
3591					if ( node && node.value === id ) {
3592						return [ elem ];
3593					}
3594
3595					// Fall back on getElementsByName
3596					elems = context.getElementsByName( id );
3597					i = 0;
3598					while ( ( elem = elems[ i++ ] ) ) {
3599						node = elem.getAttributeNode( "id" );
3600						if ( node && node.value === id ) {
3601							return [ elem ];
3602						}
3603					}
3604				}
3605
3606				return [];
3607			}
3608		};
3609	}
3610
3611	// Tag
3612	Expr.find.TAG = function( tag, context ) {
3613		if ( typeof context.getElementsByTagName !== "undefined" ) {
3614			return context.getElementsByTagName( tag );
3615
3616		// DocumentFragment nodes don't have gEBTN
3617		} else {
3618			return context.querySelectorAll( tag );
3619		}
3620	};
3621
3622	// Class
3623	Expr.find.CLASS = function( className, context ) {
3624		if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
3625			return context.getElementsByClassName( className );
3626		}
3627	};
3628
3629	/* QSA/matchesSelector
3630	---------------------------------------------------------------------- */
3631
3632	// QSA and matchesSelector support
3633
3634	rbuggyQSA = [];
3635
3636	// Build QSA regex
3637	// Regex strategy adopted from Diego Perini
3638	assert( function( el ) {
3639
3640		var input;
3641
3642		documentElement.appendChild( el ).innerHTML =
3643			"<a id='" + expando + "' href='' disabled='disabled'></a>" +
3644			"<select id='" + expando + "-\r\\' disabled='disabled'>" +
3645			"<option selected=''></option></select>";
3646
3647		// Support: iOS <=7 - 8 only
3648		// Boolean attributes and "value" are not treated correctly in some XML documents
3649		if ( !el.querySelectorAll( "[selected]" ).length ) {
3650			rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
3651		}
3652
3653		// Support: iOS <=7 - 8 only
3654		if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
3655			rbuggyQSA.push( "~=" );
3656		}
3657
3658		// Support: iOS 8 only
3659		// https://bugs.webkit.org/show_bug.cgi?id=136851
3660		// In-page `selector#id sibling-combinator selector` fails
3661		if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
3662			rbuggyQSA.push( ".#.+[+~]" );
3663		}
3664
3665		// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+
3666		// In some of the document kinds, these selectors wouldn't work natively.
3667		// This is probably OK but for backwards compatibility we want to maintain
3668		// handling them through jQuery traversal in jQuery 3.x.
3669		if ( !el.querySelectorAll( ":checked" ).length ) {
3670			rbuggyQSA.push( ":checked" );
3671		}
3672
3673		// Support: Windows 8 Native Apps
3674		// The type and name attributes are restricted during .innerHTML assignment
3675		input = document.createElement( "input" );
3676		input.setAttribute( "type", "hidden" );
3677		el.appendChild( input ).setAttribute( "name", "D" );
3678
3679		// Support: IE 9 - 11+
3680		// IE's :disabled selector does not pick up the children of disabled fieldsets
3681		// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+
3682		// In some of the document kinds, these selectors wouldn't work natively.
3683		// This is probably OK but for backwards compatibility we want to maintain
3684		// handling them through jQuery traversal in jQuery 3.x.
3685		documentElement.appendChild( el ).disabled = true;
3686		if ( el.querySelectorAll( ":disabled" ).length !== 2 ) {
3687			rbuggyQSA.push( ":enabled", ":disabled" );
3688		}
3689
3690		// Support: IE 11+, Edge 15 - 18+
3691		// IE 11/Edge don't find elements on a `[name='']` query in some cases.
3692		// Adding a temporary attribute to the document before the selection works
3693		// around the issue.
3694		// Interestingly, IE 10 & older don't seem to have the issue.
3695		input = document.createElement( "input" );
3696		input.setAttribute( "name", "" );
3697		el.appendChild( input );
3698		if ( !el.querySelectorAll( "[name='']" ).length ) {
3699			rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" +
3700				whitespace + "*(?:''|\"\")" );
3701		}
3702	} );
3703
3704	if ( !support.cssHas ) {
3705
3706		// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+
3707		// Our regular `try-catch` mechanism fails to detect natively-unsupported
3708		// pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`)
3709		// in browsers that parse the `:has()` argument as a forgiving selector list.
3710		// https://drafts.csswg.org/selectors/#relational now requires the argument
3711		// to be parsed unforgivingly, but browsers have not yet fully adjusted.
3712		rbuggyQSA.push( ":has" );
3713	}
3714
3715	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) );
3716
3717	/* Sorting
3718	---------------------------------------------------------------------- */
3719
3720	// Document order sorting
3721	sortOrder = function( a, b ) {
3722
3723		// Flag for duplicate removal
3724		if ( a === b ) {
3725			hasDuplicate = true;
3726			return 0;
3727		}
3728
3729		// Sort on method existence if only one input has compareDocumentPosition
3730		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
3731		if ( compare ) {
3732			return compare;
3733		}
3734
3735		// Calculate position if both inputs belong to the same document
3736		// Support: IE 11+, Edge 17 - 18+
3737		// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
3738		// two documents; shallow comparisons work.
3739		// eslint-disable-next-line eqeqeq
3740		compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?
3741			a.compareDocumentPosition( b ) :
3742
3743			// Otherwise we know they are disconnected
3744			1;
3745
3746		// Disconnected nodes
3747		if ( compare & 1 ||
3748			( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {
3749
3750			// Choose the first element that is related to our preferred document
3751			// Support: IE 11+, Edge 17 - 18+
3752			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
3753			// two documents; shallow comparisons work.
3754			// eslint-disable-next-line eqeqeq
3755			if ( a === document || a.ownerDocument == preferredDoc &&
3756				find.contains( preferredDoc, a ) ) {
3757				return -1;
3758			}
3759
3760			// Support: IE 11+, Edge 17 - 18+
3761			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
3762			// two documents; shallow comparisons work.
3763			// eslint-disable-next-line eqeqeq
3764			if ( b === document || b.ownerDocument == preferredDoc &&
3765				find.contains( preferredDoc, b ) ) {
3766				return 1;
3767			}
3768
3769			// Maintain original order
3770			return sortInput ?
3771				( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
3772				0;
3773		}
3774
3775		return compare & 4 ? -1 : 1;
3776	};
3777
3778	return document;
3779}
3780
3781find.matches = function( expr, elements ) {
3782	return find( expr, null, null, elements );
3783};
3784
3785find.matchesSelector = function( elem, expr ) {
3786	setDocument( elem );
3787
3788	if ( documentIsHTML &&
3789		!nonnativeSelectorCache[ expr + " " ] &&
3790		( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
3791
3792		try {
3793			var ret = matches.call( elem, expr );
3794
3795			// IE 9's matchesSelector returns false on disconnected nodes
3796			if ( ret || support.disconnectedMatch ||
3797
3798					// As well, disconnected nodes are said to be in a document
3799					// fragment in IE 9
3800					elem.document && elem.document.nodeType !== 11 ) {
3801				return ret;
3802			}
3803		} catch ( e ) {
3804			nonnativeSelectorCache( expr, true );
3805		}
3806	}
3807
3808	return find( expr, document, null, [ elem ] ).length > 0;
3809};
3810
3811find.contains = function( context, elem ) {
3812
3813	// Set document vars if needed
3814	// Support: IE 11+, Edge 17 - 18+
3815	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
3816	// two documents; shallow comparisons work.
3817	// eslint-disable-next-line eqeqeq
3818	if ( ( context.ownerDocument || context ) != document ) {
3819		setDocument( context );
3820	}
3821	return jQuery.contains( context, elem );
3822};
3823
3824
3825find.attr = function( elem, name ) {
3826
3827	// Set document vars if needed
3828	// Support: IE 11+, Edge 17 - 18+
3829	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
3830	// two documents; shallow comparisons work.
3831	// eslint-disable-next-line eqeqeq
3832	if ( ( elem.ownerDocument || elem ) != document ) {
3833		setDocument( elem );
3834	}
3835
3836	var fn = Expr.attrHandle[ name.toLowerCase() ],
3837
3838		// Don't get fooled by Object.prototype properties (see trac-13807)
3839		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
3840			fn( elem, name, !documentIsHTML ) :
3841			undefined;
3842
3843	if ( val !== undefined ) {
3844		return val;
3845	}
3846
3847	return elem.getAttribute( name );
3848};
3849
3850find.error = function( msg ) {
3851	throw new Error( "Syntax error, unrecognized expression: " + msg );
3852};
3853
3854/**
3855 * Document sorting and removing duplicates
3856 * @param {ArrayLike} results
3857 */
3858jQuery.uniqueSort = function( results ) {
3859	var elem,
3860		duplicates = [],
3861		j = 0,
3862		i = 0;
3863
3864	// Unless we *know* we can detect duplicates, assume their presence
3865	//
3866	// Support: Android <=4.0+
3867	// Testing for detecting duplicates is unpredictable so instead assume we can't
3868	// depend on duplicate detection in all browsers without a stable sort.
3869	hasDuplicate = !support.sortStable;
3870	sortInput = !support.sortStable && slice.call( results, 0 );
3871	sort.call( results, sortOrder );
3872
3873	if ( hasDuplicate ) {
3874		while ( ( elem = results[ i++ ] ) ) {
3875			if ( elem === results[ i ] ) {
3876				j = duplicates.push( i );
3877			}
3878		}
3879		while ( j-- ) {
3880			splice.call( results, duplicates[ j ], 1 );
3881		}
3882	}
3883
3884	// Clear input after sorting to release objects
3885	// See https://github.com/jquery/sizzle/pull/225
3886	sortInput = null;
3887
3888	return results;
3889};
3890
3891jQuery.fn.uniqueSort = function() {
3892	return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );
3893};
3894
3895Expr = jQuery.expr = {
3896
3897	// Can be adjusted by the user
3898	cacheLength: 50,
3899
3900	createPseudo: markFunction,
3901
3902	match: matchExpr,
3903
3904	attrHandle: {},
3905
3906	find: {},
3907
3908	relative: {
3909		">": { dir: "parentNode", first: true },
3910		" ": { dir: "parentNode" },
3911		"+": { dir: "previousSibling", first: true },
3912		"~": { dir: "previousSibling" }
3913	},
3914
3915	preFilter: {
3916		ATTR: function( match ) {
3917			match[ 1 ] = match[ 1 ].replace( runescape, funescape );
3918
3919			// Move the given value to match[3] whether quoted or unquoted
3920			match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" )
3921				.replace( runescape, funescape );
3922
3923			if ( match[ 2 ] === "~=" ) {
3924				match[ 3 ] = " " + match[ 3 ] + " ";
3925			}
3926
3927			return match.slice( 0, 4 );
3928		},
3929
3930		CHILD: function( match ) {
3931
3932			/* matches from matchExpr["CHILD"]
3933				1 type (only|nth|...)
3934				2 what (child|of-type)
3935				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
3936				4 xn-component of xn+y argument ([+-]?\d*n|)
3937				5 sign of xn-component
3938				6 x of xn-component
3939				7 sign of y-component
3940				8 y of y-component
3941			*/
3942			match[ 1 ] = match[ 1 ].toLowerCase();
3943
3944			if ( match[ 1 ].slice( 0, 3 ) === "nth" ) {
3945
3946				// nth-* requires argument
3947				if ( !match[ 3 ] ) {
3948					find.error( match[ 0 ] );
3949				}
3950
3951				// numeric x and y parameters for Expr.filter.CHILD
3952				// remember that false/true cast respectively to 0/1
3953				match[ 4 ] = +( match[ 4 ] ?
3954					match[ 5 ] + ( match[ 6 ] || 1 ) :
3955					2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" )
3956				);
3957				match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" );
3958
3959			// other types prohibit arguments
3960			} else if ( match[ 3 ] ) {
3961				find.error( match[ 0 ] );
3962			}
3963
3964			return match;
3965		},
3966
3967		PSEUDO: function( match ) {
3968			var excess,
3969				unquoted = !match[ 6 ] && match[ 2 ];
3970
3971			if ( matchExpr.CHILD.test( match[ 0 ] ) ) {
3972				return null;
3973			}
3974
3975			// Accept quoted arguments as-is
3976			if ( match[ 3 ] ) {
3977				match[ 2 ] = match[ 4 ] || match[ 5 ] || "";
3978
3979			// Strip excess characters from unquoted arguments
3980			} else if ( unquoted && rpseudo.test( unquoted ) &&
3981
3982				// Get excess from tokenize (recursively)
3983				( excess = tokenize( unquoted, true ) ) &&
3984
3985				// advance to the next closing parenthesis
3986				( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) {
3987
3988				// excess is a negative index
3989				match[ 0 ] = match[ 0 ].slice( 0, excess );
3990				match[ 2 ] = unquoted.slice( 0, excess );
3991			}
3992
3993			// Return only captures needed by the pseudo filter method (type and argument)
3994			return match.slice( 0, 3 );
3995		}
3996	},
3997
3998	filter: {
3999
4000		TAG: function( nodeNameSelector ) {
4001			var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
4002			return nodeNameSelector === "*" ?
4003				function() {
4004					return true;
4005				} :
4006				function( elem ) {
4007					return nodeName( elem, expectedNodeName );
4008				};
4009		},
4010
4011		CLASS: function( className ) {
4012			var pattern = classCache[ className + " " ];
4013
4014			return pattern ||
4015				( pattern = new RegExp( "(^|" + whitespace + ")" + className +
4016					"(" + whitespace + "|$)" ) ) &&
4017				classCache( className, function( elem ) {
4018					return pattern.test(
4019						typeof elem.className === "string" && elem.className ||
4020							typeof elem.getAttribute !== "undefined" &&
4021								elem.getAttribute( "class" ) ||
4022							""
4023					);
4024				} );
4025		},
4026
4027		ATTR: function( name, operator, check ) {
4028			return function( elem ) {
4029				var result = find.attr( elem, name );
4030
4031				if ( result == null ) {
4032					return operator === "!=";
4033				}
4034				if ( !operator ) {
4035					return true;
4036				}
4037
4038				result += "";
4039
4040				if ( operator === "=" ) {
4041					return result === check;
4042				}
4043				if ( operator === "!=" ) {
4044					return result !== check;
4045				}
4046				if ( operator === "^=" ) {
4047					return check && result.indexOf( check ) === 0;
4048				}
4049				if ( operator === "*=" ) {
4050					return check && result.indexOf( check ) > -1;
4051				}
4052				if ( operator === "$=" ) {
4053					return check && result.slice( -check.length ) === check;
4054				}
4055				if ( operator === "~=" ) {
4056					return ( " " + result.replace( rwhitespace, " " ) + " " )
4057						.indexOf( check ) > -1;
4058				}
4059				if ( operator === "|=" ) {
4060					return result === check || result.slice( 0, check.length + 1 ) === check + "-";
4061				}
4062
4063				return false;
4064			};
4065		},
4066
4067		CHILD: function( type, what, _argument, first, last ) {
4068			var simple = type.slice( 0, 3 ) !== "nth",
4069				forward = type.slice( -4 ) !== "last",
4070				ofType = what === "of-type";
4071
4072			return first === 1 && last === 0 ?
4073
4074				// Shortcut for :nth-*(n)
4075				function( elem ) {
4076					return !!elem.parentNode;
4077				} :
4078
4079				function( elem, _context, xml ) {
4080					var cache, outerCache, node, nodeIndex, start,
4081						dir = simple !== forward ? "nextSibling" : "previousSibling",
4082						parent = elem.parentNode,
4083						name = ofType && elem.nodeName.toLowerCase(),
4084						useCache = !xml && !ofType,
4085						diff = false;
4086
4087					if ( parent ) {
4088
4089						// :(first|last|only)-(child|of-type)
4090						if ( simple ) {
4091							while ( dir ) {
4092								node = elem;
4093								while ( ( node = node[ dir ] ) ) {
4094									if ( ofType ?
4095										nodeName( node, name ) :
4096										node.nodeType === 1 ) {
4097
4098										return false;
4099									}
4100								}
4101
4102								// Reverse direction for :only-* (if we haven't yet done so)
4103								start = dir = type === "only" && !start && "nextSibling";
4104							}
4105							return true;
4106						}
4107
4108						start = [ forward ? parent.firstChild : parent.lastChild ];
4109
4110						// non-xml :nth-child(...) stores cache data on `parent`
4111						if ( forward && useCache ) {
4112
4113							// Seek `elem` from a previously-cached index
4114							outerCache = parent[ expando ] || ( parent[ expando ] = {} );
4115							cache = outerCache[ type ] || [];
4116							nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
4117							diff = nodeIndex && cache[ 2 ];
4118							node = nodeIndex && parent.childNodes[ nodeIndex ];
4119
4120							while ( ( node = ++nodeIndex && node && node[ dir ] ||
4121
4122								// Fallback to seeking `elem` from the start
4123								( diff = nodeIndex = 0 ) || start.pop() ) ) {
4124
4125								// When found, cache indexes on `parent` and break
4126								if ( node.nodeType === 1 && ++diff && node === elem ) {
4127									outerCache[ type ] = [ dirruns, nodeIndex, diff ];
4128									break;
4129								}
4130							}
4131
4132						} else {
4133
4134							// Use previously-cached element index if available
4135							if ( useCache ) {
4136								outerCache = elem[ expando ] || ( elem[ expando ] = {} );
4137								cache = outerCache[ type ] || [];
4138								nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
4139								diff = nodeIndex;
4140							}
4141
4142							// xml :nth-child(...)
4143							// or :nth-last-child(...) or :nth(-last)?-of-type(...)
4144							if ( diff === false ) {
4145
4146								// Use the same loop as above to seek `elem` from the start
4147								while ( ( node = ++nodeIndex && node && node[ dir ] ||
4148									( diff = nodeIndex = 0 ) || start.pop() ) ) {
4149
4150									if ( ( ofType ?
4151										nodeName( node, name ) :
4152										node.nodeType === 1 ) &&
4153										++diff ) {
4154
4155										// Cache the index of each encountered element
4156										if ( useCache ) {
4157											outerCache = node[ expando ] ||
4158												( node[ expando ] = {} );
4159											outerCache[ type ] = [ dirruns, diff ];
4160										}
4161
4162										if ( node === elem ) {
4163											break;
4164										}
4165									}
4166								}
4167							}
4168						}
4169
4170						// Incorporate the offset, then check against cycle size
4171						diff -= last;
4172						return diff === first || ( diff % first === 0 && diff / first >= 0 );
4173					}
4174				};
4175		},
4176
4177		PSEUDO: function( pseudo, argument ) {
4178
4179			// pseudo-class names are case-insensitive
4180			// https://www.w3.org/TR/selectors/#pseudo-classes
4181			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
4182			// Remember that setFilters inherits from pseudos
4183			var args,
4184				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
4185					find.error( "unsupported pseudo: " + pseudo );
4186
4187			// The user may use createPseudo to indicate that
4188			// arguments are needed to create the filter function
4189			// just as jQuery does
4190			if ( fn[ expando ] ) {
4191				return fn( argument );
4192			}
4193
4194			// But maintain support for old signatures
4195			if ( fn.length > 1 ) {
4196				args = [ pseudo, pseudo, "", argument ];
4197				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
4198					markFunction( function( seed, matches ) {
4199						var idx,
4200							matched = fn( seed, argument ),
4201							i = matched.length;
4202						while ( i-- ) {
4203							idx = indexOf.call( seed, matched[ i ] );
4204							seed[ idx ] = !( matches[ idx ] = matched[ i ] );
4205						}
4206					} ) :
4207					function( elem ) {
4208						return fn( elem, 0, args );
4209					};
4210			}
4211
4212			return fn;
4213		}
4214	},
4215
4216	pseudos: {
4217
4218		// Potentially complex pseudos
4219		not: markFunction( function( selector ) {
4220
4221			// Trim the selector passed to compile
4222			// to avoid treating leading and trailing
4223			// spaces as combinators
4224			var input = [],
4225				results = [],
4226				matcher = compile( selector.replace( rtrimCSS, "$1" ) );
4227
4228			return matcher[ expando ] ?
4229				markFunction( function( seed, matches, _context, xml ) {
4230					var elem,
4231						unmatched = matcher( seed, null, xml, [] ),
4232						i = seed.length;
4233
4234					// Match elements unmatched by `matcher`
4235					while ( i-- ) {
4236						if ( ( elem = unmatched[ i ] ) ) {
4237							seed[ i ] = !( matches[ i ] = elem );
4238						}
4239					}
4240				} ) :
4241				function( elem, _context, xml ) {
4242					input[ 0 ] = elem;
4243					matcher( input, null, xml, results );
4244
4245					// Don't keep the element
4246					// (see https://github.com/jquery/sizzle/issues/299)
4247					input[ 0 ] = null;
4248					return !results.pop();
4249				};
4250		} ),
4251
4252		has: markFunction( function( selector ) {
4253			return function( elem ) {
4254				return find( selector, elem ).length > 0;
4255			};
4256		} ),
4257
4258		contains: markFunction( function( text ) {
4259			text = text.replace( runescape, funescape );
4260			return function( elem ) {
4261				return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;
4262			};
4263		} ),
4264
4265		// "Whether an element is represented by a :lang() selector
4266		// is based solely on the element's language value
4267		// being equal to the identifier C,
4268		// or beginning with the identifier C immediately followed by "-".
4269		// The matching of C against the element's language value is performed case-insensitively.
4270		// The identifier C does not have to be a valid language name."
4271		// https://www.w3.org/TR/selectors/#lang-pseudo
4272		lang: markFunction( function( lang ) {
4273
4274			// lang value must be a valid identifier
4275			if ( !ridentifier.test( lang || "" ) ) {
4276				find.error( "unsupported lang: " + lang );
4277			}
4278			lang = lang.replace( runescape, funescape ).toLowerCase();
4279			return function( elem ) {
4280				var elemLang;
4281				do {
4282					if ( ( elemLang = documentIsHTML ?
4283						elem.lang :
4284						elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) {
4285
4286						elemLang = elemLang.toLowerCase();
4287						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
4288					}
4289				} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );
4290				return false;
4291			};
4292		} ),
4293
4294		// Miscellaneous
4295		target: function( elem ) {
4296			var hash = window.location && window.location.hash;
4297			return hash && hash.slice( 1 ) === elem.id;
4298		},
4299
4300		root: function( elem ) {
4301			return elem === documentElement;
4302		},
4303
4304		focus: function( elem ) {
4305			return elem === safeActiveElement() &&
4306				document.hasFocus() &&
4307				!!( elem.type || elem.href || ~elem.tabIndex );
4308		},
4309
4310		// Boolean properties
4311		enabled: createDisabledPseudo( false ),
4312		disabled: createDisabledPseudo( true ),
4313
4314		checked: function( elem ) {
4315
4316			// In CSS3, :checked should return both checked and selected elements
4317			// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
4318			return ( nodeName( elem, "input" ) && !!elem.checked ) ||
4319				( nodeName( elem, "option" ) && !!elem.selected );
4320		},
4321
4322		selected: function( elem ) {
4323
4324			// Support: IE <=11+
4325			// Accessing the selectedIndex property
4326			// forces the browser to treat the default option as
4327			// selected when in an optgroup.
4328			if ( elem.parentNode ) {
4329				// eslint-disable-next-line no-unused-expressions
4330				elem.parentNode.selectedIndex;
4331			}
4332
4333			return elem.selected === true;
4334		},
4335
4336		// Contents
4337		empty: function( elem ) {
4338
4339			// https://www.w3.org/TR/selectors/#empty-pseudo
4340			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
4341			//   but not by others (comment: 8; processing instruction: 7; etc.)
4342			// nodeType < 6 works because attributes (2) do not appear as children
4343			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
4344				if ( elem.nodeType < 6 ) {
4345					return false;
4346				}
4347			}
4348			return true;
4349		},
4350
4351		parent: function( elem ) {
4352			return !Expr.pseudos.empty( elem );
4353		},
4354
4355		// Element/input types
4356		header: function( elem ) {
4357			return rheader.test( elem.nodeName );
4358		},
4359
4360		input: function( elem ) {
4361			return rinputs.test( elem.nodeName );
4362		},
4363
4364		button: function( elem ) {
4365			return nodeName( elem, "input" ) && elem.type === "button" ||
4366				nodeName( elem, "button" );
4367		},
4368
4369		text: function( elem ) {
4370			var attr;
4371			return nodeName( elem, "input" ) && elem.type === "text" &&
4372
4373				// Support: IE <10 only
4374				// New HTML5 attribute values (e.g., "search") appear
4375				// with elem.type === "text"
4376				( ( attr = elem.getAttribute( "type" ) ) == null ||
4377					attr.toLowerCase() === "text" );
4378		},
4379
4380		// Position-in-collection
4381		first: createPositionalPseudo( function() {
4382			return [ 0 ];
4383		} ),
4384
4385		last: createPositionalPseudo( function( _matchIndexes, length ) {
4386			return [ length - 1 ];
4387		} ),
4388
4389		eq: createPositionalPseudo( function( _matchIndexes, length, argument ) {
4390			return [ argument < 0 ? argument + length : argument ];
4391		} ),
4392
4393		even: createPositionalPseudo( function( matchIndexes, length ) {
4394			var i = 0;
4395			for ( ; i < length; i += 2 ) {
4396				matchIndexes.push( i );
4397			}
4398			return matchIndexes;
4399		} ),
4400
4401		odd: createPositionalPseudo( function( matchIndexes, length ) {
4402			var i = 1;
4403			for ( ; i < length; i += 2 ) {
4404				matchIndexes.push( i );
4405			}
4406			return matchIndexes;
4407		} ),
4408
4409		lt: createPositionalPseudo( function( matchIndexes, length, argument ) {
4410			var i;
4411
4412			if ( argument < 0 ) {
4413				i = argument + length;
4414			} else if ( argument > length ) {
4415				i = length;
4416			} else {
4417				i = argument;
4418			}
4419
4420			for ( ; --i >= 0; ) {
4421				matchIndexes.push( i );
4422			}
4423			return matchIndexes;
4424		} ),
4425
4426		gt: createPositionalPseudo( function( matchIndexes, length, argument ) {
4427			var i = argument < 0 ? argument + length : argument;
4428			for ( ; ++i < length; ) {
4429				matchIndexes.push( i );
4430			}
4431			return matchIndexes;
4432		} )
4433	}
4434};
4435
4436Expr.pseudos.nth = Expr.pseudos.eq;
4437
4438// Add button/input type pseudos
4439for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
4440	Expr.pseudos[ i ] = createInputPseudo( i );
4441}
4442for ( i in { submit: true, reset: true } ) {
4443	Expr.pseudos[ i ] = createButtonPseudo( i );
4444}
4445
4446// Easy API for creating new setFilters
4447function setFilters() {}
4448setFilters.prototype = Expr.filters = Expr.pseudos;
4449Expr.setFilters = new setFilters();
4450
4451function tokenize( selector, parseOnly ) {
4452	var matched, match, tokens, type,
4453		soFar, groups, preFilters,
4454		cached = tokenCache[ selector + " " ];
4455
4456	if ( cached ) {
4457		return parseOnly ? 0 : cached.slice( 0 );
4458	}
4459
4460	soFar = selector;
4461	groups = [];
4462	preFilters = Expr.preFilter;
4463
4464	while ( soFar ) {
4465
4466		// Comma and first run
4467		if ( !matched || ( match = rcomma.exec( soFar ) ) ) {
4468			if ( match ) {
4469
4470				// Don't consume trailing commas as valid
4471				soFar = soFar.slice( match[ 0 ].length ) || soFar;
4472			}
4473			groups.push( ( tokens = [] ) );
4474		}
4475
4476		matched = false;
4477
4478		// Combinators
4479		if ( ( match = rleadingCombinator.exec( soFar ) ) ) {
4480			matched = match.shift();
4481			tokens.push( {
4482				value: matched,
4483
4484				// Cast descendant combinators to space
4485				type: match[ 0 ].replace( rtrimCSS, " " )
4486			} );
4487			soFar = soFar.slice( matched.length );
4488		}
4489
4490		// Filters
4491		for ( type in Expr.filter ) {
4492			if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||
4493				( match = preFilters[ type ]( match ) ) ) ) {
4494				matched = match.shift();
4495				tokens.push( {
4496					value: matched,
4497					type: type,
4498					matches: match
4499				} );
4500				soFar = soFar.slice( matched.length );
4501			}
4502		}
4503
4504		if ( !matched ) {
4505			break;
4506		}
4507	}
4508
4509	// Return the length of the invalid excess
4510	// if we're just parsing
4511	// Otherwise, throw an error or return tokens
4512	if ( parseOnly ) {
4513		return soFar.length;
4514	}
4515
4516	return soFar ?
4517		find.error( selector ) :
4518
4519		// Cache the tokens
4520		tokenCache( selector, groups ).slice( 0 );
4521}
4522
4523function toSelector( tokens ) {
4524	var i = 0,
4525		len = tokens.length,
4526		selector = "";
4527	for ( ; i < len; i++ ) {
4528		selector += tokens[ i ].value;
4529	}
4530	return selector;
4531}
4532
4533function addCombinator( matcher, combinator, base ) {
4534	var dir = combinator.dir,
4535		skip = combinator.next,
4536		key = skip || dir,
4537		checkNonElements = base && key === "parentNode",
4538		doneName = done++;
4539
4540	return combinator.first ?
4541
4542		// Check against closest ancestor/preceding element
4543		function( elem, context, xml ) {
4544			while ( ( elem = elem[ dir ] ) ) {
4545				if ( elem.nodeType === 1 || checkNonElements ) {
4546					return matcher( elem, context, xml );
4547				}
4548			}
4549			return false;
4550		} :
4551
4552		// Check against all ancestor/preceding elements
4553		function( elem, context, xml ) {
4554			var oldCache, outerCache,
4555				newCache = [ dirruns, doneName ];
4556
4557			// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
4558			if ( xml ) {
4559				while ( ( elem = elem[ dir ] ) ) {
4560					if ( elem.nodeType === 1 || checkNonElements ) {
4561						if ( matcher( elem, context, xml ) ) {
4562							return true;
4563						}
4564					}
4565				}
4566			} else {
4567				while ( ( elem = elem[ dir ] ) ) {
4568					if ( elem.nodeType === 1 || checkNonElements ) {
4569						outerCache = elem[ expando ] || ( elem[ expando ] = {} );
4570
4571						if ( skip && nodeName( elem, skip ) ) {
4572							elem = elem[ dir ] || elem;
4573						} else if ( ( oldCache = outerCache[ key ] ) &&
4574							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
4575
4576							// Assign to newCache so results back-propagate to previous elements
4577							return ( newCache[ 2 ] = oldCache[ 2 ] );
4578						} else {
4579
4580							// Reuse newcache so results back-propagate to previous elements
4581							outerCache[ key ] = newCache;
4582
4583							// A match means we're done; a fail means we have to keep checking
4584							if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {
4585								return true;
4586							}
4587						}
4588					}
4589				}
4590			}
4591			return false;
4592		};
4593}
4594
4595function elementMatcher( matchers ) {
4596	return matchers.length > 1 ?
4597		function( elem, context, xml ) {
4598			var i = matchers.length;
4599			while ( i-- ) {
4600				if ( !matchers[ i ]( elem, context, xml ) ) {
4601					return false;
4602				}
4603			}
4604			return true;
4605		} :
4606		matchers[ 0 ];
4607}
4608
4609function multipleContexts( selector, contexts, results ) {
4610	var i = 0,
4611		len = contexts.length;
4612	for ( ; i < len; i++ ) {
4613		find( selector, contexts[ i ], results );
4614	}
4615	return results;
4616}
4617
4618function condense( unmatched, map, filter, context, xml ) {
4619	var elem,
4620		newUnmatched = [],
4621		i = 0,
4622		len = unmatched.length,
4623		mapped = map != null;
4624
4625	for ( ; i < len; i++ ) {
4626		if ( ( elem = unmatched[ i ] ) ) {
4627			if ( !filter || filter( elem, context, xml ) ) {
4628				newUnmatched.push( elem );
4629				if ( mapped ) {
4630					map.push( i );
4631				}
4632			}
4633		}
4634	}
4635
4636	return newUnmatched;
4637}
4638
4639function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
4640	if ( postFilter && !postFilter[ expando ] ) {
4641		postFilter = setMatcher( postFilter );
4642	}
4643	if ( postFinder && !postFinder[ expando ] ) {
4644		postFinder = setMatcher( postFinder, postSelector );
4645	}
4646	return markFunction( function( seed, results, context, xml ) {
4647		var temp, i, elem, matcherOut,
4648			preMap = [],
4649			postMap = [],
4650			preexisting = results.length,
4651
4652			// Get initial elements from seed or context
4653			elems = seed ||
4654				multipleContexts( selector || "*",
4655					context.nodeType ? [ context ] : context, [] ),
4656
4657			// Prefilter to get matcher input, preserving a map for seed-results synchronization
4658			matcherIn = preFilter && ( seed || !selector ) ?
4659				condense( elems, preMap, preFilter, context, xml ) :
4660				elems;
4661
4662		if ( matcher ) {
4663
4664			// If we have a postFinder, or filtered seed, or non-seed postFilter
4665			// or preexisting results,
4666			matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
4667
4668				// ...intermediate processing is necessary
4669				[] :
4670
4671				// ...otherwise use results directly
4672				results;
4673
4674			// Find primary matches
4675			matcher( matcherIn, matcherOut, context, xml );
4676		} else {
4677			matcherOut = matcherIn;
4678		}
4679
4680		// Apply postFilter
4681		if ( postFilter ) {
4682			temp = condense( matcherOut, postMap );
4683			postFilter( temp, [], context, xml );
4684
4685			// Un-match failing elements by moving them back to matcherIn
4686			i = temp.length;
4687			while ( i-- ) {
4688				if ( ( elem = temp[ i ] ) ) {
4689					matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );
4690				}
4691			}
4692		}
4693
4694		if ( seed ) {
4695			if ( postFinder || preFilter ) {
4696				if ( postFinder ) {
4697
4698					// Get the final matcherOut by condensing this intermediate into postFinder contexts
4699					temp = [];
4700					i = matcherOut.length;
4701					while ( i-- ) {
4702						if ( ( elem = matcherOut[ i ] ) ) {
4703
4704							// Restore matcherIn since elem is not yet a final match
4705							temp.push( ( matcherIn[ i ] = elem ) );
4706						}
4707					}
4708					postFinder( null, ( matcherOut = [] ), temp, xml );
4709				}
4710
4711				// Move matched elements from seed to results to keep them synchronized
4712				i = matcherOut.length;
4713				while ( i-- ) {
4714					if ( ( elem = matcherOut[ i ] ) &&
4715						( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {
4716
4717						seed[ temp ] = !( results[ temp ] = elem );
4718					}
4719				}
4720			}
4721
4722		// Add elements to results, through postFinder if defined
4723		} else {
4724			matcherOut = condense(
4725				matcherOut === results ?
4726					matcherOut.splice( preexisting, matcherOut.length ) :
4727					matcherOut
4728			);
4729			if ( postFinder ) {
4730				postFinder( null, results, matcherOut, xml );
4731			} else {
4732				push.apply( results, matcherOut );
4733			}
4734		}
4735	} );
4736}
4737
4738function matcherFromTokens( tokens ) {
4739	var checkContext, matcher, j,
4740		len = tokens.length,
4741		leadingRelative = Expr.relative[ tokens[ 0 ].type ],
4742		implicitRelative = leadingRelative || Expr.relative[ " " ],
4743		i = leadingRelative ? 1 : 0,
4744
4745		// The foundational matcher ensures that elements are reachable from top-level context(s)
4746		matchContext = addCombinator( function( elem ) {
4747			return elem === checkContext;
4748		}, implicitRelative, true ),
4749		matchAnyContext = addCombinator( function( elem ) {
4750			return indexOf.call( checkContext, elem ) > -1;
4751		}, implicitRelative, true ),
4752		matchers = [ function( elem, context, xml ) {
4753
4754			// Support: IE 11+, Edge 17 - 18+
4755			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
4756			// two documents; shallow comparisons work.
4757			// eslint-disable-next-line eqeqeq
4758			var ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (
4759				( checkContext = context ).nodeType ?
4760					matchContext( elem, context, xml ) :
4761					matchAnyContext( elem, context, xml ) );
4762
4763			// Avoid hanging onto element
4764			// (see https://github.com/jquery/sizzle/issues/299)
4765			checkContext = null;
4766			return ret;
4767		} ];
4768
4769	for ( ; i < len; i++ ) {
4770		if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {
4771			matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];
4772		} else {
4773			matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );
4774
4775			// Return special upon seeing a positional matcher
4776			if ( matcher[ expando ] ) {
4777
4778				// Find the next relative operator (if any) for proper handling
4779				j = ++i;
4780				for ( ; j < len; j++ ) {
4781					if ( Expr.relative[ tokens[ j ].type ] ) {
4782						break;
4783					}
4784				}
4785				return setMatcher(
4786					i > 1 && elementMatcher( matchers ),
4787					i > 1 && toSelector(
4788
4789						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
4790						tokens.slice( 0, i - 1 )
4791							.concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } )
4792					).replace( rtrimCSS, "$1" ),
4793					matcher,
4794					i < j && matcherFromTokens( tokens.slice( i, j ) ),
4795					j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),
4796					j < len && toSelector( tokens )
4797				);
4798			}
4799			matchers.push( matcher );
4800		}
4801	}
4802
4803	return elementMatcher( matchers );
4804}
4805
4806function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
4807	var bySet = setMatchers.length > 0,
4808		byElement = elementMatchers.length > 0,
4809		superMatcher = function( seed, context, xml, results, outermost ) {
4810			var elem, j, matcher,
4811				matchedCount = 0,
4812				i = "0",
4813				unmatched = seed && [],
4814				setMatched = [],
4815				contextBackup = outermostContext,
4816
4817				// We must always have either seed elements or outermost context
4818				elems = seed || byElement && Expr.find.TAG( "*", outermost ),
4819
4820				// Use integer dirruns iff this is the outermost matcher
4821				dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),
4822				len = elems.length;
4823
4824			if ( outermost ) {
4825
4826				// Support: IE 11+, Edge 17 - 18+
4827				// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
4828				// two documents; shallow comparisons work.
4829				// eslint-disable-next-line eqeqeq
4830				outermostContext = context == document || context || outermost;
4831			}
4832
4833			// Add elements passing elementMatchers directly to results
4834			// Support: iOS <=7 - 9 only
4835			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching
4836			// elements by id. (see trac-14142)
4837			for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {
4838				if ( byElement && elem ) {
4839					j = 0;
4840
4841					// Support: IE 11+, Edge 17 - 18+
4842					// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
4843					// two documents; shallow comparisons work.
4844					// eslint-disable-next-line eqeqeq
4845					if ( !context && elem.ownerDocument != document ) {
4846						setDocument( elem );
4847						xml = !documentIsHTML;
4848					}
4849					while ( ( matcher = elementMatchers[ j++ ] ) ) {
4850						if ( matcher( elem, context || document, xml ) ) {
4851							push.call( results, elem );
4852							break;
4853						}
4854					}
4855					if ( outermost ) {
4856						dirruns = dirrunsUnique;
4857					}
4858				}
4859
4860				// Track unmatched elements for set filters
4861				if ( bySet ) {
4862
4863					// They will have gone through all possible matchers
4864					if ( ( elem = !matcher && elem ) ) {
4865						matchedCount--;
4866					}
4867
4868					// Lengthen the array for every element, matched or not
4869					if ( seed ) {
4870						unmatched.push( elem );
4871					}
4872				}
4873			}
4874
4875			// `i` is now the count of elements visited above, and adding it to `matchedCount`
4876			// makes the latter nonnegative.
4877			matchedCount += i;
4878
4879			// Apply set filters to unmatched elements
4880			// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
4881			// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
4882			// no element matchers and no seed.
4883			// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
4884			// case, which will result in a "00" `matchedCount` that differs from `i` but is also
4885			// numerically zero.
4886			if ( bySet && i !== matchedCount ) {
4887				j = 0;
4888				while ( ( matcher = setMatchers[ j++ ] ) ) {
4889					matcher( unmatched, setMatched, context, xml );
4890				}
4891
4892				if ( seed ) {
4893
4894					// Reintegrate element matches to eliminate the need for sorting
4895					if ( matchedCount > 0 ) {
4896						while ( i-- ) {
4897							if ( !( unmatched[ i ] || setMatched[ i ] ) ) {
4898								setMatched[ i ] = pop.call( results );
4899							}
4900						}
4901					}
4902
4903					// Discard index placeholder values to get only actual matches
4904					setMatched = condense( setMatched );
4905				}
4906
4907				// Add matches to results
4908				push.apply( results, setMatched );
4909
4910				// Seedless set matches succeeding multiple successful matchers stipulate sorting
4911				if ( outermost && !seed && setMatched.length > 0 &&
4912					( matchedCount + setMatchers.length ) > 1 ) {
4913
4914					jQuery.uniqueSort( results );
4915				}
4916			}
4917
4918			// Override manipulation of globals by nested matchers
4919			if ( outermost ) {
4920				dirruns = dirrunsUnique;
4921				outermostContext = contextBackup;
4922			}
4923
4924			return unmatched;
4925		};
4926
4927	return bySet ?
4928		markFunction( superMatcher ) :
4929		superMatcher;
4930}
4931
4932function compile( selector, match /* Internal Use Only */ ) {
4933	var i,
4934		setMatchers = [],
4935		elementMatchers = [],
4936		cached = compilerCache[ selector + " " ];
4937
4938	if ( !cached ) {
4939
4940		// Generate a function of recursive functions that can be used to check each element
4941		if ( !match ) {
4942			match = tokenize( selector );
4943		}
4944		i = match.length;
4945		while ( i-- ) {
4946			cached = matcherFromTokens( match[ i ] );
4947			if ( cached[ expando ] ) {
4948				setMatchers.push( cached );
4949			} else {
4950				elementMatchers.push( cached );
4951			}
4952		}
4953
4954		// Cache the compiled function
4955		cached = compilerCache( selector,
4956			matcherFromGroupMatchers( elementMatchers, setMatchers ) );
4957
4958		// Save selector and tokenization
4959		cached.selector = selector;
4960	}
4961	return cached;
4962}
4963
4964/**
4965 * A low-level selection function that works with jQuery's compiled
4966 *  selector functions
4967 * @param {String|Function} selector A selector or a pre-compiled
4968 *  selector function built with jQuery selector compile
4969 * @param {Element} context
4970 * @param {Array} [results]
4971 * @param {Array} [seed] A set of elements to match against
4972 */
4973function select( selector, context, results, seed ) {
4974	var i, tokens, token, type, find,
4975		compiled = typeof selector === "function" && selector,
4976		match = !seed && tokenize( ( selector = compiled.selector || selector ) );
4977
4978	results = results || [];
4979
4980	// Try to minimize operations if there is only one selector in the list and no seed
4981	// (the latter of which guarantees us context)
4982	if ( match.length === 1 ) {
4983
4984		// Reduce context if the leading compound selector is an ID
4985		tokens = match[ 0 ] = match[ 0 ].slice( 0 );
4986		if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" &&
4987				context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {
4988
4989			context = ( Expr.find.ID(
4990				token.matches[ 0 ].replace( runescape, funescape ),
4991				context
4992			) || [] )[ 0 ];
4993			if ( !context ) {
4994				return results;
4995
4996			// Precompiled matchers will still verify ancestry, so step up a level
4997			} else if ( compiled ) {
4998				context = context.parentNode;
4999			}
5000
5001			selector = selector.slice( tokens.shift().value.length );
5002		}
5003
5004		// Fetch a seed set for right-to-left matching
5005		i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;
5006		while ( i-- ) {
5007			token = tokens[ i ];
5008
5009			// Abort if we hit a combinator
5010			if ( Expr.relative[ ( type = token.type ) ] ) {
5011				break;
5012			}
5013			if ( ( find = Expr.find[ type ] ) ) {
5014
5015				// Search, expanding context for leading sibling combinators
5016				if ( ( seed = find(
5017					token.matches[ 0 ].replace( runescape, funescape ),
5018					rsibling.test( tokens[ 0 ].type ) &&
5019						testContext( context.parentNode ) || context
5020				) ) ) {
5021
5022					// If seed is empty or no tokens remain, we can return early
5023					tokens.splice( i, 1 );
5024					selector = seed.length && toSelector( tokens );
5025					if ( !selector ) {
5026						push.apply( results, seed );
5027						return results;
5028					}
5029
5030					break;
5031				}
5032			}
5033		}
5034	}
5035
5036	// Compile and execute a filtering function if one is not provided
5037	// Provide `match` to avoid retokenization if we modified the selector above
5038	( compiled || compile( selector, match ) )(
5039		seed,
5040		context,
5041		!documentIsHTML,
5042		results,
5043		!context || rsibling.test( selector ) && testContext( context.parentNode ) || context
5044	);
5045	return results;
5046}
5047
5048// One-time assignments
5049
5050// Support: Android <=4.0 - 4.1+
5051// Sort stability
5052support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando;
5053
5054// Initialize against the default document
5055setDocument();
5056
5057// Support: Android <=4.0 - 4.1+
5058// Detached nodes confoundingly follow *each other*
5059support.sortDetached = assert( function( el ) {
5060
5061	// Should return 1, but returns 4 (following)
5062	return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1;
5063} );
5064
5065jQuery.find = find;
5066
5067// Deprecated
5068jQuery.expr[ ":" ] = jQuery.expr.pseudos;
5069jQuery.unique = jQuery.uniqueSort;
5070
5071// These have always been private, but they used to be documented as part of
5072// Sizzle so let's maintain them for now for backwards compatibility purposes.
5073find.compile = compile;
5074find.select = select;
5075find.setDocument = setDocument;
5076find.tokenize = tokenize;
5077
5078find.escape = jQuery.escapeSelector;
5079find.getText = jQuery.text;
5080find.isXML = jQuery.isXMLDoc;
5081find.selectors = jQuery.expr;
5082find.support = jQuery.support;
5083find.uniqueSort = jQuery.uniqueSort;
5084
5085	/* eslint-enable */
5086
5087} )();
5088
5089
5090var dir = function( elem, dir, until ) {
5091	var matched = [],
5092		truncate = until !== undefined;
5093
5094	while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
5095		if ( elem.nodeType === 1 ) {
5096			if ( truncate && jQuery( elem ).is( until ) ) {
5097				break;
5098			}
5099			matched.push( elem );
5100		}
5101	}
5102	return matched;
5103};
5104
5105
5106var siblings = function( n, elem ) {
5107	var matched = [];
5108
5109	for ( ; n; n = n.nextSibling ) {
5110		if ( n.nodeType === 1 && n !== elem ) {
5111			matched.push( n );
5112		}
5113	}
5114
5115	return matched;
5116};
5117
5118
5119var rneedsContext = jQuery.expr.match.needsContext;
5120
5121var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
5122
5123
5124
5125// Implement the identical functionality for filter and not
5126function winnow( elements, qualifier, not ) {
5127	if ( isFunction( qualifier ) ) {
5128		return jQuery.grep( elements, function( elem, i ) {
5129			return !!qualifier.call( elem, i, elem ) !== not;
5130		} );
5131	}
5132
5133	// Single element
5134	if ( qualifier.nodeType ) {
5135		return jQuery.grep( elements, function( elem ) {
5136			return ( elem === qualifier ) !== not;
5137		} );
5138	}
5139
5140	// Arraylike of elements (jQuery, arguments, Array)
5141	if ( typeof qualifier !== "string" ) {
5142		return jQuery.grep( elements, function( elem ) {
5143			return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
5144		} );
5145	}
5146
5147	// Filtered directly for both simple and complex selectors
5148	return jQuery.filter( qualifier, elements, not );
5149}
5150
5151jQuery.filter = function( expr, elems, not ) {
5152	var elem = elems[ 0 ];
5153
5154	if ( not ) {
5155		expr = ":not(" + expr + ")";
5156	}
5157
5158	if ( elems.length === 1 && elem.nodeType === 1 ) {
5159		return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
5160	}
5161
5162	return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
5163		return elem.nodeType === 1;
5164	} ) );
5165};
5166
5167jQuery.fn.extend( {
5168	find: function( selector ) {
5169		var i, ret,
5170			len = this.length,
5171			self = this;
5172
5173		if ( typeof selector !== "string" ) {
5174			return this.pushStack( jQuery( selector ).filter( function() {
5175				for ( i = 0; i < len; i++ ) {
5176					if ( jQuery.contains( self[ i ], this ) ) {
5177						return true;
5178					}
5179				}
5180			} ) );
5181		}
5182
5183		ret = this.pushStack( [] );
5184
5185		for ( i = 0; i < len; i++ ) {
5186			jQuery.find( selector, self[ i ], ret );
5187		}
5188
5189		return len > 1 ? jQuery.uniqueSort( ret ) : ret;
5190	},
5191	filter: function( selector ) {
5192		return this.pushStack( winnow( this, selector || [], false ) );
5193	},
5194	not: function( selector ) {
5195		return this.pushStack( winnow( this, selector || [], true ) );
5196	},
5197	is: function( selector ) {
5198		return !!winnow(
5199			this,
5200
5201			// If this is a positional/relative selector, check membership in the returned set
5202			// so $("p:first").is("p:last") won't return true for a doc with two "p".
5203			typeof selector === "string" && rneedsContext.test( selector ) ?
5204				jQuery( selector ) :
5205				selector || [],
5206			false
5207		).length;
5208	}
5209} );
5210
5211
5212// Initialize a jQuery object
5213
5214
5215// A central reference to the root jQuery(document)
5216var rootjQuery,
5217
5218	// A simple way to check for HTML strings
5219	// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)
5220	// Strict HTML recognition (trac-11290: must start with <)
5221	// Shortcut simple #id case for speed
5222	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
5223
5224	init = jQuery.fn.init = function( selector, context, root ) {
5225		var match, elem;
5226
5227		// HANDLE: $(""), $(null), $(undefined), $(false)
5228		if ( !selector ) {
5229			return this;
5230		}
5231
5232		// Method init() accepts an alternate rootjQuery
5233		// so migrate can support jQuery.sub (gh-2101)
5234		root = root || rootjQuery;
5235
5236		// Handle HTML strings
5237		if ( typeof selector === "string" ) {
5238			if ( selector[ 0 ] === "<" &&
5239				selector[ selector.length - 1 ] === ">" &&
5240				selector.length >= 3 ) {
5241
5242				// Assume that strings that start and end with <> are HTML and skip the regex check
5243				match = [ null, selector, null ];
5244
5245			} else {
5246				match = rquickExpr.exec( selector );
5247			}
5248
5249			// Match html or make sure no context is specified for #id
5250			if ( match && ( match[ 1 ] || !context ) ) {
5251
5252				// HANDLE: $(html) -> $(array)
5253				if ( match[ 1 ] ) {
5254					context = context instanceof jQuery ? context[ 0 ] : context;
5255
5256					// Option to run scripts is true for back-compat
5257					// Intentionally let the error be thrown if parseHTML is not present
5258					jQuery.merge( this, jQuery.parseHTML(
5259						match[ 1 ],
5260						context && context.nodeType ? context.ownerDocument || context : document,
5261						true
5262					) );
5263
5264					// HANDLE: $(html, props)
5265					if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
5266						for ( match in context ) {
5267
5268							// Properties of context are called as methods if possible
5269							if ( isFunction( this[ match ] ) ) {
5270								this[ match ]( context[ match ] );
5271
5272							// ...and otherwise set as attributes
5273							} else {
5274								this.attr( match, context[ match ] );
5275							}
5276						}
5277					}
5278
5279					return this;
5280
5281				// HANDLE: $(#id)
5282				} else {
5283					elem = document.getElementById( match[ 2 ] );
5284
5285					if ( elem ) {
5286
5287						// Inject the element directly into the jQuery object
5288						this[ 0 ] = elem;
5289						this.length = 1;
5290					}
5291					return this;
5292				}
5293
5294			// HANDLE: $(expr, $(...))
5295			} else if ( !context || context.jquery ) {
5296				return ( context || root ).find( selector );
5297
5298			// HANDLE: $(expr, context)
5299			// (which is just equivalent to: $(context).find(expr)
5300			} else {
5301				return this.constructor( context ).find( selector );
5302			}
5303
5304		// HANDLE: $(DOMElement)
5305		} else if ( selector.nodeType ) {
5306			this[ 0 ] = selector;
5307			this.length = 1;
5308			return this;
5309
5310		// HANDLE: $(function)
5311		// Shortcut for document ready
5312		} else if ( isFunction( selector ) ) {
5313			return root.ready !== undefined ?
5314				root.ready( selector ) :
5315
5316				// Execute immediately if ready is not present
5317				selector( jQuery );
5318		}
5319
5320		return jQuery.makeArray( selector, this );
5321	};
5322
5323// Give the init function the jQuery prototype for later instantiation
5324init.prototype = jQuery.fn;
5325
5326// Initialize central reference
5327rootjQuery = jQuery( document );
5328
5329
5330var rparentsprev = /^(?:parents|prev(?:Until|All))/,
5331
5332	// Methods guaranteed to produce a unique set when starting from a unique set
5333	guaranteedUnique = {
5334		children: true,
5335		contents: true,
5336		next: true,
5337		prev: true
5338	};
5339
5340jQuery.fn.extend( {
5341	has: function( target ) {
5342		var targets = jQuery( target, this ),
5343			l = targets.length;
5344
5345		return this.filter( function() {
5346			var i = 0;
5347			for ( ; i < l; i++ ) {
5348				if ( jQuery.contains( this, targets[ i ] ) ) {
5349					return true;
5350				}
5351			}
5352		} );
5353	},
5354
5355	closest: function( selectors, context ) {
5356		var cur,
5357			i = 0,
5358			l = this.length,
5359			matched = [],
5360			targets = typeof selectors !== "string" && jQuery( selectors );
5361
5362		// Positional selectors never match, since there's no _selection_ context
5363		if ( !rneedsContext.test( selectors ) ) {
5364			for ( ; i < l; i++ ) {
5365				for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
5366
5367					// Always skip document fragments
5368					if ( cur.nodeType < 11 && ( targets ?
5369						targets.index( cur ) > -1 :
5370
5371						// Don't pass non-elements to jQuery#find
5372						cur.nodeType === 1 &&
5373							jQuery.find.matchesSelector( cur, selectors ) ) ) {
5374
5375						matched.push( cur );
5376						break;
5377					}
5378				}
5379			}
5380		}
5381
5382		return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
5383	},
5384
5385	// Determine the position of an element within the set
5386	index: function( elem ) {
5387
5388		// No argument, return index in parent
5389		if ( !elem ) {
5390			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
5391		}
5392
5393		// Index in selector
5394		if ( typeof elem === "string" ) {
5395			return indexOf.call( jQuery( elem ), this[ 0 ] );
5396		}
5397
5398		// Locate the position of the desired element
5399		return indexOf.call( this,
5400
5401			// If it receives a jQuery object, the first element is used
5402			elem.jquery ? elem[ 0 ] : elem
5403		);
5404	},
5405
5406	add: function( selector, context ) {
5407		return this.pushStack(
5408			jQuery.uniqueSort(
5409				jQuery.merge( this.get(), jQuery( selector, context ) )
5410			)
5411		);
5412	},
5413
5414	addBack: function( selector ) {
5415		return this.add( selector == null ?
5416			this.prevObject : this.prevObject.filter( selector )
5417		);
5418	}
5419} );
5420
5421function sibling( cur, dir ) {
5422	while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
5423	return cur;
5424}
5425
5426jQuery.each( {
5427	parent: function( elem ) {
5428		var parent = elem.parentNode;
5429		return parent && parent.nodeType !== 11 ? parent : null;
5430	},
5431	parents: function( elem ) {
5432		return dir( elem, "parentNode" );
5433	},
5434	parentsUntil: function( elem, _i, until ) {
5435		return dir( elem, "parentNode", until );
5436	},
5437	next: function( elem ) {
5438		return sibling( elem, "nextSibling" );
5439	},
5440	prev: function( elem ) {
5441		return sibling( elem, "previousSibling" );
5442	},
5443	nextAll: function( elem ) {
5444		return dir( elem, "nextSibling" );
5445	},
5446	prevAll: function( elem ) {
5447		return dir( elem, "previousSibling" );
5448	},
5449	nextUntil: function( elem, _i, until ) {
5450		return dir( elem, "nextSibling", until );
5451	},
5452	prevUntil: function( elem, _i, until ) {
5453		return dir( elem, "previousSibling", until );
5454	},
5455	siblings: function( elem ) {
5456		return siblings( ( elem.parentNode || {} ).firstChild, elem );
5457	},
5458	children: function( elem ) {
5459		return siblings( elem.firstChild );
5460	},
5461	contents: function( elem ) {
5462		if ( elem.contentDocument != null &&
5463
5464			// Support: IE 11+
5465			// <object> elements with no `data` attribute has an object
5466			// `contentDocument` with a `null` prototype.
5467			getProto( elem.contentDocument ) ) {
5468
5469			return elem.contentDocument;
5470		}
5471
5472		// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
5473		// Treat the template element as a regular one in browsers that
5474		// don't support it.
5475		if ( nodeName( elem, "template" ) ) {
5476			elem = elem.content || elem;
5477		}
5478
5479		return jQuery.merge( [], elem.childNodes );
5480	}
5481}, function( name, fn ) {
5482	jQuery.fn[ name ] = function( until, selector ) {
5483		var matched = jQuery.map( this, fn, until );
5484
5485		if ( name.slice( -5 ) !== "Until" ) {
5486			selector = until;
5487		}
5488
5489		if ( selector && typeof selector === "string" ) {
5490			matched = jQuery.filter( selector, matched );
5491		}
5492
5493		if ( this.length > 1 ) {
5494
5495			// Remove duplicates
5496			if ( !guaranteedUnique[ name ] ) {
5497				jQuery.uniqueSort( matched );
5498			}
5499
5500			// Reverse order for parents* and prev-derivatives
5501			if ( rparentsprev.test( name ) ) {
5502				matched.reverse();
5503			}
5504		}
5505
5506		return this.pushStack( matched );
5507	};
5508} );
5509var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
5510
5511
5512
5513// Convert String-formatted options into Object-formatted ones
5514function createOptions( options ) {
5515	var object = {};
5516	jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
5517		object[ flag ] = true;
5518	} );
5519	return object;
5520}
5521
5522/*
5523 * Create a callback list using the following parameters:
5524 *
5525 *	options: an optional list of space-separated options that will change how
5526 *			the callback list behaves or a more traditional option object
5527 *
5528 * By default a callback list will act like an event callback list and can be
5529 * "fired" multiple times.
5530 *
5531 * Possible options:
5532 *
5533 *	once:			will ensure the callback list can only be fired once (like a Deferred)
5534 *
5535 *	memory:			will keep track of previous values and will call any callback added
5536 *					after the list has been fired right away with the latest "memorized"
5537 *					values (like a Deferred)
5538 *
5539 *	unique:			will ensure a callback can only be added once (no duplicate in the list)
5540 *
5541 *	stopOnFalse:	interrupt callings when a callback returns false
5542 *
5543 */
5544jQuery.Callbacks = function( options ) {
5545
5546	// Convert options from String-formatted to Object-formatted if needed
5547	// (we check in cache first)
5548	options = typeof options === "string" ?
5549		createOptions( options ) :
5550		jQuery.extend( {}, options );
5551
5552	var // Flag to know if list is currently firing
5553		firing,
5554
5555		// Last fire value for non-forgettable lists
5556		memory,
5557
5558		// Flag to know if list was already fired
5559		fired,
5560
5561		// Flag to prevent firing
5562		locked,
5563
5564		// Actual callback list
5565		list = [],
5566
5567		// Queue of execution data for repeatable lists
5568		queue = [],
5569
5570		// Index of currently firing callback (modified by add/remove as needed)
5571		firingIndex = -1,
5572
5573		// Fire callbacks
5574		fire = function() {
5575
5576			// Enforce single-firing
5577			locked = locked || options.once;
5578
5579			// Execute callbacks for all pending executions,
5580			// respecting firingIndex overrides and runtime changes
5581			fired = firing = true;
5582			for ( ; queue.length; firingIndex = -1 ) {
5583				memory = queue.shift();
5584				while ( ++firingIndex < list.length ) {
5585
5586					// Run callback and check for early termination
5587					if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
5588						options.stopOnFalse ) {
5589
5590						// Jump to end and forget the data so .add doesn't re-fire
5591						firingIndex = list.length;
5592						memory = false;
5593					}
5594				}
5595			}
5596
5597			// Forget the data if we're done with it
5598			if ( !options.memory ) {
5599				memory = false;
5600			}
5601
5602			firing = false;
5603
5604			// Clean up if we're done firing for good
5605			if ( locked ) {
5606
5607				// Keep an empty list if we have data for future add calls
5608				if ( memory ) {
5609					list = [];
5610
5611				// Otherwise, this object is spent
5612				} else {
5613					list = "";
5614				}
5615			}
5616		},
5617
5618		// Actual Callbacks object
5619		self = {
5620
5621			// Add a callback or a collection of callbacks to the list
5622			add: function() {
5623				if ( list ) {
5624
5625					// If we have memory from a past run, we should fire after adding
5626					if ( memory && !firing ) {
5627						firingIndex = list.length - 1;
5628						queue.push( memory );
5629					}
5630
5631					( function add( args ) {
5632						jQuery.each( args, function( _, arg ) {
5633							if ( isFunction( arg ) ) {
5634								if ( !options.unique || !self.has( arg ) ) {
5635									list.push( arg );
5636								}
5637							} else if ( arg && arg.length && toType( arg ) !== "string" ) {
5638
5639								// Inspect recursively
5640								add( arg );
5641							}
5642						} );
5643					} )( arguments );
5644
5645					if ( memory && !firing ) {
5646						fire();
5647					}
5648				}
5649				return this;
5650			},
5651
5652			// Remove a callback from the list
5653			remove: function() {
5654				jQuery.each( arguments, function( _, arg ) {
5655					var index;
5656					while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
5657						list.splice( index, 1 );
5658
5659						// Handle firing indexes
5660						if ( index <= firingIndex ) {
5661							firingIndex--;
5662						}
5663					}
5664				} );
5665				return this;
5666			},
5667
5668			// Check if a given callback is in the list.
5669			// If no argument is given, return whether or not list has callbacks attached.
5670			has: function( fn ) {
5671				return fn ?
5672					jQuery.inArray( fn, list ) > -1 :
5673					list.length > 0;
5674			},
5675
5676			// Remove all callbacks from the list
5677			empty: function() {
5678				if ( list ) {
5679					list = [];
5680				}
5681				return this;
5682			},
5683
5684			// Disable .fire and .add
5685			// Abort any current/pending executions
5686			// Clear all callbacks and values
5687			disable: function() {
5688				locked = queue = [];
5689				list = memory = "";
5690				return this;
5691			},
5692			disabled: function() {
5693				return !list;
5694			},
5695
5696			// Disable .fire
5697			// Also disable .add unless we have memory (since it would have no effect)
5698			// Abort any pending executions
5699			lock: function() {
5700				locked = queue = [];
5701				if ( !memory && !firing ) {
5702					list = memory = "";
5703				}
5704				return this;
5705			},
5706			locked: function() {
5707				return !!locked;
5708			},
5709
5710			// Call all callbacks with the given context and arguments
5711			fireWith: function( context, args ) {
5712				if ( !locked ) {
5713					args = args || [];
5714					args = [ context, args.slice ? args.slice() : args ];
5715					queue.push( args );
5716					if ( !firing ) {
5717						fire();
5718					}
5719				}
5720				return this;
5721			},
5722
5723			// Call all the callbacks with the given arguments
5724			fire: function() {
5725				self.fireWith( this, arguments );
5726				return this;
5727			},
5728
5729			// To know if the callbacks have already been called at least once
5730			fired: function() {
5731				return !!fired;
5732			}
5733		};
5734
5735	return self;
5736};
5737
5738
5739function Identity( v ) {
5740	return v;
5741}
5742function Thrower( ex ) {
5743	throw ex;
5744}
5745
5746function adoptValue( value, resolve, reject, noValue ) {
5747	var method;
5748
5749	try {
5750
5751		// Check for promise aspect first to privilege synchronous behavior
5752		if ( value && isFunction( ( method = value.promise ) ) ) {
5753			method.call( value ).done( resolve ).fail( reject );
5754
5755		// Other thenables
5756		} else if ( value && isFunction( ( method = value.then ) ) ) {
5757			method.call( value, resolve, reject );
5758
5759		// Other non-thenables
5760		} else {
5761
5762			// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
5763			// * false: [ value ].slice( 0 ) => resolve( value )
5764			// * true: [ value ].slice( 1 ) => resolve()
5765			resolve.apply( undefined, [ value ].slice( noValue ) );
5766		}
5767
5768	// For Promises/A+, convert exceptions into rejections
5769	// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
5770	// Deferred#then to conditionally suppress rejection.
5771	} catch ( value ) {
5772
5773		// Support: Android 4.0 only
5774		// Strict mode functions invoked without .call/.apply get global-object context
5775		reject.apply( undefined, [ value ] );
5776	}
5777}
5778
5779jQuery.extend( {
5780
5781	Deferred: function( func ) {
5782		var tuples = [
5783
5784				// action, add listener, callbacks,
5785				// ... .then handlers, argument index, [final state]
5786				[ "notify", "progress", jQuery.Callbacks( "memory" ),
5787					jQuery.Callbacks( "memory" ), 2 ],
5788				[ "resolve", "done", jQuery.Callbacks( "once memory" ),
5789					jQuery.Callbacks( "once memory" ), 0, "resolved" ],
5790				[ "reject", "fail", jQuery.Callbacks( "once memory" ),
5791					jQuery.Callbacks( "once memory" ), 1, "rejected" ]
5792			],
5793			state = "pending",
5794			promise = {
5795				state: function() {
5796					return state;
5797				},
5798				always: function() {
5799					deferred.done( arguments ).fail( arguments );
5800					return this;
5801				},
5802				"catch": function( fn ) {
5803					return promise.then( null, fn );
5804				},
5805
5806				// Keep pipe for back-compat
5807				pipe: function( /* fnDone, fnFail, fnProgress */ ) {
5808					var fns = arguments;
5809
5810					return jQuery.Deferred( function( newDefer ) {
5811						jQuery.each( tuples, function( _i, tuple ) {
5812
5813							// Map tuples (progress, done, fail) to arguments (done, fail, progress)
5814							var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
5815
5816							// deferred.progress(function() { bind to newDefer or newDefer.notify })
5817							// deferred.done(function() { bind to newDefer or newDefer.resolve })
5818							// deferred.fail(function() { bind to newDefer or newDefer.reject })
5819							deferred[ tuple[ 1 ] ]( function() {
5820								var returned = fn && fn.apply( this, arguments );
5821								if ( returned && isFunction( returned.promise ) ) {
5822									returned.promise()
5823										.progress( newDefer.notify )
5824										.done( newDefer.resolve )
5825										.fail( newDefer.reject );
5826								} else {
5827									newDefer[ tuple[ 0 ] + "With" ](
5828										this,
5829										fn ? [ returned ] : arguments
5830									);
5831								}
5832							} );
5833						} );
5834						fns = null;
5835					} ).promise();
5836				},
5837				then: function( onFulfilled, onRejected, onProgress ) {
5838					var maxDepth = 0;
5839					function resolve( depth, deferred, handler, special ) {
5840						return function() {
5841							var that = this,
5842								args = arguments,
5843								mightThrow = function() {
5844									var returned, then;
5845
5846									// Support: Promises/A+ section 2.3.3.3.3
5847									// https://promisesaplus.com/#point-59
5848									// Ignore double-resolution attempts
5849									if ( depth < maxDepth ) {
5850										return;
5851									}
5852
5853									returned = handler.apply( that, args );
5854
5855									// Support: Promises/A+ section 2.3.1
5856									// https://promisesaplus.com/#point-48
5857									if ( returned === deferred.promise() ) {
5858										throw new TypeError( "Thenable self-resolution" );
5859									}
5860
5861									// Support: Promises/A+ sections 2.3.3.1, 3.5
5862									// https://promisesaplus.com/#point-54
5863									// https://promisesaplus.com/#point-75
5864									// Retrieve `then` only once
5865									then = returned &&
5866
5867										// Support: Promises/A+ section 2.3.4
5868										// https://promisesaplus.com/#point-64
5869										// Only check objects and functions for thenability
5870										( typeof returned === "object" ||
5871											typeof returned === "function" ) &&
5872										returned.then;
5873
5874									// Handle a returned thenable
5875									if ( isFunction( then ) ) {
5876
5877										// Special processors (notify) just wait for resolution
5878										if ( special ) {
5879											then.call(
5880												returned,
5881												resolve( maxDepth, deferred, Identity, special ),
5882												resolve( maxDepth, deferred, Thrower, special )
5883											);
5884
5885										// Normal processors (resolve) also hook into progress
5886										} else {
5887
5888											// ...and disregard older resolution values
5889											maxDepth++;
5890
5891											then.call(
5892												returned,
5893												resolve( maxDepth, deferred, Identity, special ),
5894												resolve( maxDepth, deferred, Thrower, special ),
5895												resolve( maxDepth, deferred, Identity,
5896													deferred.notifyWith )
5897											);
5898										}
5899
5900									// Handle all other returned values
5901									} else {
5902
5903										// Only substitute handlers pass on context
5904										// and multiple values (non-spec behavior)
5905										if ( handler !== Identity ) {
5906											that = undefined;
5907											args = [ returned ];
5908										}
5909
5910										// Process the value(s)
5911										// Default process is resolve
5912										( special || deferred.resolveWith )( that, args );
5913									}
5914								},
5915
5916								// Only normal processors (resolve) catch and reject exceptions
5917								process = special ?
5918									mightThrow :
5919									function() {
5920										try {
5921											mightThrow();
5922										} catch ( e ) {
5923
5924											if ( jQuery.Deferred.exceptionHook ) {
5925												jQuery.Deferred.exceptionHook( e,
5926													process.error );
5927											}
5928
5929											// Support: Promises/A+ section 2.3.3.3.4.1
5930											// https://promisesaplus.com/#point-61
5931											// Ignore post-resolution exceptions
5932											if ( depth + 1 >= maxDepth ) {
5933
5934												// Only substitute handlers pass on context
5935												// and multiple values (non-spec behavior)
5936												if ( handler !== Thrower ) {
5937													that = undefined;
5938													args = [ e ];
5939												}
5940
5941												deferred.rejectWith( that, args );
5942											}
5943										}
5944									};
5945
5946							// Support: Promises/A+ section 2.3.3.3.1
5947							// https://promisesaplus.com/#point-57
5948							// Re-resolve promises immediately to dodge false rejection from
5949							// subsequent errors
5950							if ( depth ) {
5951								process();
5952							} else {
5953
5954								// Call an optional hook to record the error, in case of exception
5955								// since it's otherwise lost when execution goes async
5956								if ( jQuery.Deferred.getErrorHook ) {
5957									process.error = jQuery.Deferred.getErrorHook();
5958
5959								// The deprecated alias of the above. While the name suggests
5960								// returning the stack, not an error instance, jQuery just passes
5961								// it directly to `console.warn` so both will work; an instance
5962								// just better cooperates with source maps.
5963								} else if ( jQuery.Deferred.getStackHook ) {
5964									process.error = jQuery.Deferred.getStackHook();
5965								}
5966								window.setTimeout( process );
5967							}
5968						};
5969					}
5970
5971					return jQuery.Deferred( function( newDefer ) {
5972
5973						// progress_handlers.add( ... )
5974						tuples[ 0 ][ 3 ].add(
5975							resolve(
5976								0,
5977								newDefer,
5978								isFunction( onProgress ) ?
5979									onProgress :
5980									Identity,
5981								newDefer.notifyWith
5982							)
5983						);
5984
5985						// fulfilled_handlers.add( ... )
5986						tuples[ 1 ][ 3 ].add(
5987							resolve(
5988								0,
5989								newDefer,
5990								isFunction( onFulfilled ) ?
5991									onFulfilled :
5992									Identity
5993							)
5994						);
5995
5996						// rejected_handlers.add( ... )
5997						tuples[ 2 ][ 3 ].add(
5998							resolve(
5999								0,
6000								newDefer,
6001								isFunction( onRejected ) ?
6002									onRejected :
6003									Thrower
6004							)
6005						);
6006					} ).promise();
6007				},
6008
6009				// Get a promise for this deferred
6010				// If obj is provided, the promise aspect is added to the object
6011				promise: function( obj ) {
6012					return obj != null ? jQuery.extend( obj, promise ) : promise;
6013				}
6014			},
6015			deferred = {};
6016
6017		// Add list-specific methods
6018		jQuery.each( tuples, function( i, tuple ) {
6019			var list = tuple[ 2 ],
6020				stateString = tuple[ 5 ];
6021
6022			// promise.progress = list.add
6023			// promise.done = list.add
6024			// promise.fail = list.add
6025			promise[ tuple[ 1 ] ] = list.add;
6026
6027			// Handle state
6028			if ( stateString ) {
6029				list.add(
6030					function() {
6031
6032						// state = "resolved" (i.e., fulfilled)
6033						// state = "rejected"
6034						state = stateString;
6035					},
6036
6037					// rejected_callbacks.disable
6038					// fulfilled_callbacks.disable
6039					tuples[ 3 - i ][ 2 ].disable,
6040
6041					// rejected_handlers.disable
6042					// fulfilled_handlers.disable
6043					tuples[ 3 - i ][ 3 ].disable,
6044
6045					// progress_callbacks.lock
6046					tuples[ 0 ][ 2 ].lock,
6047
6048					// progress_handlers.lock
6049					tuples[ 0 ][ 3 ].lock
6050				);
6051			}
6052
6053			// progress_handlers.fire
6054			// fulfilled_handlers.fire
6055			// rejected_handlers.fire
6056			list.add( tuple[ 3 ].fire );
6057
6058			// deferred.notify = function() { deferred.notifyWith(...) }
6059			// deferred.resolve = function() { deferred.resolveWith(...) }
6060			// deferred.reject = function() { deferred.rejectWith(...) }
6061			deferred[ tuple[ 0 ] ] = function() {
6062				deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
6063				return this;
6064			};
6065
6066			// deferred.notifyWith = list.fireWith
6067			// deferred.resolveWith = list.fireWith
6068			// deferred.rejectWith = list.fireWith
6069			deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
6070		} );
6071
6072		// Make the deferred a promise
6073		promise.promise( deferred );
6074
6075		// Call given func if any
6076		if ( func ) {
6077			func.call( deferred, deferred );
6078		}
6079
6080		// All done!
6081		return deferred;
6082	},
6083
6084	// Deferred helper
6085	when: function( singleValue ) {
6086		var
6087
6088			// count of uncompleted subordinates
6089			remaining = arguments.length,
6090
6091			// count of unprocessed arguments
6092			i = remaining,
6093
6094			// subordinate fulfillment data
6095			resolveContexts = Array( i ),
6096			resolveValues = slice.call( arguments ),
6097
6098			// the primary Deferred
6099			primary = jQuery.Deferred(),
6100
6101			// subordinate callback factory
6102			updateFunc = function( i ) {
6103				return function( value ) {
6104					resolveContexts[ i ] = this;
6105					resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
6106					if ( !( --remaining ) ) {
6107						primary.resolveWith( resolveContexts, resolveValues );
6108					}
6109				};
6110			};
6111
6112		// Single- and empty arguments are adopted like Promise.resolve
6113		if ( remaining <= 1 ) {
6114			adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,
6115				!remaining );
6116
6117			// Use .then() to unwrap secondary thenables (cf. gh-3000)
6118			if ( primary.state() === "pending" ||
6119				isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
6120
6121				return primary.then();
6122			}
6123		}
6124
6125		// Multiple arguments are aggregated like Promise.all array elements
6126		while ( i-- ) {
6127			adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );
6128		}
6129
6130		return primary.promise();
6131	}
6132} );
6133
6134
6135// These usually indicate a programmer mistake during development,
6136// warn about them ASAP rather than swallowing them by default.
6137var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
6138
6139// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error
6140// captured before the async barrier to get the original error cause
6141// which may otherwise be hidden.
6142jQuery.Deferred.exceptionHook = function( error, asyncError ) {
6143
6144	// Support: IE 8 - 9 only
6145	// Console exists when dev tools are open, which can happen at any time
6146	if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
6147		window.console.warn( "jQuery.Deferred exception: " + error.message,
6148			error.stack, asyncError );
6149	}
6150};
6151
6152
6153
6154
6155jQuery.readyException = function( error ) {
6156	window.setTimeout( function() {
6157		throw error;
6158	} );
6159};
6160
6161
6162
6163
6164// The deferred used on DOM ready
6165var readyList = jQuery.Deferred();
6166
6167jQuery.fn.ready = function( fn ) {
6168
6169	readyList
6170		.then( fn )
6171
6172		// Wrap jQuery.readyException in a function so that the lookup
6173		// happens at the time of error handling instead of callback
6174		// registration.
6175		.catch( function( error ) {
6176			jQuery.readyException( error );
6177		} );
6178
6179	return this;
6180};
6181
6182jQuery.extend( {
6183
6184	// Is the DOM ready to be used? Set to true once it occurs.
6185	isReady: false,
6186
6187	// A counter to track how many items to wait for before
6188	// the ready event fires. See trac-6781
6189	readyWait: 1,
6190
6191	// Handle when the DOM is ready
6192	ready: function( wait ) {
6193
6194		// Abort if there are pending holds or we're already ready
6195		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
6196			return;
6197		}
6198
6199		// Remember that the DOM is ready
6200		jQuery.isReady = true;
6201
6202		// If a normal DOM Ready event fired, decrement, and wait if need be
6203		if ( wait !== true && --jQuery.readyWait > 0 ) {
6204			return;
6205		}
6206
6207		// If there are functions bound, to execute
6208		readyList.resolveWith( document, [ jQuery ] );
6209	}
6210} );
6211
6212jQuery.ready.then = readyList.then;
6213
6214// The ready event handler and self cleanup method
6215function completed() {
6216	document.removeEventListener( "DOMContentLoaded", completed );
6217	window.removeEventListener( "load", completed );
6218	jQuery.ready();
6219}
6220
6221// Catch cases where $(document).ready() is called
6222// after the browser event has already occurred.
6223// Support: IE <=9 - 10 only
6224// Older IE sometimes signals "interactive" too soon
6225if ( document.readyState === "complete" ||
6226	( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
6227
6228	// Handle it asynchronously to allow scripts the opportunity to delay ready
6229	window.setTimeout( jQuery.ready );
6230
6231} else {
6232
6233	// Use the handy event callback
6234	document.addEventListener( "DOMContentLoaded", completed );
6235
6236	// A fallback to window.onload, that will always work
6237	window.addEventListener( "load", completed );
6238}
6239
6240
6241
6242
6243// Multifunctional method to get and set values of a collection
6244// The value/s can optionally be executed if it's a function
6245var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
6246	var i = 0,
6247		len = elems.length,
6248		bulk = key == null;
6249
6250	// Sets many values
6251	if ( toType( key ) === "object" ) {
6252		chainable = true;
6253		for ( i in key ) {
6254			access( elems, fn, i, key[ i ], true, emptyGet, raw );
6255		}
6256
6257	// Sets one value
6258	} else if ( value !== undefined ) {
6259		chainable = true;
6260
6261		if ( !isFunction( value ) ) {
6262			raw = true;
6263		}
6264
6265		if ( bulk ) {
6266
6267			// Bulk operations run against the entire set
6268			if ( raw ) {
6269				fn.call( elems, value );
6270				fn = null;
6271
6272			// ...except when executing function values
6273			} else {
6274				bulk = fn;
6275				fn = function( elem, _key, value ) {
6276					return bulk.call( jQuery( elem ), value );
6277				};
6278			}
6279		}
6280
6281		if ( fn ) {
6282			for ( ; i < len; i++ ) {
6283				fn(
6284					elems[ i ], key, raw ?
6285						value :
6286						value.call( elems[ i ], i, fn( elems[ i ], key ) )
6287				);
6288			}
6289		}
6290	}
6291
6292	if ( chainable ) {
6293		return elems;
6294	}
6295
6296	// Gets
6297	if ( bulk ) {
6298		return fn.call( elems );
6299	}
6300
6301	return len ? fn( elems[ 0 ], key ) : emptyGet;
6302};
6303
6304
6305// Matches dashed string for camelizing
6306var rmsPrefix = /^-ms-/,
6307	rdashAlpha = /-([a-z])/g;
6308
6309// Used by camelCase as callback to replace()
6310function fcamelCase( _all, letter ) {
6311	return letter.toUpperCase();
6312}
6313
6314// Convert dashed to camelCase; used by the css and data modules
6315// Support: IE <=9 - 11, Edge 12 - 15
6316// Microsoft forgot to hump their vendor prefix (trac-9572)
6317function camelCase( string ) {
6318	return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
6319}
6320var acceptData = function( owner ) {
6321
6322	// Accepts only:
6323	//  - Node
6324	//    - Node.ELEMENT_NODE
6325	//    - Node.DOCUMENT_NODE
6326	//  - Object
6327	//    - Any
6328	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
6329};
6330
6331
6332
6333
6334function Data() {
6335	this.expando = jQuery.expando + Data.uid++;
6336}
6337
6338Data.uid = 1;
6339
6340Data.prototype = {
6341
6342	cache: function( owner ) {
6343
6344		// Check if the owner object already has a cache
6345		var value = owner[ this.expando ];
6346
6347		// If not, create one
6348		if ( !value ) {
6349			value = {};
6350
6351			// We can accept data for non-element nodes in modern browsers,
6352			// but we should not, see trac-8335.
6353			// Always return an empty object.
6354			if ( acceptData( owner ) ) {
6355
6356				// If it is a node unlikely to be stringify-ed or looped over
6357				// use plain assignment
6358				if ( owner.nodeType ) {
6359					owner[ this.expando ] = value;
6360
6361				// Otherwise secure it in a non-enumerable property
6362				// configurable must be true to allow the property to be
6363				// deleted when data is removed
6364				} else {
6365					Object.defineProperty( owner, this.expando, {
6366						value: value,
6367						configurable: true
6368					} );
6369				}
6370			}
6371		}
6372
6373		return value;
6374	},
6375	set: function( owner, data, value ) {
6376		var prop,
6377			cache = this.cache( owner );
6378
6379		// Handle: [ owner, key, value ] args
6380		// Always use camelCase key (gh-2257)
6381		if ( typeof data === "string" ) {
6382			cache[ camelCase( data ) ] = value;
6383
6384		// Handle: [ owner, { properties } ] args
6385		} else {
6386
6387			// Copy the properties one-by-one to the cache object
6388			for ( prop in data ) {
6389				cache[ camelCase( prop ) ] = data[ prop ];
6390			}
6391		}
6392		return cache;
6393	},
6394	get: function( owner, key ) {
6395		return key === undefined ?
6396			this.cache( owner ) :
6397
6398			// Always use camelCase key (gh-2257)
6399			owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];
6400	},
6401	access: function( owner, key, value ) {
6402
6403		// In cases where either:
6404		//
6405		//   1. No key was specified
6406		//   2. A string key was specified, but no value provided
6407		//
6408		// Take the "read" path and allow the get method to determine
6409		// which value to return, respectively either:
6410		//
6411		//   1. The entire cache object
6412		//   2. The data stored at the key
6413		//
6414		if ( key === undefined ||
6415				( ( key && typeof key === "string" ) && value === undefined ) ) {
6416
6417			return this.get( owner, key );
6418		}
6419
6420		// When the key is not a string, or both a key and value
6421		// are specified, set or extend (existing objects) with either:
6422		//
6423		//   1. An object of properties
6424		//   2. A key and value
6425		//
6426		this.set( owner, key, value );
6427
6428		// Since the "set" path can have two possible entry points
6429		// return the expected data based on which path was taken[*]
6430		return value !== undefined ? value : key;
6431	},
6432	remove: function( owner, key ) {
6433		var i,
6434			cache = owner[ this.expando ];
6435
6436		if ( cache === undefined ) {
6437			return;
6438		}
6439
6440		if ( key !== undefined ) {
6441
6442			// Support array or space separated string of keys
6443			if ( Array.isArray( key ) ) {
6444
6445				// If key is an array of keys...
6446				// We always set camelCase keys, so remove that.
6447				key = key.map( camelCase );
6448			} else {
6449				key = camelCase( key );
6450
6451				// If a key with the spaces exists, use it.
6452				// Otherwise, create an array by matching non-whitespace
6453				key = key in cache ?
6454					[ key ] :
6455					( key.match( rnothtmlwhite ) || [] );
6456			}
6457
6458			i = key.length;
6459
6460			while ( i-- ) {
6461				delete cache[ key[ i ] ];
6462			}
6463		}
6464
6465		// Remove the expando if there's no more data
6466		if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
6467
6468			// Support: Chrome <=35 - 45
6469			// Webkit & Blink performance suffers when deleting properties
6470			// from DOM nodes, so set to undefined instead
6471			// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
6472			if ( owner.nodeType ) {
6473				owner[ this.expando ] = undefined;
6474			} else {
6475				delete owner[ this.expando ];
6476			}
6477		}
6478	},
6479	hasData: function( owner ) {
6480		var cache = owner[ this.expando ];
6481		return cache !== undefined && !jQuery.isEmptyObject( cache );
6482	}
6483};
6484var dataPriv = new Data();
6485
6486var dataUser = new Data();
6487
6488
6489
6490//	Implementation Summary
6491//
6492//	1. Enforce API surface and semantic compatibility with 1.9.x branch
6493//	2. Improve the module's maintainability by reducing the storage
6494//		paths to a single mechanism.
6495//	3. Use the same single mechanism to support "private" and "user" data.
6496//	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
6497//	5. Avoid exposing implementation details on user objects (eg. expando properties)
6498//	6. Provide a clear path for implementation upgrade to WeakMap in 2014
6499
6500var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
6501	rmultiDash = /[A-Z]/g;
6502
6503function getData( data ) {
6504	if ( data === "true" ) {
6505		return true;
6506	}
6507
6508	if ( data === "false" ) {
6509		return false;
6510	}
6511
6512	if ( data === "null" ) {
6513		return null;
6514	}
6515
6516	// Only convert to a number if it doesn't change the string
6517	if ( data === +data + "" ) {
6518		return +data;
6519	}
6520
6521	if ( rbrace.test( data ) ) {
6522		return JSON.parse( data );
6523	}
6524
6525	return data;
6526}
6527
6528function dataAttr( elem, key, data ) {
6529	var name;
6530
6531	// If nothing was found internally, try to fetch any
6532	// data from the HTML5 data-* attribute
6533	if ( data === undefined && elem.nodeType === 1 ) {
6534		name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
6535		data = elem.getAttribute( name );
6536
6537		if ( typeof data === "string" ) {
6538			try {
6539				data = getData( data );
6540			} catch ( e ) {}
6541
6542			// Make sure we set the data so it isn't changed later
6543			dataUser.set( elem, key, data );
6544		} else {
6545			data = undefined;
6546		}
6547	}
6548	return data;
6549}
6550
6551jQuery.extend( {
6552	hasData: function( elem ) {
6553		return dataUser.hasData( elem ) || dataPriv.hasData( elem );
6554	},
6555
6556	data: function( elem, name, data ) {
6557		return dataUser.access( elem, name, data );
6558	},
6559
6560	removeData: function( elem, name ) {
6561		dataUser.remove( elem, name );
6562	},
6563
6564	// TODO: Now that all calls to _data and _removeData have been replaced
6565	// with direct calls to dataPriv methods, these can be deprecated.
6566	_data: function( elem, name, data ) {
6567		return dataPriv.access( elem, name, data );
6568	},
6569
6570	_removeData: function( elem, name ) {
6571		dataPriv.remove( elem, name );
6572	}
6573} );
6574
6575jQuery.fn.extend( {
6576	data: function( key, value ) {
6577		var i, name, data,
6578			elem = this[ 0 ],
6579			attrs = elem && elem.attributes;
6580
6581		// Gets all values
6582		if ( key === undefined ) {
6583			if ( this.length ) {
6584				data = dataUser.get( elem );
6585
6586				if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
6587					i = attrs.length;
6588					while ( i-- ) {
6589
6590						// Support: IE 11 only
6591						// The attrs elements can be null (trac-14894)
6592						if ( attrs[ i ] ) {
6593							name = attrs[ i ].name;
6594							if ( name.indexOf( "data-" ) === 0 ) {
6595								name = camelCase( name.slice( 5 ) );
6596								dataAttr( elem, name, data[ name ] );
6597							}
6598						}
6599					}
6600					dataPriv.set( elem, "hasDataAttrs", true );
6601				}
6602			}
6603
6604			return data;
6605		}
6606
6607		// Sets multiple values
6608		if ( typeof key === "object" ) {
6609			return this.each( function() {
6610				dataUser.set( this, key );
6611			} );
6612		}
6613
6614		return access( this, function( value ) {
6615			var data;
6616
6617			// The calling jQuery object (element matches) is not empty
6618			// (and therefore has an element appears at this[ 0 ]) and the
6619			// `value` parameter was not undefined. An empty jQuery object
6620			// will result in `undefined` for elem = this[ 0 ] which will
6621			// throw an exception if an attempt to read a data cache is made.
6622			if ( elem && value === undefined ) {
6623
6624				// Attempt to get data from the cache
6625				// The key will always be camelCased in Data
6626				data = dataUser.get( elem, key );
6627				if ( data !== undefined ) {
6628					return data;
6629				}
6630
6631				// Attempt to "discover" the data in
6632				// HTML5 custom data-* attrs
6633				data = dataAttr( elem, key );
6634				if ( data !== undefined ) {
6635					return data;
6636				}
6637
6638				// We tried really hard, but the data doesn't exist.
6639				return;
6640			}
6641
6642			// Set the data...
6643			this.each( function() {
6644
6645				// We always store the camelCased key
6646				dataUser.set( this, key, value );
6647			} );
6648		}, null, value, arguments.length > 1, null, true );
6649	},
6650
6651	removeData: function( key ) {
6652		return this.each( function() {
6653			dataUser.remove( this, key );
6654		} );
6655	}
6656} );
6657
6658
6659jQuery.extend( {
6660	queue: function( elem, type, data ) {
6661		var queue;
6662
6663		if ( elem ) {
6664			type = ( type || "fx" ) + "queue";
6665			queue = dataPriv.get( elem, type );
6666
6667			// Speed up dequeue by getting out quickly if this is just a lookup
6668			if ( data ) {
6669				if ( !queue || Array.isArray( data ) ) {
6670					queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
6671				} else {
6672					queue.push( data );
6673				}
6674			}
6675			return queue || [];
6676		}
6677	},
6678
6679	dequeue: function( elem, type ) {
6680		type = type || "fx";
6681
6682		var queue = jQuery.queue( elem, type ),
6683			startLength = queue.length,
6684			fn = queue.shift(),
6685			hooks = jQuery._queueHooks( elem, type ),
6686			next = function() {
6687				jQuery.dequeue( elem, type );
6688			};
6689
6690		// If the fx queue is dequeued, always remove the progress sentinel
6691		if ( fn === "inprogress" ) {
6692			fn = queue.shift();
6693			startLength--;
6694		}
6695
6696		if ( fn ) {
6697
6698			// Add a progress sentinel to prevent the fx queue from being
6699			// automatically dequeued
6700			if ( type === "fx" ) {
6701				queue.unshift( "inprogress" );
6702			}
6703
6704			// Clear up the last queue stop function
6705			delete hooks.stop;
6706			fn.call( elem, next, hooks );
6707		}
6708
6709		if ( !startLength && hooks ) {
6710			hooks.empty.fire();
6711		}
6712	},
6713
6714	// Not public - generate a queueHooks object, or return the current one
6715	_queueHooks: function( elem, type ) {
6716		var key = type + "queueHooks";
6717		return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
6718			empty: jQuery.Callbacks( "once memory" ).add( function() {
6719				dataPriv.remove( elem, [ type + "queue", key ] );
6720			} )
6721		} );
6722	}
6723} );
6724
6725jQuery.fn.extend( {
6726	queue: function( type, data ) {
6727		var setter = 2;
6728
6729		if ( typeof type !== "string" ) {
6730			data = type;
6731			type = "fx";
6732			setter--;
6733		}
6734
6735		if ( arguments.length < setter ) {
6736			return jQuery.queue( this[ 0 ], type );
6737		}
6738
6739		return data === undefined ?
6740			this :
6741			this.each( function() {
6742				var queue = jQuery.queue( this, type, data );
6743
6744				// Ensure a hooks for this queue
6745				jQuery._queueHooks( this, type );
6746
6747				if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
6748					jQuery.dequeue( this, type );
6749				}
6750			} );
6751	},
6752	dequeue: function( type ) {
6753		return this.each( function() {
6754			jQuery.dequeue( this, type );
6755		} );
6756	},
6757	clearQueue: function( type ) {
6758		return this.queue( type || "fx", [] );
6759	},
6760
6761	// Get a promise resolved when queues of a certain type
6762	// are emptied (fx is the type by default)
6763	promise: function( type, obj ) {
6764		var tmp,
6765			count = 1,
6766			defer = jQuery.Deferred(),
6767			elements = this,
6768			i = this.length,
6769			resolve = function() {
6770				if ( !( --count ) ) {
6771					defer.resolveWith( elements, [ elements ] );
6772				}
6773			};
6774
6775		if ( typeof type !== "string" ) {
6776			obj = type;
6777			type = undefined;
6778		}
6779		type = type || "fx";
6780
6781		while ( i-- ) {
6782			tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
6783			if ( tmp && tmp.empty ) {
6784				count++;
6785				tmp.empty.add( resolve );
6786			}
6787		}
6788		resolve();
6789		return defer.promise( obj );
6790	}
6791} );
6792var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
6793
6794var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
6795
6796
6797var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
6798
6799var documentElement = document.documentElement;
6800
6801
6802
6803	var isAttached = function( elem ) {
6804			return jQuery.contains( elem.ownerDocument, elem );
6805		},
6806		composed = { composed: true };
6807
6808	// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
6809	// Check attachment across shadow DOM boundaries when possible (gh-3504)
6810	// Support: iOS 10.0-10.2 only
6811	// Early iOS 10 versions support `attachShadow` but not `getRootNode`,
6812	// leading to errors. We need to check for `getRootNode`.
6813	if ( documentElement.getRootNode ) {
6814		isAttached = function( elem ) {
6815			return jQuery.contains( elem.ownerDocument, elem ) ||
6816				elem.getRootNode( composed ) === elem.ownerDocument;
6817		};
6818	}
6819var isHiddenWithinTree = function( elem, el ) {
6820
6821		// isHiddenWithinTree might be called from jQuery#filter function;
6822		// in that case, element will be second argument
6823		elem = el || elem;
6824
6825		// Inline style trumps all
6826		return elem.style.display === "none" ||
6827			elem.style.display === "" &&
6828
6829			// Otherwise, check computed style
6830			// Support: Firefox <=43 - 45
6831			// Disconnected elements can have computed display: none, so first confirm that elem is
6832			// in the document.
6833			isAttached( elem ) &&
6834
6835			jQuery.css( elem, "display" ) === "none";
6836	};
6837
6838
6839
6840function adjustCSS( elem, prop, valueParts, tween ) {
6841	var adjusted, scale,
6842		maxIterations = 20,
6843		currentValue = tween ?
6844			function() {
6845				return tween.cur();
6846			} :
6847			function() {
6848				return jQuery.css( elem, prop, "" );
6849			},
6850		initial = currentValue(),
6851		unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
6852
6853		// Starting value computation is required for potential unit mismatches
6854		initialInUnit = elem.nodeType &&
6855			( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
6856			rcssNum.exec( jQuery.css( elem, prop ) );
6857
6858	if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
6859
6860		// Support: Firefox <=54
6861		// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
6862		initial = initial / 2;
6863
6864		// Trust units reported by jQuery.css
6865		unit = unit || initialInUnit[ 3 ];
6866
6867		// Iteratively approximate from a nonzero starting point
6868		initialInUnit = +initial || 1;
6869
6870		while ( maxIterations-- ) {
6871
6872			// Evaluate and update our best guess (doubling guesses that zero out).
6873			// Finish if the scale equals or crosses 1 (making the old*new product non-positive).
6874			jQuery.style( elem, prop, initialInUnit + unit );
6875			if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {
6876				maxIterations = 0;
6877			}
6878			initialInUnit = initialInUnit / scale;
6879
6880		}
6881
6882		initialInUnit = initialInUnit * 2;
6883		jQuery.style( elem, prop, initialInUnit + unit );
6884
6885		// Make sure we update the tween properties later on
6886		valueParts = valueParts || [];
6887	}
6888
6889	if ( valueParts ) {
6890		initialInUnit = +initialInUnit || +initial || 0;
6891
6892		// Apply relative offset (+=/-=) if specified
6893		adjusted = valueParts[ 1 ] ?
6894			initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
6895			+valueParts[ 2 ];
6896		if ( tween ) {
6897			tween.unit = unit;
6898			tween.start = initialInUnit;
6899			tween.end = adjusted;
6900		}
6901	}
6902	return adjusted;
6903}
6904
6905
6906var defaultDisplayMap = {};
6907
6908function getDefaultDisplay( elem ) {
6909	var temp,
6910		doc = elem.ownerDocument,
6911		nodeName = elem.nodeName,
6912		display = defaultDisplayMap[ nodeName ];
6913
6914	if ( display ) {
6915		return display;
6916	}
6917
6918	temp = doc.body.appendChild( doc.createElement( nodeName ) );
6919	display = jQuery.css( temp, "display" );
6920
6921	temp.parentNode.removeChild( temp );
6922
6923	if ( display === "none" ) {
6924		display = "block";
6925	}
6926	defaultDisplayMap[ nodeName ] = display;
6927
6928	return display;
6929}
6930
6931function showHide( elements, show ) {
6932	var display, elem,
6933		values = [],
6934		index = 0,
6935		length = elements.length;
6936
6937	// Determine new display value for elements that need to change
6938	for ( ; index < length; index++ ) {
6939		elem = elements[ index ];
6940		if ( !elem.style ) {
6941			continue;
6942		}
6943
6944		display = elem.style.display;
6945		if ( show ) {
6946
6947			// Since we force visibility upon cascade-hidden elements, an immediate (and slow)
6948			// check is required in this first loop unless we have a nonempty display value (either
6949			// inline or about-to-be-restored)
6950			if ( display === "none" ) {
6951				values[ index ] = dataPriv.get( elem, "display" ) || null;
6952				if ( !values[ index ] ) {
6953					elem.style.display = "";
6954				}
6955			}
6956			if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
6957				values[ index ] = getDefaultDisplay( elem );
6958			}
6959		} else {
6960			if ( display !== "none" ) {
6961				values[ index ] = "none";
6962
6963				// Remember what we're overwriting
6964				dataPriv.set( elem, "display", display );
6965			}
6966		}
6967	}
6968
6969	// Set the display of the elements in a second loop to avoid constant reflow
6970	for ( index = 0; index < length; index++ ) {
6971		if ( values[ index ] != null ) {
6972			elements[ index ].style.display = values[ index ];
6973		}
6974	}
6975
6976	return elements;
6977}
6978
6979jQuery.fn.extend( {
6980	show: function() {
6981		return showHide( this, true );
6982	},
6983	hide: function() {
6984		return showHide( this );
6985	},
6986	toggle: function( state ) {
6987		if ( typeof state === "boolean" ) {
6988			return state ? this.show() : this.hide();
6989		}
6990
6991		return this.each( function() {
6992			if ( isHiddenWithinTree( this ) ) {
6993				jQuery( this ).show();
6994			} else {
6995				jQuery( this ).hide();
6996			}
6997		} );
6998	}
6999} );
7000var rcheckableType = ( /^(?:checkbox|radio)$/i );
7001
7002var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i );
7003
7004var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
7005
7006
7007
7008( function() {
7009	var fragment = document.createDocumentFragment(),
7010		div = fragment.appendChild( document.createElement( "div" ) ),
7011		input = document.createElement( "input" );
7012
7013	// Support: Android 4.0 - 4.3 only
7014	// Check state lost if the name is set (trac-11217)
7015	// Support: Windows Web Apps (WWA)
7016	// `name` and `type` must use .setAttribute for WWA (trac-14901)
7017	input.setAttribute( "type", "radio" );
7018	input.setAttribute( "checked", "checked" );
7019	input.setAttribute( "name", "t" );
7020
7021	div.appendChild( input );
7022
7023	// Support: Android <=4.1 only
7024	// Older WebKit doesn't clone checked state correctly in fragments
7025	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
7026
7027	// Support: IE <=11 only
7028	// Make sure textarea (and checkbox) defaultValue is properly cloned
7029	div.innerHTML = "<textarea>x</textarea>";
7030	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
7031
7032	// Support: IE <=9 only
7033	// IE <=9 replaces <option> tags with their contents when inserted outside of
7034	// the select element.
7035	div.innerHTML = "<option></option>";
7036	support.option = !!div.lastChild;
7037} )();
7038
7039
7040// We have to close these tags to support XHTML (trac-13200)
7041var wrapMap = {
7042
7043	// XHTML parsers do not magically insert elements in the
7044	// same way that tag soup parsers do. So we cannot shorten
7045	// this by omitting <tbody> or other required elements.
7046	thead: [ 1, "<table>", "</table>" ],
7047	col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
7048	tr: [ 2, "<table><tbody>", "</tbody></table>" ],
7049	td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
7050
7051	_default: [ 0, "", "" ]
7052};
7053
7054wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
7055wrapMap.th = wrapMap.td;
7056
7057// Support: IE <=9 only
7058if ( !support.option ) {
7059	wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ];
7060}
7061
7062
7063function getAll( context, tag ) {
7064
7065	// Support: IE <=9 - 11 only
7066	// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)
7067	var ret;
7068
7069	if ( typeof context.getElementsByTagName !== "undefined" ) {
7070		ret = context.getElementsByTagName( tag || "*" );
7071
7072	} else if ( typeof context.querySelectorAll !== "undefined" ) {
7073		ret = context.querySelectorAll( tag || "*" );
7074
7075	} else {
7076		ret = [];
7077	}
7078
7079	if ( tag === undefined || tag && nodeName( context, tag ) ) {
7080		return jQuery.merge( [ context ], ret );
7081	}
7082
7083	return ret;
7084}
7085
7086
7087// Mark scripts as having already been evaluated
7088function setGlobalEval( elems, refElements ) {
7089	var i = 0,
7090		l = elems.length;
7091
7092	for ( ; i < l; i++ ) {
7093		dataPriv.set(
7094			elems[ i ],
7095			"globalEval",
7096			!refElements || dataPriv.get( refElements[ i ], "globalEval" )
7097		);
7098	}
7099}
7100
7101
7102var rhtml = /<|&#?\w+;/;
7103
7104function buildFragment( elems, context, scripts, selection, ignored ) {
7105	var elem, tmp, tag, wrap, attached, j,
7106		fragment = context.createDocumentFragment(),
7107		nodes = [],
7108		i = 0,
7109		l = elems.length;
7110
7111	for ( ; i < l; i++ ) {
7112		elem = elems[ i ];
7113
7114		if ( elem || elem === 0 ) {
7115
7116			// Add nodes directly
7117			if ( toType( elem ) === "object" ) {
7118
7119				// Support: Android <=4.0 only, PhantomJS 1 only
7120				// push.apply(_, arraylike) throws on ancient WebKit
7121				jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
7122
7123			// Convert non-html into a text node
7124			} else if ( !rhtml.test( elem ) ) {
7125				nodes.push( context.createTextNode( elem ) );
7126
7127			// Convert html into DOM nodes
7128			} else {
7129				tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
7130
7131				// Deserialize a standard representation
7132				tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
7133				wrap = wrapMap[ tag ] || wrapMap._default;
7134				tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
7135
7136				// Descend through wrappers to the right content
7137				j = wrap[ 0 ];
7138				while ( j-- ) {
7139					tmp = tmp.lastChild;
7140				}
7141
7142				// Support: Android <=4.0 only, PhantomJS 1 only
7143				// push.apply(_, arraylike) throws on ancient WebKit
7144				jQuery.merge( nodes, tmp.childNodes );
7145
7146				// Remember the top-level container
7147				tmp = fragment.firstChild;
7148
7149				// Ensure the created nodes are orphaned (trac-12392)
7150				tmp.textContent = "";
7151			}
7152		}
7153	}
7154
7155	// Remove wrapper from fragment
7156	fragment.textContent = "";
7157
7158	i = 0;
7159	while ( ( elem = nodes[ i++ ] ) ) {
7160
7161		// Skip elements already in the context collection (trac-4087)
7162		if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
7163			if ( ignored ) {
7164				ignored.push( elem );
7165			}
7166			continue;
7167		}
7168
7169		attached = isAttached( elem );
7170
7171		// Append to fragment
7172		tmp = getAll( fragment.appendChild( elem ), "script" );
7173
7174		// Preserve script evaluation history
7175		if ( attached ) {
7176			setGlobalEval( tmp );
7177		}
7178
7179		// Capture executables
7180		if ( scripts ) {
7181			j = 0;
7182			while ( ( elem = tmp[ j++ ] ) ) {
7183				if ( rscriptType.test( elem.type || "" ) ) {
7184					scripts.push( elem );
7185				}
7186			}
7187		}
7188	}
7189
7190	return fragment;
7191}
7192
7193
7194var rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
7195
7196function returnTrue() {
7197	return true;
7198}
7199
7200function returnFalse() {
7201	return false;
7202}
7203
7204function on( elem, types, selector, data, fn, one ) {
7205	var origFn, type;
7206
7207	// Types can be a map of types/handlers
7208	if ( typeof types === "object" ) {
7209
7210		// ( types-Object, selector, data )
7211		if ( typeof selector !== "string" ) {
7212
7213			// ( types-Object, data )
7214			data = data || selector;
7215			selector = undefined;
7216		}
7217		for ( type in types ) {
7218			on( elem, type, selector, data, types[ type ], one );
7219		}
7220		return elem;
7221	}
7222
7223	if ( data == null && fn == null ) {
7224
7225		// ( types, fn )
7226		fn = selector;
7227		data = selector = undefined;
7228	} else if ( fn == null ) {
7229		if ( typeof selector === "string" ) {
7230
7231			// ( types, selector, fn )
7232			fn = data;
7233			data = undefined;
7234		} else {
7235
7236			// ( types, data, fn )
7237			fn = data;
7238			data = selector;
7239			selector = undefined;
7240		}
7241	}
7242	if ( fn === false ) {
7243		fn = returnFalse;
7244	} else if ( !fn ) {
7245		return elem;
7246	}
7247
7248	if ( one === 1 ) {
7249		origFn = fn;
7250		fn = function( event ) {
7251
7252			// Can use an empty set, since event contains the info
7253			jQuery().off( event );
7254			return origFn.apply( this, arguments );
7255		};
7256
7257		// Use same guid so caller can remove using origFn
7258		fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
7259	}
7260	return elem.each( function() {
7261		jQuery.event.add( this, types, fn, data, selector );
7262	} );
7263}
7264
7265/*
7266 * Helper functions for managing events -- not part of the public interface.
7267 * Props to Dean Edwards' addEvent library for many of the ideas.
7268 */
7269jQuery.event = {
7270
7271	global: {},
7272
7273	add: function( elem, types, handler, data, selector ) {
7274
7275		var handleObjIn, eventHandle, tmp,
7276			events, t, handleObj,
7277			special, handlers, type, namespaces, origType,
7278			elemData = dataPriv.get( elem );
7279
7280		// Only attach events to objects that accept data
7281		if ( !acceptData( elem ) ) {
7282			return;
7283		}
7284
7285		// Caller can pass in an object of custom data in lieu of the handler
7286		if ( handler.handler ) {
7287			handleObjIn = handler;
7288			handler = handleObjIn.handler;
7289			selector = handleObjIn.selector;
7290		}
7291
7292		// Ensure that invalid selectors throw exceptions at attach time
7293		// Evaluate against documentElement in case elem is a non-element node (e.g., document)
7294		if ( selector ) {
7295			jQuery.find.matchesSelector( documentElement, selector );
7296		}
7297
7298		// Make sure that the handler has a unique ID, used to find/remove it later
7299		if ( !handler.guid ) {
7300			handler.guid = jQuery.guid++;
7301		}
7302
7303		// Init the element's event structure and main handler, if this is the first
7304		if ( !( events = elemData.events ) ) {
7305			events = elemData.events = Object.create( null );
7306		}
7307		if ( !( eventHandle = elemData.handle ) ) {
7308			eventHandle = elemData.handle = function( e ) {
7309
7310				// Discard the second event of a jQuery.event.trigger() and
7311				// when an event is called after a page has unloaded
7312				return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
7313					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
7314			};
7315		}
7316
7317		// Handle multiple events separated by a space
7318		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
7319		t = types.length;
7320		while ( t-- ) {
7321			tmp = rtypenamespace.exec( types[ t ] ) || [];
7322			type = origType = tmp[ 1 ];
7323			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
7324
7325			// There *must* be a type, no attaching namespace-only handlers
7326			if ( !type ) {
7327				continue;
7328			}
7329
7330			// If event changes its type, use the special event handlers for the changed type
7331			special = jQuery.event.special[ type ] || {};
7332
7333			// If selector defined, determine special event api type, otherwise given type
7334			type = ( selector ? special.delegateType : special.bindType ) || type;
7335
7336			// Update special based on newly reset type
7337			special = jQuery.event.special[ type ] || {};
7338
7339			// handleObj is passed to all event handlers
7340			handleObj = jQuery.extend( {
7341				type: type,
7342				origType: origType,
7343				data: data,
7344				handler: handler,
7345				guid: handler.guid,
7346				selector: selector,
7347				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
7348				namespace: namespaces.join( "." )
7349			}, handleObjIn );
7350
7351			// Init the event handler queue if we're the first
7352			if ( !( handlers = events[ type ] ) ) {
7353				handlers = events[ type ] = [];
7354				handlers.delegateCount = 0;
7355
7356				// Only use addEventListener if the special events handler returns false
7357				if ( !special.setup ||
7358					special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
7359
7360					if ( elem.addEventListener ) {
7361						elem.addEventListener( type, eventHandle );
7362					}
7363				}
7364			}
7365
7366			if ( special.add ) {
7367				special.add.call( elem, handleObj );
7368
7369				if ( !handleObj.handler.guid ) {
7370					handleObj.handler.guid = handler.guid;
7371				}
7372			}
7373
7374			// Add to the element's handler list, delegates in front
7375			if ( selector ) {
7376				handlers.splice( handlers.delegateCount++, 0, handleObj );
7377			} else {
7378				handlers.push( handleObj );
7379			}
7380
7381			// Keep track of which events have ever been used, for event optimization
7382			jQuery.event.global[ type ] = true;
7383		}
7384
7385	},
7386
7387	// Detach an event or set of events from an element
7388	remove: function( elem, types, handler, selector, mappedTypes ) {
7389
7390		var j, origCount, tmp,
7391			events, t, handleObj,
7392			special, handlers, type, namespaces, origType,
7393			elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
7394
7395		if ( !elemData || !( events = elemData.events ) ) {
7396			return;
7397		}
7398
7399		// Once for each type.namespace in types; type may be omitted
7400		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
7401		t = types.length;
7402		while ( t-- ) {
7403			tmp = rtypenamespace.exec( types[ t ] ) || [];
7404			type = origType = tmp[ 1 ];
7405			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
7406
7407			// Unbind all events (on this namespace, if provided) for the element
7408			if ( !type ) {
7409				for ( type in events ) {
7410					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
7411				}
7412				continue;
7413			}
7414
7415			special = jQuery.event.special[ type ] || {};
7416			type = ( selector ? special.delegateType : special.bindType ) || type;
7417			handlers = events[ type ] || [];
7418			tmp = tmp[ 2 ] &&
7419				new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
7420
7421			// Remove matching events
7422			origCount = j = handlers.length;
7423			while ( j-- ) {
7424				handleObj = handlers[ j ];
7425
7426				if ( ( mappedTypes || origType === handleObj.origType ) &&
7427					( !handler || handler.guid === handleObj.guid ) &&
7428					( !tmp || tmp.test( handleObj.namespace ) ) &&
7429					( !selector || selector === handleObj.selector ||
7430						selector === "**" && handleObj.selector ) ) {
7431					handlers.splice( j, 1 );
7432
7433					if ( handleObj.selector ) {
7434						handlers.delegateCount--;
7435					}
7436					if ( special.remove ) {
7437						special.remove.call( elem, handleObj );
7438					}
7439				}
7440			}
7441
7442			// Remove generic event handler if we removed something and no more handlers exist
7443			// (avoids potential for endless recursion during removal of special event handlers)
7444			if ( origCount && !handlers.length ) {
7445				if ( !special.teardown ||
7446					special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
7447
7448					jQuery.removeEvent( elem, type, elemData.handle );
7449				}
7450
7451				delete events[ type ];
7452			}
7453		}
7454
7455		// Remove data and the expando if it's no longer used
7456		if ( jQuery.isEmptyObject( events ) ) {
7457			dataPriv.remove( elem, "handle events" );
7458		}
7459	},
7460
7461	dispatch: function( nativeEvent ) {
7462
7463		var i, j, ret, matched, handleObj, handlerQueue,
7464			args = new Array( arguments.length ),
7465
7466			// Make a writable jQuery.Event from the native event object
7467			event = jQuery.event.fix( nativeEvent ),
7468
7469			handlers = (
7470				dataPriv.get( this, "events" ) || Object.create( null )
7471			)[ event.type ] || [],
7472			special = jQuery.event.special[ event.type ] || {};
7473
7474		// Use the fix-ed jQuery.Event rather than the (read-only) native event
7475		args[ 0 ] = event;
7476
7477		for ( i = 1; i < arguments.length; i++ ) {
7478			args[ i ] = arguments[ i ];
7479		}
7480
7481		event.delegateTarget = this;
7482
7483		// Call the preDispatch hook for the mapped type, and let it bail if desired
7484		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
7485			return;
7486		}
7487
7488		// Determine handlers
7489		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
7490
7491		// Run delegates first; they may want to stop propagation beneath us
7492		i = 0;
7493		while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
7494			event.currentTarget = matched.elem;
7495
7496			j = 0;
7497			while ( ( handleObj = matched.handlers[ j++ ] ) &&
7498				!event.isImmediatePropagationStopped() ) {
7499
7500				// If the event is namespaced, then each handler is only invoked if it is
7501				// specially universal or its namespaces are a superset of the event's.
7502				if ( !event.rnamespace || handleObj.namespace === false ||
7503					event.rnamespace.test( handleObj.namespace ) ) {
7504
7505					event.handleObj = handleObj;
7506					event.data = handleObj.data;
7507
7508					ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
7509						handleObj.handler ).apply( matched.elem, args );
7510
7511					if ( ret !== undefined ) {
7512						if ( ( event.result = ret ) === false ) {
7513							event.preventDefault();
7514							event.stopPropagation();
7515						}
7516					}
7517				}
7518			}
7519		}
7520
7521		// Call the postDispatch hook for the mapped type
7522		if ( special.postDispatch ) {
7523			special.postDispatch.call( this, event );
7524		}
7525
7526		return event.result;
7527	},
7528
7529	handlers: function( event, handlers ) {
7530		var i, handleObj, sel, matchedHandlers, matchedSelectors,
7531			handlerQueue = [],
7532			delegateCount = handlers.delegateCount,
7533			cur = event.target;
7534
7535		// Find delegate handlers
7536		if ( delegateCount &&
7537
7538			// Support: IE <=9
7539			// Black-hole SVG <use> instance trees (trac-13180)
7540			cur.nodeType &&
7541
7542			// Support: Firefox <=42
7543			// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
7544			// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
7545			// Support: IE 11 only
7546			// ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
7547			!( event.type === "click" && event.button >= 1 ) ) {
7548
7549			for ( ; cur !== this; cur = cur.parentNode || this ) {
7550
7551				// Don't check non-elements (trac-13208)
7552				// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)
7553				if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
7554					matchedHandlers = [];
7555					matchedSelectors = {};
7556					for ( i = 0; i < delegateCount; i++ ) {
7557						handleObj = handlers[ i ];
7558
7559						// Don't conflict with Object.prototype properties (trac-13203)
7560						sel = handleObj.selector + " ";
7561
7562						if ( matchedSelectors[ sel ] === undefined ) {
7563							matchedSelectors[ sel ] = handleObj.needsContext ?
7564								jQuery( sel, this ).index( cur ) > -1 :
7565								jQuery.find( sel, this, null, [ cur ] ).length;
7566						}
7567						if ( matchedSelectors[ sel ] ) {
7568							matchedHandlers.push( handleObj );
7569						}
7570					}
7571					if ( matchedHandlers.length ) {
7572						handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
7573					}
7574				}
7575			}
7576		}
7577
7578		// Add the remaining (directly-bound) handlers
7579		cur = this;
7580		if ( delegateCount < handlers.length ) {
7581			handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
7582		}
7583
7584		return handlerQueue;
7585	},
7586
7587	addProp: function( name, hook ) {
7588		Object.defineProperty( jQuery.Event.prototype, name, {
7589			enumerable: true,
7590			configurable: true,
7591
7592			get: isFunction( hook ) ?
7593				function() {
7594					if ( this.originalEvent ) {
7595						return hook( this.originalEvent );
7596					}
7597				} :
7598				function() {
7599					if ( this.originalEvent ) {
7600						return this.originalEvent[ name ];
7601					}
7602				},
7603
7604			set: function( value ) {
7605				Object.defineProperty( this, name, {
7606					enumerable: true,
7607					configurable: true,
7608					writable: true,
7609					value: value
7610				} );
7611			}
7612		} );
7613	},
7614
7615	fix: function( originalEvent ) {
7616		return originalEvent[ jQuery.expando ] ?
7617			originalEvent :
7618			new jQuery.Event( originalEvent );
7619	},
7620
7621	special: {
7622		load: {
7623
7624			// Prevent triggered image.load events from bubbling to window.load
7625			noBubble: true
7626		},
7627		click: {
7628
7629			// Utilize native event to ensure correct state for checkable inputs
7630			setup: function( data ) {
7631
7632				// For mutual compressibility with _default, replace `this` access with a local var.
7633				// `|| data` is dead code meant only to preserve the variable through minification.
7634				var el = this || data;
7635
7636				// Claim the first handler
7637				if ( rcheckableType.test( el.type ) &&
7638					el.click && nodeName( el, "input" ) ) {
7639
7640					// dataPriv.set( el, "click", ... )
7641					leverageNative( el, "click", true );
7642				}
7643
7644				// Return false to allow normal processing in the caller
7645				return false;
7646			},
7647			trigger: function( data ) {
7648
7649				// For mutual compressibility with _default, replace `this` access with a local var.
7650				// `|| data` is dead code meant only to preserve the variable through minification.
7651				var el = this || data;
7652
7653				// Force setup before triggering a click
7654				if ( rcheckableType.test( el.type ) &&
7655					el.click && nodeName( el, "input" ) ) {
7656
7657					leverageNative( el, "click" );
7658				}
7659
7660				// Return non-false to allow normal event-path propagation
7661				return true;
7662			},
7663
7664			// For cross-browser consistency, suppress native .click() on links
7665			// Also prevent it if we're currently inside a leveraged native-event stack
7666			_default: function( event ) {
7667				var target = event.target;
7668				return rcheckableType.test( target.type ) &&
7669					target.click && nodeName( target, "input" ) &&
7670					dataPriv.get( target, "click" ) ||
7671					nodeName( target, "a" );
7672			}
7673		},
7674
7675		beforeunload: {
7676			postDispatch: function( event ) {
7677
7678				// Support: Firefox 20+
7679				// Firefox doesn't alert if the returnValue field is not set.
7680				if ( event.result !== undefined && event.originalEvent ) {
7681					event.originalEvent.returnValue = event.result;
7682				}
7683			}
7684		}
7685	}
7686};
7687
7688// Ensure the presence of an event listener that handles manually-triggered
7689// synthetic events by interrupting progress until reinvoked in response to
7690// *native* events that it fires directly, ensuring that state changes have
7691// already occurred before other listeners are invoked.
7692function leverageNative( el, type, isSetup ) {
7693
7694	// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add
7695	if ( !isSetup ) {
7696		if ( dataPriv.get( el, type ) === undefined ) {
7697			jQuery.event.add( el, type, returnTrue );
7698		}
7699		return;
7700	}
7701
7702	// Register the controller as a special universal handler for all event namespaces
7703	dataPriv.set( el, type, false );
7704	jQuery.event.add( el, type, {
7705		namespace: false,
7706		handler: function( event ) {
7707			var result,
7708				saved = dataPriv.get( this, type );
7709
7710			if ( ( event.isTrigger & 1 ) && this[ type ] ) {
7711
7712				// Interrupt processing of the outer synthetic .trigger()ed event
7713				if ( !saved ) {
7714
7715					// Store arguments for use when handling the inner native event
7716					// There will always be at least one argument (an event object), so this array
7717					// will not be confused with a leftover capture object.
7718					saved = slice.call( arguments );
7719					dataPriv.set( this, type, saved );
7720
7721					// Trigger the native event and capture its result
7722					this[ type ]();
7723					result = dataPriv.get( this, type );
7724					dataPriv.set( this, type, false );
7725
7726					if ( saved !== result ) {
7727
7728						// Cancel the outer synthetic event
7729						event.stopImmediatePropagation();
7730						event.preventDefault();
7731
7732						return result;
7733					}
7734
7735				// If this is an inner synthetic event for an event with a bubbling surrogate
7736				// (focus or blur), assume that the surrogate already propagated from triggering
7737				// the native event and prevent that from happening again here.
7738				// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
7739				// bubbling surrogate propagates *after* the non-bubbling base), but that seems
7740				// less bad than duplication.
7741				} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {
7742					event.stopPropagation();
7743				}
7744
7745			// If this is a native event triggered above, everything is now in order
7746			// Fire an inner synthetic event with the original arguments
7747			} else if ( saved ) {
7748
7749				// ...and capture the result
7750				dataPriv.set( this, type, jQuery.event.trigger(
7751					saved[ 0 ],
7752					saved.slice( 1 ),
7753					this
7754				) );
7755
7756				// Abort handling of the native event by all jQuery handlers while allowing
7757				// native handlers on the same element to run. On target, this is achieved
7758				// by stopping immediate propagation just on the jQuery event. However,
7759				// the native event is re-wrapped by a jQuery one on each level of the
7760				// propagation so the only way to stop it for jQuery is to stop it for
7761				// everyone via native `stopPropagation()`. This is not a problem for
7762				// focus/blur which don't bubble, but it does also stop click on checkboxes
7763				// and radios. We accept this limitation.
7764				event.stopPropagation();
7765				event.isImmediatePropagationStopped = returnTrue;
7766			}
7767		}
7768	} );
7769}
7770
7771jQuery.removeEvent = function( elem, type, handle ) {
7772
7773	// This "if" is needed for plain objects
7774	if ( elem.removeEventListener ) {
7775		elem.removeEventListener( type, handle );
7776	}
7777};
7778
7779jQuery.Event = function( src, props ) {
7780
7781	// Allow instantiation without the 'new' keyword
7782	if ( !( this instanceof jQuery.Event ) ) {
7783		return new jQuery.Event( src, props );
7784	}
7785
7786	// Event object
7787	if ( src && src.type ) {
7788		this.originalEvent = src;
7789		this.type = src.type;
7790
7791		// Events bubbling up the document may have been marked as prevented
7792		// by a handler lower down the tree; reflect the correct value.
7793		this.isDefaultPrevented = src.defaultPrevented ||
7794				src.defaultPrevented === undefined &&
7795
7796				// Support: Android <=2.3 only
7797				src.returnValue === false ?
7798			returnTrue :
7799			returnFalse;
7800
7801		// Create target properties
7802		// Support: Safari <=6 - 7 only
7803		// Target should not be a text node (trac-504, trac-13143)
7804		this.target = ( src.target && src.target.nodeType === 3 ) ?
7805			src.target.parentNode :
7806			src.target;
7807
7808		this.currentTarget = src.currentTarget;
7809		this.relatedTarget = src.relatedTarget;
7810
7811	// Event type
7812	} else {
7813		this.type = src;
7814	}
7815
7816	// Put explicitly provided properties onto the event object
7817	if ( props ) {
7818		jQuery.extend( this, props );
7819	}
7820
7821	// Create a timestamp if incoming event doesn't have one
7822	this.timeStamp = src && src.timeStamp || Date.now();
7823
7824	// Mark it as fixed
7825	this[ jQuery.expando ] = true;
7826};
7827
7828// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
7829// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
7830jQuery.Event.prototype = {
7831	constructor: jQuery.Event,
7832	isDefaultPrevented: returnFalse,
7833	isPropagationStopped: returnFalse,
7834	isImmediatePropagationStopped: returnFalse,
7835	isSimulated: false,
7836
7837	preventDefault: function() {
7838		var e = this.originalEvent;
7839
7840		this.isDefaultPrevented = returnTrue;
7841
7842		if ( e && !this.isSimulated ) {
7843			e.preventDefault();
7844		}
7845	},
7846	stopPropagation: function() {
7847		var e = this.originalEvent;
7848
7849		this.isPropagationStopped = returnTrue;
7850
7851		if ( e && !this.isSimulated ) {
7852			e.stopPropagation();
7853		}
7854	},
7855	stopImmediatePropagation: function() {
7856		var e = this.originalEvent;
7857
7858		this.isImmediatePropagationStopped = returnTrue;
7859
7860		if ( e && !this.isSimulated ) {
7861			e.stopImmediatePropagation();
7862		}
7863
7864		this.stopPropagation();
7865	}
7866};
7867
7868// Includes all common event props including KeyEvent and MouseEvent specific props
7869jQuery.each( {
7870	altKey: true,
7871	bubbles: true,
7872	cancelable: true,
7873	changedTouches: true,
7874	ctrlKey: true,
7875	detail: true,
7876	eventPhase: true,
7877	metaKey: true,
7878	pageX: true,
7879	pageY: true,
7880	shiftKey: true,
7881	view: true,
7882	"char": true,
7883	code: true,
7884	charCode: true,
7885	key: true,
7886	keyCode: true,
7887	button: true,
7888	buttons: true,
7889	clientX: true,
7890	clientY: true,
7891	offsetX: true,
7892	offsetY: true,
7893	pointerId: true,
7894	pointerType: true,
7895	screenX: true,
7896	screenY: true,
7897	targetTouches: true,
7898	toElement: true,
7899	touches: true,
7900	which: true
7901}, jQuery.event.addProp );
7902
7903jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
7904
7905	function focusMappedHandler( nativeEvent ) {
7906		if ( document.documentMode ) {
7907
7908			// Support: IE 11+
7909			// Attach a single focusin/focusout handler on the document while someone wants
7910			// focus/blur. This is because the former are synchronous in IE while the latter
7911			// are async. In other browsers, all those handlers are invoked synchronously.
7912
7913			// `handle` from private data would already wrap the event, but we need
7914			// to change the `type` here.
7915			var handle = dataPriv.get( this, "handle" ),
7916				event = jQuery.event.fix( nativeEvent );
7917			event.type = nativeEvent.type === "focusin" ? "focus" : "blur";
7918			event.isSimulated = true;
7919
7920			// First, handle focusin/focusout
7921			handle( nativeEvent );
7922
7923			// ...then, handle focus/blur
7924			//
7925			// focus/blur don't bubble while focusin/focusout do; simulate the former by only
7926			// invoking the handler at the lower level.
7927			if ( event.target === event.currentTarget ) {
7928
7929				// The setup part calls `leverageNative`, which, in turn, calls
7930				// `jQuery.event.add`, so event handle will already have been set
7931				// by this point.
7932				handle( event );
7933			}
7934		} else {
7935
7936			// For non-IE browsers, attach a single capturing handler on the document
7937			// while someone wants focusin/focusout.
7938			jQuery.event.simulate( delegateType, nativeEvent.target,
7939				jQuery.event.fix( nativeEvent ) );
7940		}
7941	}
7942
7943	jQuery.event.special[ type ] = {
7944
7945		// Utilize native event if possible so blur/focus sequence is correct
7946		setup: function() {
7947
7948			var attaches;
7949
7950			// Claim the first handler
7951			// dataPriv.set( this, "focus", ... )
7952			// dataPriv.set( this, "blur", ... )
7953			leverageNative( this, type, true );
7954
7955			if ( document.documentMode ) {
7956
7957				// Support: IE 9 - 11+
7958				// We use the same native handler for focusin & focus (and focusout & blur)
7959				// so we need to coordinate setup & teardown parts between those events.
7960				// Use `delegateType` as the key as `type` is already used by `leverageNative`.
7961				attaches = dataPriv.get( this, delegateType );
7962				if ( !attaches ) {
7963					this.addEventListener( delegateType, focusMappedHandler );
7964				}
7965				dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 );
7966			} else {
7967
7968				// Return false to allow normal processing in the caller
7969				return false;
7970			}
7971		},
7972		trigger: function() {
7973
7974			// Force setup before trigger
7975			leverageNative( this, type );
7976
7977			// Return non-false to allow normal event-path propagation
7978			return true;
7979		},
7980
7981		teardown: function() {
7982			var attaches;
7983
7984			if ( document.documentMode ) {
7985				attaches = dataPriv.get( this, delegateType ) - 1;
7986				if ( !attaches ) {
7987					this.removeEventListener( delegateType, focusMappedHandler );
7988					dataPriv.remove( this, delegateType );
7989				} else {
7990					dataPriv.set( this, delegateType, attaches );
7991				}
7992			} else {
7993
7994				// Return false to indicate standard teardown should be applied
7995				return false;
7996			}
7997		},
7998
7999		// Suppress native focus or blur if we're currently inside
8000		// a leveraged native-event stack
8001		_default: function( event ) {
8002			return dataPriv.get( event.target, type );
8003		},
8004
8005		delegateType: delegateType
8006	};
8007
8008	// Support: Firefox <=44
8009	// Firefox doesn't have focus(in | out) events
8010	// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
8011	//
8012	// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
8013	// focus(in | out) events fire after focus & blur events,
8014	// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
8015	// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
8016	//
8017	// Support: IE 9 - 11+
8018	// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,
8019	// attach a single handler for both events in IE.
8020	jQuery.event.special[ delegateType ] = {
8021		setup: function() {
8022
8023			// Handle: regular nodes (via `this.ownerDocument`), window
8024			// (via `this.document`) & document (via `this`).
8025			var doc = this.ownerDocument || this.document || this,
8026				dataHolder = document.documentMode ? this : doc,
8027				attaches = dataPriv.get( dataHolder, delegateType );
8028
8029			// Support: IE 9 - 11+
8030			// We use the same native handler for focusin & focus (and focusout & blur)
8031			// so we need to coordinate setup & teardown parts between those events.
8032			// Use `delegateType` as the key as `type` is already used by `leverageNative`.
8033			if ( !attaches ) {
8034				if ( document.documentMode ) {
8035					this.addEventListener( delegateType, focusMappedHandler );
8036				} else {
8037					doc.addEventListener( type, focusMappedHandler, true );
8038				}
8039			}
8040			dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 );
8041		},
8042		teardown: function() {
8043			var doc = this.ownerDocument || this.document || this,
8044				dataHolder = document.documentMode ? this : doc,
8045				attaches = dataPriv.get( dataHolder, delegateType ) - 1;
8046
8047			if ( !attaches ) {
8048				if ( document.documentMode ) {
8049					this.removeEventListener( delegateType, focusMappedHandler );
8050				} else {
8051					doc.removeEventListener( type, focusMappedHandler, true );
8052				}
8053				dataPriv.remove( dataHolder, delegateType );
8054			} else {
8055				dataPriv.set( dataHolder, delegateType, attaches );
8056			}
8057		}
8058	};
8059} );
8060
8061// Create mouseenter/leave events using mouseover/out and event-time checks
8062// so that event delegation works in jQuery.
8063// Do the same for pointerenter/pointerleave and pointerover/pointerout
8064//
8065// Support: Safari 7 only
8066// Safari sends mouseenter too often; see:
8067// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
8068// for the description of the bug (it existed in older Chrome versions as well).
8069jQuery.each( {
8070	mouseenter: "mouseover",
8071	mouseleave: "mouseout",
8072	pointerenter: "pointerover",
8073	pointerleave: "pointerout"
8074}, function( orig, fix ) {
8075	jQuery.event.special[ orig ] = {
8076		delegateType: fix,
8077		bindType: fix,
8078
8079		handle: function( event ) {
8080			var ret,
8081				target = this,
8082				related = event.relatedTarget,
8083				handleObj = event.handleObj;
8084
8085			// For mouseenter/leave call the handler if related is outside the target.
8086			// NB: No relatedTarget if the mouse left/entered the browser window
8087			if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
8088				event.type = handleObj.origType;
8089				ret = handleObj.handler.apply( this, arguments );
8090				event.type = fix;
8091			}
8092			return ret;
8093		}
8094	};
8095} );
8096
8097jQuery.fn.extend( {
8098
8099	on: function( types, selector, data, fn ) {
8100		return on( this, types, selector, data, fn );
8101	},
8102	one: function( types, selector, data, fn ) {
8103		return on( this, types, selector, data, fn, 1 );
8104	},
8105	off: function( types, selector, fn ) {
8106		var handleObj, type;
8107		if ( types && types.preventDefault && types.handleObj ) {
8108
8109			// ( event )  dispatched jQuery.Event
8110			handleObj = types.handleObj;
8111			jQuery( types.delegateTarget ).off(
8112				handleObj.namespace ?
8113					handleObj.origType + "." + handleObj.namespace :
8114					handleObj.origType,
8115				handleObj.selector,
8116				handleObj.handler
8117			);
8118			return this;
8119		}
8120		if ( typeof types === "object" ) {
8121
8122			// ( types-object [, selector] )
8123			for ( type in types ) {
8124				this.off( type, selector, types[ type ] );
8125			}
8126			return this;
8127		}
8128		if ( selector === false || typeof selector === "function" ) {
8129
8130			// ( types [, fn] )
8131			fn = selector;
8132			selector = undefined;
8133		}
8134		if ( fn === false ) {
8135			fn = returnFalse;
8136		}
8137		return this.each( function() {
8138			jQuery.event.remove( this, types, fn, selector );
8139		} );
8140	}
8141} );
8142
8143
8144var
8145
8146	// Support: IE <=10 - 11, Edge 12 - 13 only
8147	// In IE/Edge using regex groups here causes severe slowdowns.
8148	// See https://connect.microsoft.com/IE/feedback/details/1736512/
8149	rnoInnerhtml = /<script|<style|<link/i,
8150
8151	// checked="checked" or checked
8152	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
8153
8154	rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g;
8155
8156// Prefer a tbody over its parent table for containing new rows
8157function manipulationTarget( elem, content ) {
8158	if ( nodeName( elem, "table" ) &&
8159		nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
8160
8161		return jQuery( elem ).children( "tbody" )[ 0 ] || elem;
8162	}
8163
8164	return elem;
8165}
8166
8167// Replace/restore the type attribute of script elements for safe DOM manipulation
8168function disableScript( elem ) {
8169	elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
8170	return elem;
8171}
8172function restoreScript( elem ) {
8173	if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) {
8174		elem.type = elem.type.slice( 5 );
8175	} else {
8176		elem.removeAttribute( "type" );
8177	}
8178
8179	return elem;
8180}
8181
8182function cloneCopyEvent( src, dest ) {
8183	var i, l, type, pdataOld, udataOld, udataCur, events;
8184
8185	if ( dest.nodeType !== 1 ) {
8186		return;
8187	}
8188
8189	// 1. Copy private data: events, handlers, etc.
8190	if ( dataPriv.hasData( src ) ) {
8191		pdataOld = dataPriv.get( src );
8192		events = pdataOld.events;
8193
8194		if ( events ) {
8195			dataPriv.remove( dest, "handle events" );
8196
8197			for ( type in events ) {
8198				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
8199					jQuery.event.add( dest, type, events[ type ][ i ] );
8200				}
8201			}
8202		}
8203	}
8204
8205	// 2. Copy user data
8206	if ( dataUser.hasData( src ) ) {
8207		udataOld = dataUser.access( src );
8208		udataCur = jQuery.extend( {}, udataOld );
8209
8210		dataUser.set( dest, udataCur );
8211	}
8212}
8213
8214// Fix IE bugs, see support tests
8215function fixInput( src, dest ) {
8216	var nodeName = dest.nodeName.toLowerCase();
8217
8218	// Fails to persist the checked state of a cloned checkbox or radio button.
8219	if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
8220		dest.checked = src.checked;
8221
8222	// Fails to return the selected option to the default selected state when cloning options
8223	} else if ( nodeName === "input" || nodeName === "textarea" ) {
8224		dest.defaultValue = src.defaultValue;
8225	}
8226}
8227
8228function domManip( collection, args, callback, ignored ) {
8229
8230	// Flatten any nested arrays
8231	args = flat( args );
8232
8233	var fragment, first, scripts, hasScripts, node, doc,
8234		i = 0,
8235		l = collection.length,
8236		iNoClone = l - 1,
8237		value = args[ 0 ],
8238		valueIsFunction = isFunction( value );
8239
8240	// We can't cloneNode fragments that contain checked, in WebKit
8241	if ( valueIsFunction ||
8242			( l > 1 && typeof value === "string" &&
8243				!support.checkClone && rchecked.test( value ) ) ) {
8244		return collection.each( function( index ) {
8245			var self = collection.eq( index );
8246			if ( valueIsFunction ) {
8247				args[ 0 ] = value.call( this, index, self.html() );
8248			}
8249			domManip( self, args, callback, ignored );
8250		} );
8251	}
8252
8253	if ( l ) {
8254		fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
8255		first = fragment.firstChild;
8256
8257		if ( fragment.childNodes.length === 1 ) {
8258			fragment = first;
8259		}
8260
8261		// Require either new content or an interest in ignored elements to invoke the callback
8262		if ( first || ignored ) {
8263			scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
8264			hasScripts = scripts.length;
8265
8266			// Use the original fragment for the last item
8267			// instead of the first because it can end up
8268			// being emptied incorrectly in certain situations (trac-8070).
8269			for ( ; i < l; i++ ) {
8270				node = fragment;
8271
8272				if ( i !== iNoClone ) {
8273					node = jQuery.clone( node, true, true );
8274
8275					// Keep references to cloned scripts for later restoration
8276					if ( hasScripts ) {
8277
8278						// Support: Android <=4.0 only, PhantomJS 1 only
8279						// push.apply(_, arraylike) throws on ancient WebKit
8280						jQuery.merge( scripts, getAll( node, "script" ) );
8281					}
8282				}
8283
8284				callback.call( collection[ i ], node, i );
8285			}
8286
8287			if ( hasScripts ) {
8288				doc = scripts[ scripts.length - 1 ].ownerDocument;
8289
8290				// Re-enable scripts
8291				jQuery.map( scripts, restoreScript );
8292
8293				// Evaluate executable scripts on first document insertion
8294				for ( i = 0; i < hasScripts; i++ ) {
8295					node = scripts[ i ];
8296					if ( rscriptType.test( node.type || "" ) &&
8297						!dataPriv.access( node, "globalEval" ) &&
8298						jQuery.contains( doc, node ) ) {
8299
8300						if ( node.src && ( node.type || "" ).toLowerCase()  !== "module" ) {
8301
8302							// Optional AJAX dependency, but won't run scripts if not present
8303							if ( jQuery._evalUrl && !node.noModule ) {
8304								jQuery._evalUrl( node.src, {
8305									nonce: node.nonce || node.getAttribute( "nonce" )
8306								}, doc );
8307							}
8308						} else {
8309
8310							// Unwrap a CDATA section containing script contents. This shouldn't be
8311							// needed as in XML documents they're already not visible when
8312							// inspecting element contents and in HTML documents they have no
8313							// meaning but we're preserving that logic for backwards compatibility.
8314							// This will be removed completely in 4.0. See gh-4904.
8315							DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
8316						}
8317					}
8318				}
8319			}
8320		}
8321	}
8322
8323	return collection;
8324}
8325
8326function remove( elem, selector, keepData ) {
8327	var node,
8328		nodes = selector ? jQuery.filter( selector, elem ) : elem,
8329		i = 0;
8330
8331	for ( ; ( node = nodes[ i ] ) != null; i++ ) {
8332		if ( !keepData && node.nodeType === 1 ) {
8333			jQuery.cleanData( getAll( node ) );
8334		}
8335
8336		if ( node.parentNode ) {
8337			if ( keepData && isAttached( node ) ) {
8338				setGlobalEval( getAll( node, "script" ) );
8339			}
8340			node.parentNode.removeChild( node );
8341		}
8342	}
8343
8344	return elem;
8345}
8346
8347jQuery.extend( {
8348	htmlPrefilter: function( html ) {
8349		return html;
8350	},
8351
8352	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
8353		var i, l, srcElements, destElements,
8354			clone = elem.cloneNode( true ),
8355			inPage = isAttached( elem );
8356
8357		// Fix IE cloning issues
8358		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
8359				!jQuery.isXMLDoc( elem ) ) {
8360
8361			// We eschew jQuery#find here for performance reasons:
8362			// https://jsperf.com/getall-vs-sizzle/2
8363			destElements = getAll( clone );
8364			srcElements = getAll( elem );
8365
8366			for ( i = 0, l = srcElements.length; i < l; i++ ) {
8367				fixInput( srcElements[ i ], destElements[ i ] );
8368			}
8369		}
8370
8371		// Copy the events from the original to the clone
8372		if ( dataAndEvents ) {
8373			if ( deepDataAndEvents ) {
8374				srcElements = srcElements || getAll( elem );
8375				destElements = destElements || getAll( clone );
8376
8377				for ( i = 0, l = srcElements.length; i < l; i++ ) {
8378					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
8379				}
8380			} else {
8381				cloneCopyEvent( elem, clone );
8382			}
8383		}
8384
8385		// Preserve script evaluation history
8386		destElements = getAll( clone, "script" );
8387		if ( destElements.length > 0 ) {
8388			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
8389		}
8390
8391		// Return the cloned set
8392		return clone;
8393	},
8394
8395	cleanData: function( elems ) {
8396		var data, elem, type,
8397			special = jQuery.event.special,
8398			i = 0;
8399
8400		for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
8401			if ( acceptData( elem ) ) {
8402				if ( ( data = elem[ dataPriv.expando ] ) ) {
8403					if ( data.events ) {
8404						for ( type in data.events ) {
8405							if ( special[ type ] ) {
8406								jQuery.event.remove( elem, type );
8407
8408							// This is a shortcut to avoid jQuery.event.remove's overhead
8409							} else {
8410								jQuery.removeEvent( elem, type, data.handle );
8411							}
8412						}
8413					}
8414
8415					// Support: Chrome <=35 - 45+
8416					// Assign undefined instead of using delete, see Data#remove
8417					elem[ dataPriv.expando ] = undefined;
8418				}
8419				if ( elem[ dataUser.expando ] ) {
8420
8421					// Support: Chrome <=35 - 45+
8422					// Assign undefined instead of using delete, see Data#remove
8423					elem[ dataUser.expando ] = undefined;
8424				}
8425			}
8426		}
8427	}
8428} );
8429
8430jQuery.fn.extend( {
8431	detach: function( selector ) {
8432		return remove( this, selector, true );
8433	},
8434
8435	remove: function( selector ) {
8436		return remove( this, selector );
8437	},
8438
8439	text: function( value ) {
8440		return access( this, function( value ) {
8441			return value === undefined ?
8442				jQuery.text( this ) :
8443				this.empty().each( function() {
8444					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
8445						this.textContent = value;
8446					}
8447				} );
8448		}, null, value, arguments.length );
8449	},
8450
8451	append: function() {
8452		return domManip( this, arguments, function( elem ) {
8453			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
8454				var target = manipulationTarget( this, elem );
8455				target.appendChild( elem );
8456			}
8457		} );
8458	},
8459
8460	prepend: function() {
8461		return domManip( this, arguments, function( elem ) {
8462			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
8463				var target = manipulationTarget( this, elem );
8464				target.insertBefore( elem, target.firstChild );
8465			}
8466		} );
8467	},
8468
8469	before: function() {
8470		return domManip( this, arguments, function( elem ) {
8471			if ( this.parentNode ) {
8472				this.parentNode.insertBefore( elem, this );
8473			}
8474		} );
8475	},
8476
8477	after: function() {
8478		return domManip( this, arguments, function( elem ) {
8479			if ( this.parentNode ) {
8480				this.parentNode.insertBefore( elem, this.nextSibling );
8481			}
8482		} );
8483	},
8484
8485	empty: function() {
8486		var elem,
8487			i = 0;
8488
8489		for ( ; ( elem = this[ i ] ) != null; i++ ) {
8490			if ( elem.nodeType === 1 ) {
8491
8492				// Prevent memory leaks
8493				jQuery.cleanData( getAll( elem, false ) );
8494
8495				// Remove any remaining nodes
8496				elem.textContent = "";
8497			}
8498		}
8499
8500		return this;
8501	},
8502
8503	clone: function( dataAndEvents, deepDataAndEvents ) {
8504		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
8505		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
8506
8507		return this.map( function() {
8508			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
8509		} );
8510	},
8511
8512	html: function( value ) {
8513		return access( this, function( value ) {
8514			var elem = this[ 0 ] || {},
8515				i = 0,
8516				l = this.length;
8517
8518			if ( value === undefined && elem.nodeType === 1 ) {
8519				return elem.innerHTML;
8520			}
8521
8522			// See if we can take a shortcut and just use innerHTML
8523			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
8524				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
8525
8526				value = jQuery.htmlPrefilter( value );
8527
8528				try {
8529					for ( ; i < l; i++ ) {
8530						elem = this[ i ] || {};
8531
8532						// Remove element nodes and prevent memory leaks
8533						if ( elem.nodeType === 1 ) {
8534							jQuery.cleanData( getAll( elem, false ) );
8535							elem.innerHTML = value;
8536						}
8537					}
8538
8539					elem = 0;
8540
8541				// If using innerHTML throws an exception, use the fallback method
8542				} catch ( e ) {}
8543			}
8544
8545			if ( elem ) {
8546				this.empty().append( value );
8547			}
8548		}, null, value, arguments.length );
8549	},
8550
8551	replaceWith: function() {
8552		var ignored = [];
8553
8554		// Make the changes, replacing each non-ignored context element with the new content
8555		return domManip( this, arguments, function( elem ) {
8556			var parent = this.parentNode;
8557
8558			if ( jQuery.inArray( this, ignored ) < 0 ) {
8559				jQuery.cleanData( getAll( this ) );
8560				if ( parent ) {
8561					parent.replaceChild( elem, this );
8562				}
8563			}
8564
8565		// Force callback invocation
8566		}, ignored );
8567	}
8568} );
8569
8570jQuery.each( {
8571	appendTo: "append",
8572	prependTo: "prepend",
8573	insertBefore: "before",
8574	insertAfter: "after",
8575	replaceAll: "replaceWith"
8576}, function( name, original ) {
8577	jQuery.fn[ name ] = function( selector ) {
8578		var elems,
8579			ret = [],
8580			insert = jQuery( selector ),
8581			last = insert.length - 1,
8582			i = 0;
8583
8584		for ( ; i <= last; i++ ) {
8585			elems = i === last ? this : this.clone( true );
8586			jQuery( insert[ i ] )[ original ]( elems );
8587
8588			// Support: Android <=4.0 only, PhantomJS 1 only
8589			// .get() because push.apply(_, arraylike) throws on ancient WebKit
8590			push.apply( ret, elems.get() );
8591		}
8592
8593		return this.pushStack( ret );
8594	};
8595} );
8596var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
8597
8598var rcustomProp = /^--/;
8599
8600
8601var getStyles = function( elem ) {
8602
8603		// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)
8604		// IE throws on elements created in popups
8605		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
8606		var view = elem.ownerDocument.defaultView;
8607
8608		if ( !view || !view.opener ) {
8609			view = window;
8610		}
8611
8612		return view.getComputedStyle( elem );
8613	};
8614
8615var swap = function( elem, options, callback ) {
8616	var ret, name,
8617		old = {};
8618
8619	// Remember the old values, and insert the new ones
8620	for ( name in options ) {
8621		old[ name ] = elem.style[ name ];
8622		elem.style[ name ] = options[ name ];
8623	}
8624
8625	ret = callback.call( elem );
8626
8627	// Revert the old values
8628	for ( name in options ) {
8629		elem.style[ name ] = old[ name ];
8630	}
8631
8632	return ret;
8633};
8634
8635
8636var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
8637
8638
8639
8640( function() {
8641
8642	// Executing both pixelPosition & boxSizingReliable tests require only one layout
8643	// so they're executed at the same time to save the second computation.
8644	function computeStyleTests() {
8645
8646		// This is a singleton, we need to execute it only once
8647		if ( !div ) {
8648			return;
8649		}
8650
8651		container.style.cssText = "position:absolute;left:-11111px;width:60px;" +
8652			"margin-top:1px;padding:0;border:0";
8653		div.style.cssText =
8654			"position:relative;display:block;box-sizing:border-box;overflow:scroll;" +
8655			"margin:auto;border:1px;padding:1px;" +
8656			"width:60%;top:1%";
8657		documentElement.appendChild( container ).appendChild( div );
8658
8659		var divStyle = window.getComputedStyle( div );
8660		pixelPositionVal = divStyle.top !== "1%";
8661
8662		// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
8663		reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;
8664
8665		// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
8666		// Some styles come back with percentage values, even though they shouldn't
8667		div.style.right = "60%";
8668		pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;
8669
8670		// Support: IE 9 - 11 only
8671		// Detect misreporting of content dimensions for box-sizing:border-box elements
8672		boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;
8673
8674		// Support: IE 9 only
8675		// Detect overflow:scroll screwiness (gh-3699)
8676		// Support: Chrome <=64
8677		// Don't get tricked when zoom affects offsetWidth (gh-4029)
8678		div.style.position = "absolute";
8679		scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;
8680
8681		documentElement.removeChild( container );
8682
8683		// Nullify the div so it wouldn't be stored in the memory and
8684		// it will also be a sign that checks already performed
8685		div = null;
8686	}
8687
8688	function roundPixelMeasures( measure ) {
8689		return Math.round( parseFloat( measure ) );
8690	}
8691
8692	var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
8693		reliableTrDimensionsVal, reliableMarginLeftVal,
8694		container = document.createElement( "div" ),
8695		div = document.createElement( "div" );
8696
8697	// Finish early in limited (non-browser) environments
8698	if ( !div.style ) {
8699		return;
8700	}
8701
8702	// Support: IE <=9 - 11 only
8703	// Style of cloned element affects source element cloned (trac-8908)
8704	div.style.backgroundClip = "content-box";
8705	div.cloneNode( true ).style.backgroundClip = "";
8706	support.clearCloneStyle = div.style.backgroundClip === "content-box";
8707
8708	jQuery.extend( support, {
8709		boxSizingReliable: function() {
8710			computeStyleTests();
8711			return boxSizingReliableVal;
8712		},
8713		pixelBoxStyles: function() {
8714			computeStyleTests();
8715			return pixelBoxStylesVal;
8716		},
8717		pixelPosition: function() {
8718			computeStyleTests();
8719			return pixelPositionVal;
8720		},
8721		reliableMarginLeft: function() {
8722			computeStyleTests();
8723			return reliableMarginLeftVal;
8724		},
8725		scrollboxSize: function() {
8726			computeStyleTests();
8727			return scrollboxSizeVal;
8728		},
8729
8730		// Support: IE 9 - 11+, Edge 15 - 18+
8731		// IE/Edge misreport `getComputedStyle` of table rows with width/height
8732		// set in CSS while `offset*` properties report correct values.
8733		// Behavior in IE 9 is more subtle than in newer versions & it passes
8734		// some versions of this test; make sure not to make it pass there!
8735		//
8736		// Support: Firefox 70+
8737		// Only Firefox includes border widths
8738		// in computed dimensions. (gh-4529)
8739		reliableTrDimensions: function() {
8740			var table, tr, trChild, trStyle;
8741			if ( reliableTrDimensionsVal == null ) {
8742				table = document.createElement( "table" );
8743				tr = document.createElement( "tr" );
8744				trChild = document.createElement( "div" );
8745
8746				table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";
8747				tr.style.cssText = "box-sizing:content-box;border:1px solid";
8748
8749				// Support: Chrome 86+
8750				// Height set through cssText does not get applied.
8751				// Computed height then comes back as 0.
8752				tr.style.height = "1px";
8753				trChild.style.height = "9px";
8754
8755				// Support: Android 8 Chrome 86+
8756				// In our bodyBackground.html iframe,
8757				// display for all div elements is set to "inline",
8758				// which causes a problem only in Android 8 Chrome 86.
8759				// Ensuring the div is `display: block`
8760				// gets around this issue.
8761				trChild.style.display = "block";
8762
8763				documentElement
8764					.appendChild( table )
8765					.appendChild( tr )
8766					.appendChild( trChild );
8767
8768				trStyle = window.getComputedStyle( tr );
8769				reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +
8770					parseInt( trStyle.borderTopWidth, 10 ) +
8771					parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;
8772
8773				documentElement.removeChild( table );
8774			}
8775			return reliableTrDimensionsVal;
8776		}
8777	} );
8778} )();
8779
8780
8781function curCSS( elem, name, computed ) {
8782	var width, minWidth, maxWidth, ret,
8783		isCustomProp = rcustomProp.test( name ),
8784
8785		// Support: Firefox 51+
8786		// Retrieving style before computed somehow
8787		// fixes an issue with getting wrong values
8788		// on detached elements
8789		style = elem.style;
8790
8791	computed = computed || getStyles( elem );
8792
8793	// getPropertyValue is needed for:
8794	//   .css('filter') (IE 9 only, trac-12537)
8795	//   .css('--customProperty) (gh-3144)
8796	if ( computed ) {
8797
8798		// Support: IE <=9 - 11+
8799		// IE only supports `"float"` in `getPropertyValue`; in computed styles
8800		// it's only available as `"cssFloat"`. We no longer modify properties
8801		// sent to `.css()` apart from camelCasing, so we need to check both.
8802		// Normally, this would create difference in behavior: if
8803		// `getPropertyValue` returns an empty string, the value returned
8804		// by `.css()` would be `undefined`. This is usually the case for
8805		// disconnected elements. However, in IE even disconnected elements
8806		// with no styles return `"none"` for `getPropertyValue( "float" )`
8807		ret = computed.getPropertyValue( name ) || computed[ name ];
8808
8809		if ( isCustomProp && ret ) {
8810
8811			// Support: Firefox 105+, Chrome <=105+
8812			// Spec requires trimming whitespace for custom properties (gh-4926).
8813			// Firefox only trims leading whitespace. Chrome just collapses
8814			// both leading & trailing whitespace to a single space.
8815			//
8816			// Fall back to `undefined` if empty string returned.
8817			// This collapses a missing definition with property defined
8818			// and set to an empty string but there's no standard API
8819			// allowing us to differentiate them without a performance penalty
8820			// and returning `undefined` aligns with older jQuery.
8821			//
8822			// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED
8823			// as whitespace while CSS does not, but this is not a problem
8824			// because CSS preprocessing replaces them with U+000A LINE FEED
8825			// (which *is* CSS whitespace)
8826			// https://www.w3.org/TR/css-syntax-3/#input-preprocessing
8827			ret = ret.replace( rtrimCSS, "$1" ) || undefined;
8828		}
8829
8830		if ( ret === "" && !isAttached( elem ) ) {
8831			ret = jQuery.style( elem, name );
8832		}
8833
8834		// A tribute to the "awesome hack by Dean Edwards"
8835		// Android Browser returns percentage for some values,
8836		// but width seems to be reliably pixels.
8837		// This is against the CSSOM draft spec:
8838		// https://drafts.csswg.org/cssom/#resolved-values
8839		if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {
8840
8841			// Remember the original values
8842			width = style.width;
8843			minWidth = style.minWidth;
8844			maxWidth = style.maxWidth;
8845
8846			// Put in the new values to get a computed value out
8847			style.minWidth = style.maxWidth = style.width = ret;
8848			ret = computed.width;
8849
8850			// Revert the changed values
8851			style.width = width;
8852			style.minWidth = minWidth;
8853			style.maxWidth = maxWidth;
8854		}
8855	}
8856
8857	return ret !== undefined ?
8858
8859		// Support: IE <=9 - 11 only
8860		// IE returns zIndex value as an integer.
8861		ret + "" :
8862		ret;
8863}
8864
8865
8866function addGetHookIf( conditionFn, hookFn ) {
8867
8868	// Define the hook, we'll check on the first run if it's really needed.
8869	return {
8870		get: function() {
8871			if ( conditionFn() ) {
8872
8873				// Hook not needed (or it's not possible to use it due
8874				// to missing dependency), remove it.
8875				delete this.get;
8876				return;
8877			}
8878
8879			// Hook needed; redefine it so that the support test is not executed again.
8880			return ( this.get = hookFn ).apply( this, arguments );
8881		}
8882	};
8883}
8884
8885
8886var cssPrefixes = [ "Webkit", "Moz", "ms" ],
8887	emptyStyle = document.createElement( "div" ).style,
8888	vendorProps = {};
8889
8890// Return a vendor-prefixed property or undefined
8891function vendorPropName( name ) {
8892
8893	// Check for vendor prefixed names
8894	var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
8895		i = cssPrefixes.length;
8896
8897	while ( i-- ) {
8898		name = cssPrefixes[ i ] + capName;
8899		if ( name in emptyStyle ) {
8900			return name;
8901		}
8902	}
8903}
8904
8905// Return a potentially-mapped jQuery.cssProps or vendor prefixed property
8906function finalPropName( name ) {
8907	var final = jQuery.cssProps[ name ] || vendorProps[ name ];
8908
8909	if ( final ) {
8910		return final;
8911	}
8912	if ( name in emptyStyle ) {
8913		return name;
8914	}
8915	return vendorProps[ name ] = vendorPropName( name ) || name;
8916}
8917
8918
8919var
8920
8921	// Swappable if display is none or starts with table
8922	// except "table", "table-cell", or "table-caption"
8923	// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
8924	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
8925	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
8926	cssNormalTransform = {
8927		letterSpacing: "0",
8928		fontWeight: "400"
8929	};
8930
8931function setPositiveNumber( _elem, value, subtract ) {
8932
8933	// Any relative (+/-) values have already been
8934	// normalized at this point
8935	var matches = rcssNum.exec( value );
8936	return matches ?
8937
8938		// Guard against undefined "subtract", e.g., when used as in cssHooks
8939		Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
8940		value;
8941}
8942
8943function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
8944	var i = dimension === "width" ? 1 : 0,
8945		extra = 0,
8946		delta = 0,
8947		marginDelta = 0;
8948
8949	// Adjustment may not be necessary
8950	if ( box === ( isBorderBox ? "border" : "content" ) ) {
8951		return 0;
8952	}
8953
8954	for ( ; i < 4; i += 2 ) {
8955
8956		// Both box models exclude margin
8957		// Count margin delta separately to only add it after scroll gutter adjustment.
8958		// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).
8959		if ( box === "margin" ) {
8960			marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
8961		}
8962
8963		// If we get here with a content-box, we're seeking "padding" or "border" or "margin"
8964		if ( !isBorderBox ) {
8965
8966			// Add padding
8967			delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
8968
8969			// For "border" or "margin", add border
8970			if ( box !== "padding" ) {
8971				delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
8972
8973			// But still keep track of it otherwise
8974			} else {
8975				extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
8976			}
8977
8978		// If we get here with a border-box (content + padding + border), we're seeking "content" or
8979		// "padding" or "margin"
8980		} else {
8981
8982			// For "content", subtract padding
8983			if ( box === "content" ) {
8984				delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
8985			}
8986
8987			// For "content" or "padding", subtract border
8988			if ( box !== "margin" ) {
8989				delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
8990			}
8991		}
8992	}
8993
8994	// Account for positive content-box scroll gutter when requested by providing computedVal
8995	if ( !isBorderBox && computedVal >= 0 ) {
8996
8997		// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
8998		// Assuming integer scroll gutter, subtract the rest and round down
8999		delta += Math.max( 0, Math.ceil(
9000			elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
9001			computedVal -
9002			delta -
9003			extra -
9004			0.5
9005
9006		// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter
9007		// Use an explicit zero to avoid NaN (gh-3964)
9008		) ) || 0;
9009	}
9010
9011	return delta + marginDelta;
9012}
9013
9014function getWidthOrHeight( elem, dimension, extra ) {
9015
9016	// Start with computed style
9017	var styles = getStyles( elem ),
9018
9019		// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).
9020		// Fake content-box until we know it's needed to know the true value.
9021		boxSizingNeeded = !support.boxSizingReliable() || extra,
9022		isBorderBox = boxSizingNeeded &&
9023			jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
9024		valueIsBorderBox = isBorderBox,
9025
9026		val = curCSS( elem, dimension, styles ),
9027		offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );
9028
9029	// Support: Firefox <=54
9030	// Return a confounding non-pixel value or feign ignorance, as appropriate.
9031	if ( rnumnonpx.test( val ) ) {
9032		if ( !extra ) {
9033			return val;
9034		}
9035		val = "auto";
9036	}
9037
9038
9039	// Support: IE 9 - 11 only
9040	// Use offsetWidth/offsetHeight for when box sizing is unreliable.
9041	// In those cases, the computed value can be trusted to be border-box.
9042	if ( ( !support.boxSizingReliable() && isBorderBox ||
9043
9044		// Support: IE 10 - 11+, Edge 15 - 18+
9045		// IE/Edge misreport `getComputedStyle` of table rows with width/height
9046		// set in CSS while `offset*` properties report correct values.
9047		// Interestingly, in some cases IE 9 doesn't suffer from this issue.
9048		!support.reliableTrDimensions() && nodeName( elem, "tr" ) ||
9049
9050		// Fall back to offsetWidth/offsetHeight when value is "auto"
9051		// This happens for inline elements with no explicit setting (gh-3571)
9052		val === "auto" ||
9053
9054		// Support: Android <=4.1 - 4.3 only
9055		// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
9056		!parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) &&
9057
9058		// Make sure the element is visible & connected
9059		elem.getClientRects().length ) {
9060
9061		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
9062
9063		// Where available, offsetWidth/offsetHeight approximate border box dimensions.
9064		// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the
9065		// retrieved value as a content box dimension.
9066		valueIsBorderBox = offsetProp in elem;
9067		if ( valueIsBorderBox ) {
9068			val = elem[ offsetProp ];
9069		}
9070	}
9071
9072	// Normalize "" and auto
9073	val = parseFloat( val ) || 0;
9074
9075	// Adjust for the element's box model
9076	return ( val +
9077		boxModelAdjustment(
9078			elem,
9079			dimension,
9080			extra || ( isBorderBox ? "border" : "content" ),
9081			valueIsBorderBox,
9082			styles,
9083
9084			// Provide the current computed size to request scroll gutter calculation (gh-3589)
9085			val
9086		)
9087	) + "px";
9088}
9089
9090jQuery.extend( {
9091
9092	// Add in style property hooks for overriding the default
9093	// behavior of getting and setting a style property
9094	cssHooks: {
9095		opacity: {
9096			get: function( elem, computed ) {
9097				if ( computed ) {
9098
9099					// We should always get a number back from opacity
9100					var ret = curCSS( elem, "opacity" );
9101					return ret === "" ? "1" : ret;
9102				}
9103			}
9104		}
9105	},
9106
9107	// Don't automatically add "px" to these possibly-unitless properties
9108	cssNumber: {
9109		animationIterationCount: true,
9110		aspectRatio: true,
9111		borderImageSlice: true,
9112		columnCount: true,
9113		flexGrow: true,
9114		flexShrink: true,
9115		fontWeight: true,
9116		gridArea: true,
9117		gridColumn: true,
9118		gridColumnEnd: true,
9119		gridColumnStart: true,
9120		gridRow: true,
9121		gridRowEnd: true,
9122		gridRowStart: true,
9123		lineHeight: true,
9124		opacity: true,
9125		order: true,
9126		orphans: true,
9127		scale: true,
9128		widows: true,
9129		zIndex: true,
9130		zoom: true,
9131
9132		// SVG-related
9133		fillOpacity: true,
9134		floodOpacity: true,
9135		stopOpacity: true,
9136		strokeMiterlimit: true,
9137		strokeOpacity: true
9138	},
9139
9140	// Add in properties whose names you wish to fix before
9141	// setting or getting the value
9142	cssProps: {},
9143
9144	// Get and set the style property on a DOM Node
9145	style: function( elem, name, value, extra ) {
9146
9147		// Don't set styles on text and comment nodes
9148		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
9149			return;
9150		}
9151
9152		// Make sure that we're working with the right name
9153		var ret, type, hooks,
9154			origName = camelCase( name ),
9155			isCustomProp = rcustomProp.test( name ),
9156			style = elem.style;
9157
9158		// Make sure that we're working with the right name. We don't
9159		// want to query the value if it is a CSS custom property
9160		// since they are user-defined.
9161		if ( !isCustomProp ) {
9162			name = finalPropName( origName );
9163		}
9164
9165		// Gets hook for the prefixed version, then unprefixed version
9166		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
9167
9168		// Check if we're setting a value
9169		if ( value !== undefined ) {
9170			type = typeof value;
9171
9172			// Convert "+=" or "-=" to relative numbers (trac-7345)
9173			if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
9174				value = adjustCSS( elem, name, ret );
9175
9176				// Fixes bug trac-9237
9177				type = "number";
9178			}
9179
9180			// Make sure that null and NaN values aren't set (trac-7116)
9181			if ( value == null || value !== value ) {
9182				return;
9183			}
9184
9185			// If a number was passed in, add the unit (except for certain CSS properties)
9186			// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append
9187			// "px" to a few hardcoded values.
9188			if ( type === "number" && !isCustomProp ) {
9189				value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
9190			}
9191
9192			// background-* props affect original clone's values
9193			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
9194				style[ name ] = "inherit";
9195			}
9196
9197			// If a hook was provided, use that value, otherwise just set the specified value
9198			if ( !hooks || !( "set" in hooks ) ||
9199				( value = hooks.set( elem, value, extra ) ) !== undefined ) {
9200
9201				if ( isCustomProp ) {
9202					style.setProperty( name, value );
9203				} else {
9204					style[ name ] = value;
9205				}
9206			}
9207
9208		} else {
9209
9210			// If a hook was provided get the non-computed value from there
9211			if ( hooks && "get" in hooks &&
9212				( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
9213
9214				return ret;
9215			}
9216
9217			// Otherwise just get the value from the style object
9218			return style[ name ];
9219		}
9220	},
9221
9222	css: function( elem, name, extra, styles ) {
9223		var val, num, hooks,
9224			origName = camelCase( name ),
9225			isCustomProp = rcustomProp.test( name );
9226
9227		// Make sure that we're working with the right name. We don't
9228		// want to modify the value if it is a CSS custom property
9229		// since they are user-defined.
9230		if ( !isCustomProp ) {
9231			name = finalPropName( origName );
9232		}
9233
9234		// Try prefixed name followed by the unprefixed name
9235		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
9236
9237		// If a hook was provided get the computed value from there
9238		if ( hooks && "get" in hooks ) {
9239			val = hooks.get( elem, true, extra );
9240		}
9241
9242		// Otherwise, if a way to get the computed value exists, use that
9243		if ( val === undefined ) {
9244			val = curCSS( elem, name, styles );
9245		}
9246
9247		// Convert "normal" to computed value
9248		if ( val === "normal" && name in cssNormalTransform ) {
9249			val = cssNormalTransform[ name ];
9250		}
9251
9252		// Make numeric if forced or a qualifier was provided and val looks numeric
9253		if ( extra === "" || extra ) {
9254			num = parseFloat( val );
9255			return extra === true || isFinite( num ) ? num || 0 : val;
9256		}
9257
9258		return val;
9259	}
9260} );
9261
9262jQuery.each( [ "height", "width" ], function( _i, dimension ) {
9263	jQuery.cssHooks[ dimension ] = {
9264		get: function( elem, computed, extra ) {
9265			if ( computed ) {
9266
9267				// Certain elements can have dimension info if we invisibly show them
9268				// but it must have a current display style that would benefit
9269				return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
9270
9271					// Support: Safari 8+
9272					// Table columns in Safari have non-zero offsetWidth & zero
9273					// getBoundingClientRect().width unless display is changed.
9274					// Support: IE <=11 only
9275					// Running getBoundingClientRect on a disconnected node
9276					// in IE throws an error.
9277					( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
9278					swap( elem, cssShow, function() {
9279						return getWidthOrHeight( elem, dimension, extra );
9280					} ) :
9281					getWidthOrHeight( elem, dimension, extra );
9282			}
9283		},
9284
9285		set: function( elem, value, extra ) {
9286			var matches,
9287				styles = getStyles( elem ),
9288
9289				// Only read styles.position if the test has a chance to fail
9290				// to avoid forcing a reflow.
9291				scrollboxSizeBuggy = !support.scrollboxSize() &&
9292					styles.position === "absolute",
9293
9294				// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)
9295				boxSizingNeeded = scrollboxSizeBuggy || extra,
9296				isBorderBox = boxSizingNeeded &&
9297					jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
9298				subtract = extra ?
9299					boxModelAdjustment(
9300						elem,
9301						dimension,
9302						extra,
9303						isBorderBox,
9304						styles
9305					) :
9306					0;
9307
9308			// Account for unreliable border-box dimensions by comparing offset* to computed and
9309			// faking a content-box to get border and padding (gh-3699)
9310			if ( isBorderBox && scrollboxSizeBuggy ) {
9311				subtract -= Math.ceil(
9312					elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
9313					parseFloat( styles[ dimension ] ) -
9314					boxModelAdjustment( elem, dimension, "border", false, styles ) -
9315					0.5
9316				);
9317			}
9318
9319			// Convert to pixels if value adjustment is needed
9320			if ( subtract && ( matches = rcssNum.exec( value ) ) &&
9321				( matches[ 3 ] || "px" ) !== "px" ) {
9322
9323				elem.style[ dimension ] = value;
9324				value = jQuery.css( elem, dimension );
9325			}
9326
9327			return setPositiveNumber( elem, value, subtract );
9328		}
9329	};
9330} );
9331
9332jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
9333	function( elem, computed ) {
9334		if ( computed ) {
9335			return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
9336				elem.getBoundingClientRect().left -
9337					swap( elem, { marginLeft: 0 }, function() {
9338						return elem.getBoundingClientRect().left;
9339					} )
9340			) + "px";
9341		}
9342	}
9343);
9344
9345// These hooks are used by animate to expand properties
9346jQuery.each( {
9347	margin: "",
9348	padding: "",
9349	border: "Width"
9350}, function( prefix, suffix ) {
9351	jQuery.cssHooks[ prefix + suffix ] = {
9352		expand: function( value ) {
9353			var i = 0,
9354				expanded = {},
9355
9356				// Assumes a single number if not a string
9357				parts = typeof value === "string" ? value.split( " " ) : [ value ];
9358
9359			for ( ; i < 4; i++ ) {
9360				expanded[ prefix + cssExpand[ i ] + suffix ] =
9361					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
9362			}
9363
9364			return expanded;
9365		}
9366	};
9367
9368	if ( prefix !== "margin" ) {
9369		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
9370	}
9371} );
9372
9373jQuery.fn.extend( {
9374	css: function( name, value ) {
9375		return access( this, function( elem, name, value ) {
9376			var styles, len,
9377				map = {},
9378				i = 0;
9379
9380			if ( Array.isArray( name ) ) {
9381				styles = getStyles( elem );
9382				len = name.length;
9383
9384				for ( ; i < len; i++ ) {
9385					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
9386				}
9387
9388				return map;
9389			}
9390
9391			return value !== undefined ?
9392				jQuery.style( elem, name, value ) :
9393				jQuery.css( elem, name );
9394		}, name, value, arguments.length > 1 );
9395	}
9396} );
9397
9398
9399function Tween( elem, options, prop, end, easing ) {
9400	return new Tween.prototype.init( elem, options, prop, end, easing );
9401}
9402jQuery.Tween = Tween;
9403
9404Tween.prototype = {
9405	constructor: Tween,
9406	init: function( elem, options, prop, end, easing, unit ) {
9407		this.elem = elem;
9408		this.prop = prop;
9409		this.easing = easing || jQuery.easing._default;
9410		this.options = options;
9411		this.start = this.now = this.cur();
9412		this.end = end;
9413		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
9414	},
9415	cur: function() {
9416		var hooks = Tween.propHooks[ this.prop ];
9417
9418		return hooks && hooks.get ?
9419			hooks.get( this ) :
9420			Tween.propHooks._default.get( this );
9421	},
9422	run: function( percent ) {
9423		var eased,
9424			hooks = Tween.propHooks[ this.prop ];
9425
9426		if ( this.options.duration ) {
9427			this.pos = eased = jQuery.easing[ this.easing ](
9428				percent, this.options.duration * percent, 0, 1, this.options.duration
9429			);
9430		} else {
9431			this.pos = eased = percent;
9432		}
9433		this.now = ( this.end - this.start ) * eased + this.start;
9434
9435		if ( this.options.step ) {
9436			this.options.step.call( this.elem, this.now, this );
9437		}
9438
9439		if ( hooks && hooks.set ) {
9440			hooks.set( this );
9441		} else {
9442			Tween.propHooks._default.set( this );
9443		}
9444		return this;
9445	}
9446};
9447
9448Tween.prototype.init.prototype = Tween.prototype;
9449
9450Tween.propHooks = {
9451	_default: {
9452		get: function( tween ) {
9453			var result;
9454
9455			// Use a property on the element directly when it is not a DOM element,
9456			// or when there is no matching style property that exists.
9457			if ( tween.elem.nodeType !== 1 ||
9458				tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
9459				return tween.elem[ tween.prop ];
9460			}
9461
9462			// Passing an empty string as a 3rd parameter to .css will automatically
9463			// attempt a parseFloat and fallback to a string if the parse fails.
9464			// Simple values such as "10px" are parsed to Float;
9465			// complex values such as "rotate(1rad)" are returned as-is.
9466			result = jQuery.css( tween.elem, tween.prop, "" );
9467
9468			// Empty strings, null, undefined and "auto" are converted to 0.
9469			return !result || result === "auto" ? 0 : result;
9470		},
9471		set: function( tween ) {
9472
9473			// Use step hook for back compat.
9474			// Use cssHook if its there.
9475			// Use .style if available and use plain properties where available.
9476			if ( jQuery.fx.step[ tween.prop ] ) {
9477				jQuery.fx.step[ tween.prop ]( tween );
9478			} else if ( tween.elem.nodeType === 1 && (
9479				jQuery.cssHooks[ tween.prop ] ||
9480					tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {
9481				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
9482			} else {
9483				tween.elem[ tween.prop ] = tween.now;
9484			}
9485		}
9486	}
9487};
9488
9489// Support: IE <=9 only
9490// Panic based approach to setting things on disconnected nodes
9491Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
9492	set: function( tween ) {
9493		if ( tween.elem.nodeType && tween.elem.parentNode ) {
9494			tween.elem[ tween.prop ] = tween.now;
9495		}
9496	}
9497};
9498
9499jQuery.easing = {
9500	linear: function( p ) {
9501		return p;
9502	},
9503	swing: function( p ) {
9504		return 0.5 - Math.cos( p * Math.PI ) / 2;
9505	},
9506	_default: "swing"
9507};
9508
9509jQuery.fx = Tween.prototype.init;
9510
9511// Back compat <1.8 extension point
9512jQuery.fx.step = {};
9513
9514
9515
9516
9517var
9518	fxNow, inProgress,
9519	rfxtypes = /^(?:toggle|show|hide)$/,
9520	rrun = /queueHooks$/;
9521
9522function schedule() {
9523	if ( inProgress ) {
9524		if ( document.hidden === false && window.requestAnimationFrame ) {
9525			window.requestAnimationFrame( schedule );
9526		} else {
9527			window.setTimeout( schedule, jQuery.fx.interval );
9528		}
9529
9530		jQuery.fx.tick();
9531	}
9532}
9533
9534// Animations created synchronously will run synchronously
9535function createFxNow() {
9536	window.setTimeout( function() {
9537		fxNow = undefined;
9538	} );
9539	return ( fxNow = Date.now() );
9540}
9541
9542// Generate parameters to create a standard animation
9543function genFx( type, includeWidth ) {
9544	var which,
9545		i = 0,
9546		attrs = { height: type };
9547
9548	// If we include width, step value is 1 to do all cssExpand values,
9549	// otherwise step value is 2 to skip over Left and Right
9550	includeWidth = includeWidth ? 1 : 0;
9551	for ( ; i < 4; i += 2 - includeWidth ) {
9552		which = cssExpand[ i ];
9553		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
9554	}
9555
9556	if ( includeWidth ) {
9557		attrs.opacity = attrs.width = type;
9558	}
9559
9560	return attrs;
9561}
9562
9563function createTween( value, prop, animation ) {
9564	var tween,
9565		collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
9566		index = 0,
9567		length = collection.length;
9568	for ( ; index < length; index++ ) {
9569		if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
9570
9571			// We're done with this property
9572			return tween;
9573		}
9574	}
9575}
9576
9577function defaultPrefilter( elem, props, opts ) {
9578	var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
9579		isBox = "width" in props || "height" in props,
9580		anim = this,
9581		orig = {},
9582		style = elem.style,
9583		hidden = elem.nodeType && isHiddenWithinTree( elem ),
9584		dataShow = dataPriv.get( elem, "fxshow" );
9585
9586	// Queue-skipping animations hijack the fx hooks
9587	if ( !opts.queue ) {
9588		hooks = jQuery._queueHooks( elem, "fx" );
9589		if ( hooks.unqueued == null ) {
9590			hooks.unqueued = 0;
9591			oldfire = hooks.empty.fire;
9592			hooks.empty.fire = function() {
9593				if ( !hooks.unqueued ) {
9594					oldfire();
9595				}
9596			};
9597		}
9598		hooks.unqueued++;
9599
9600		anim.always( function() {
9601
9602			// Ensure the complete handler is called before this completes
9603			anim.always( function() {
9604				hooks.unqueued--;
9605				if ( !jQuery.queue( elem, "fx" ).length ) {
9606					hooks.empty.fire();
9607				}
9608			} );
9609		} );
9610	}
9611
9612	// Detect show/hide animations
9613	for ( prop in props ) {
9614		value = props[ prop ];
9615		if ( rfxtypes.test( value ) ) {
9616			delete props[ prop ];
9617			toggle = toggle || value === "toggle";
9618			if ( value === ( hidden ? "hide" : "show" ) ) {
9619
9620				// Pretend to be hidden if this is a "show" and
9621				// there is still data from a stopped show/hide
9622				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
9623					hidden = true;
9624
9625				// Ignore all other no-op show/hide data
9626				} else {
9627					continue;
9628				}
9629			}
9630			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
9631		}
9632	}
9633
9634	// Bail out if this is a no-op like .hide().hide()
9635	propTween = !jQuery.isEmptyObject( props );
9636	if ( !propTween && jQuery.isEmptyObject( orig ) ) {
9637		return;
9638	}
9639
9640	// Restrict "overflow" and "display" styles during box animations
9641	if ( isBox && elem.nodeType === 1 ) {
9642
9643		// Support: IE <=9 - 11, Edge 12 - 15
9644		// Record all 3 overflow attributes because IE does not infer the shorthand
9645		// from identically-valued overflowX and overflowY and Edge just mirrors
9646		// the overflowX value there.
9647		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
9648
9649		// Identify a display type, preferring old show/hide data over the CSS cascade
9650		restoreDisplay = dataShow && dataShow.display;
9651		if ( restoreDisplay == null ) {
9652			restoreDisplay = dataPriv.get( elem, "display" );
9653		}
9654		display = jQuery.css( elem, "display" );
9655		if ( display === "none" ) {
9656			if ( restoreDisplay ) {
9657				display = restoreDisplay;
9658			} else {
9659
9660				// Get nonempty value(s) by temporarily forcing visibility
9661				showHide( [ elem ], true );
9662				restoreDisplay = elem.style.display || restoreDisplay;
9663				display = jQuery.css( elem, "display" );
9664				showHide( [ elem ] );
9665			}
9666		}
9667
9668		// Animate inline elements as inline-block
9669		if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
9670			if ( jQuery.css( elem, "float" ) === "none" ) {
9671
9672				// Restore the original display value at the end of pure show/hide animations
9673				if ( !propTween ) {
9674					anim.done( function() {
9675						style.display = restoreDisplay;
9676					} );
9677					if ( restoreDisplay == null ) {
9678						display = style.display;
9679						restoreDisplay = display === "none" ? "" : display;
9680					}
9681				}
9682				style.display = "inline-block";
9683			}
9684		}
9685	}
9686
9687	if ( opts.overflow ) {
9688		style.overflow = "hidden";
9689		anim.always( function() {
9690			style.overflow = opts.overflow[ 0 ];
9691			style.overflowX = opts.overflow[ 1 ];
9692			style.overflowY = opts.overflow[ 2 ];
9693		} );
9694	}
9695
9696	// Implement show/hide animations
9697	propTween = false;
9698	for ( prop in orig ) {
9699
9700		// General show/hide setup for this element animation
9701		if ( !propTween ) {
9702			if ( dataShow ) {
9703				if ( "hidden" in dataShow ) {
9704					hidden = dataShow.hidden;
9705				}
9706			} else {
9707				dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
9708			}
9709
9710			// Store hidden/visible for toggle so `.stop().toggle()` "reverses"
9711			if ( toggle ) {
9712				dataShow.hidden = !hidden;
9713			}
9714
9715			// Show elements before animating them
9716			if ( hidden ) {
9717				showHide( [ elem ], true );
9718			}
9719
9720			/* eslint-disable no-loop-func */
9721
9722			anim.done( function() {
9723
9724				/* eslint-enable no-loop-func */
9725
9726				// The final step of a "hide" animation is actually hiding the element
9727				if ( !hidden ) {
9728					showHide( [ elem ] );
9729				}
9730				dataPriv.remove( elem, "fxshow" );
9731				for ( prop in orig ) {
9732					jQuery.style( elem, prop, orig[ prop ] );
9733				}
9734			} );
9735		}
9736
9737		// Per-property setup
9738		propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
9739		if ( !( prop in dataShow ) ) {
9740			dataShow[ prop ] = propTween.start;
9741			if ( hidden ) {
9742				propTween.end = propTween.start;
9743				propTween.start = 0;
9744			}
9745		}
9746	}
9747}
9748
9749function propFilter( props, specialEasing ) {
9750	var index, name, easing, value, hooks;
9751
9752	// camelCase, specialEasing and expand cssHook pass
9753	for ( index in props ) {
9754		name = camelCase( index );
9755		easing = specialEasing[ name ];
9756		value = props[ index ];
9757		if ( Array.isArray( value ) ) {
9758			easing = value[ 1 ];
9759			value = props[ index ] = value[ 0 ];
9760		}
9761
9762		if ( index !== name ) {
9763			props[ name ] = value;
9764			delete props[ index ];
9765		}
9766
9767		hooks = jQuery.cssHooks[ name ];
9768		if ( hooks && "expand" in hooks ) {
9769			value = hooks.expand( value );
9770			delete props[ name ];
9771
9772			// Not quite $.extend, this won't overwrite existing keys.
9773			// Reusing 'index' because we have the correct "name"
9774			for ( index in value ) {
9775				if ( !( index in props ) ) {
9776					props[ index ] = value[ index ];
9777					specialEasing[ index ] = easing;
9778				}
9779			}
9780		} else {
9781			specialEasing[ name ] = easing;
9782		}
9783	}
9784}
9785
9786function Animation( elem, properties, options ) {
9787	var result,
9788		stopped,
9789		index = 0,
9790		length = Animation.prefilters.length,
9791		deferred = jQuery.Deferred().always( function() {
9792
9793			// Don't match elem in the :animated selector
9794			delete tick.elem;
9795		} ),
9796		tick = function() {
9797			if ( stopped ) {
9798				return false;
9799			}
9800			var currentTime = fxNow || createFxNow(),
9801				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
9802
9803				// Support: Android 2.3 only
9804				// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)
9805				temp = remaining / animation.duration || 0,
9806				percent = 1 - temp,
9807				index = 0,
9808				length = animation.tweens.length;
9809
9810			for ( ; index < length; index++ ) {
9811				animation.tweens[ index ].run( percent );
9812			}
9813
9814			deferred.notifyWith( elem, [ animation, percent, remaining ] );
9815
9816			// If there's more to do, yield
9817			if ( percent < 1 && length ) {
9818				return remaining;
9819			}
9820
9821			// If this was an empty animation, synthesize a final progress notification
9822			if ( !length ) {
9823				deferred.notifyWith( elem, [ animation, 1, 0 ] );
9824			}
9825
9826			// Resolve the animation and report its conclusion
9827			deferred.resolveWith( elem, [ animation ] );
9828			return false;
9829		},
9830		animation = deferred.promise( {
9831			elem: elem,
9832			props: jQuery.extend( {}, properties ),
9833			opts: jQuery.extend( true, {
9834				specialEasing: {},
9835				easing: jQuery.easing._default
9836			}, options ),
9837			originalProperties: properties,
9838			originalOptions: options,
9839			startTime: fxNow || createFxNow(),
9840			duration: options.duration,
9841			tweens: [],
9842			createTween: function( prop, end ) {
9843				var tween = jQuery.Tween( elem, animation.opts, prop, end,
9844					animation.opts.specialEasing[ prop ] || animation.opts.easing );
9845				animation.tweens.push( tween );
9846				return tween;
9847			},
9848			stop: function( gotoEnd ) {
9849				var index = 0,
9850
9851					// If we are going to the end, we want to run all the tweens
9852					// otherwise we skip this part
9853					length = gotoEnd ? animation.tweens.length : 0;
9854				if ( stopped ) {
9855					return this;
9856				}
9857				stopped = true;
9858				for ( ; index < length; index++ ) {
9859					animation.tweens[ index ].run( 1 );
9860				}
9861
9862				// Resolve when we played the last frame; otherwise, reject
9863				if ( gotoEnd ) {
9864					deferred.notifyWith( elem, [ animation, 1, 0 ] );
9865					deferred.resolveWith( elem, [ animation, gotoEnd ] );
9866				} else {
9867					deferred.rejectWith( elem, [ animation, gotoEnd ] );
9868				}
9869				return this;
9870			}
9871		} ),
9872		props = animation.props;
9873
9874	propFilter( props, animation.opts.specialEasing );
9875
9876	for ( ; index < length; index++ ) {
9877		result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
9878		if ( result ) {
9879			if ( isFunction( result.stop ) ) {
9880				jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
9881					result.stop.bind( result );
9882			}
9883			return result;
9884		}
9885	}
9886
9887	jQuery.map( props, createTween, animation );
9888
9889	if ( isFunction( animation.opts.start ) ) {
9890		animation.opts.start.call( elem, animation );
9891	}
9892
9893	// Attach callbacks from options
9894	animation
9895		.progress( animation.opts.progress )
9896		.done( animation.opts.done, animation.opts.complete )
9897		.fail( animation.opts.fail )
9898		.always( animation.opts.always );
9899
9900	jQuery.fx.timer(
9901		jQuery.extend( tick, {
9902			elem: elem,
9903			anim: animation,
9904			queue: animation.opts.queue
9905		} )
9906	);
9907
9908	return animation;
9909}
9910
9911jQuery.Animation = jQuery.extend( Animation, {
9912
9913	tweeners: {
9914		"*": [ function( prop, value ) {
9915			var tween = this.createTween( prop, value );
9916			adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
9917			return tween;
9918		} ]
9919	},
9920
9921	tweener: function( props, callback ) {
9922		if ( isFunction( props ) ) {
9923			callback = props;
9924			props = [ "*" ];
9925		} else {
9926			props = props.match( rnothtmlwhite );
9927		}
9928
9929		var prop,
9930			index = 0,
9931			length = props.length;
9932
9933		for ( ; index < length; index++ ) {
9934			prop = props[ index ];
9935			Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
9936			Animation.tweeners[ prop ].unshift( callback );
9937		}
9938	},
9939
9940	prefilters: [ defaultPrefilter ],
9941
9942	prefilter: function( callback, prepend ) {
9943		if ( prepend ) {
9944			Animation.prefilters.unshift( callback );
9945		} else {
9946			Animation.prefilters.push( callback );
9947		}
9948	}
9949} );
9950
9951jQuery.speed = function( speed, easing, fn ) {
9952	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
9953		complete: fn || !fn && easing ||
9954			isFunction( speed ) && speed,
9955		duration: speed,
9956		easing: fn && easing || easing && !isFunction( easing ) && easing
9957	};
9958
9959	// Go to the end state if fx are off
9960	if ( jQuery.fx.off ) {
9961		opt.duration = 0;
9962
9963	} else {
9964		if ( typeof opt.duration !== "number" ) {
9965			if ( opt.duration in jQuery.fx.speeds ) {
9966				opt.duration = jQuery.fx.speeds[ opt.duration ];
9967
9968			} else {
9969				opt.duration = jQuery.fx.speeds._default;
9970			}
9971		}
9972	}
9973
9974	// Normalize opt.queue - true/undefined/null -> "fx"
9975	if ( opt.queue == null || opt.queue === true ) {
9976		opt.queue = "fx";
9977	}
9978
9979	// Queueing
9980	opt.old = opt.complete;
9981
9982	opt.complete = function() {
9983		if ( isFunction( opt.old ) ) {
9984			opt.old.call( this );
9985		}
9986
9987		if ( opt.queue ) {
9988			jQuery.dequeue( this, opt.queue );
9989		}
9990	};
9991
9992	return opt;
9993};
9994
9995jQuery.fn.extend( {
9996	fadeTo: function( speed, to, easing, callback ) {
9997
9998		// Show any hidden elements after setting opacity to 0
9999		return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
10000
10001			// Animate to the value specified
10002			.end().animate( { opacity: to }, speed, easing, callback );
10003	},
10004	animate: function( prop, speed, easing, callback ) {
10005		var empty = jQuery.isEmptyObject( prop ),
10006			optall = jQuery.speed( speed, easing, callback ),
10007			doAnimation = function() {
10008
10009				// Operate on a copy of prop so per-property easing won't be lost
10010				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
10011
10012				// Empty animations, or finishing resolves immediately
10013				if ( empty || dataPriv.get( this, "finish" ) ) {
10014					anim.stop( true );
10015				}
10016			};
10017
10018		doAnimation.finish = doAnimation;
10019
10020		return empty || optall.queue === false ?
10021			this.each( doAnimation ) :
10022			this.queue( optall.queue, doAnimation );
10023	},
10024	stop: function( type, clearQueue, gotoEnd ) {
10025		var stopQueue = function( hooks ) {
10026			var stop = hooks.stop;
10027			delete hooks.stop;
10028			stop( gotoEnd );
10029		};
10030
10031		if ( typeof type !== "string" ) {
10032			gotoEnd = clearQueue;
10033			clearQueue = type;
10034			type = undefined;
10035		}
10036		if ( clearQueue ) {
10037			this.queue( type || "fx", [] );
10038		}
10039
10040		return this.each( function() {
10041			var dequeue = true,
10042				index = type != null && type + "queueHooks",
10043				timers = jQuery.timers,
10044				data = dataPriv.get( this );
10045
10046			if ( index ) {
10047				if ( data[ index ] && data[ index ].stop ) {
10048					stopQueue( data[ index ] );
10049				}
10050			} else {
10051				for ( index in data ) {
10052					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
10053						stopQueue( data[ index ] );
10054					}
10055				}
10056			}
10057
10058			for ( index = timers.length; index--; ) {
10059				if ( timers[ index ].elem === this &&
10060					( type == null || timers[ index ].queue === type ) ) {
10061
10062					timers[ index ].anim.stop( gotoEnd );
10063					dequeue = false;
10064					timers.splice( index, 1 );
10065				}
10066			}
10067
10068			// Start the next in the queue if the last step wasn't forced.
10069			// Timers currently will call their complete callbacks, which
10070			// will dequeue but only if they were gotoEnd.
10071			if ( dequeue || !gotoEnd ) {
10072				jQuery.dequeue( this, type );
10073			}
10074		} );
10075	},
10076	finish: function( type ) {
10077		if ( type !== false ) {
10078			type = type || "fx";
10079		}
10080		return this.each( function() {
10081			var index,
10082				data = dataPriv.get( this ),
10083				queue = data[ type + "queue" ],
10084				hooks = data[ type + "queueHooks" ],
10085				timers = jQuery.timers,
10086				length = queue ? queue.length : 0;
10087
10088			// Enable finishing flag on private data
10089			data.finish = true;
10090
10091			// Empty the queue first
10092			jQuery.queue( this, type, [] );
10093
10094			if ( hooks && hooks.stop ) {
10095				hooks.stop.call( this, true );
10096			}
10097
10098			// Look for any active animations, and finish them
10099			for ( index = timers.length; index--; ) {
10100				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
10101					timers[ index ].anim.stop( true );
10102					timers.splice( index, 1 );
10103				}
10104			}
10105
10106			// Look for any animations in the old queue and finish them
10107			for ( index = 0; index < length; index++ ) {
10108				if ( queue[ index ] && queue[ index ].finish ) {
10109					queue[ index ].finish.call( this );
10110				}
10111			}
10112
10113			// Turn off finishing flag
10114			delete data.finish;
10115		} );
10116	}
10117} );
10118
10119jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) {
10120	var cssFn = jQuery.fn[ name ];
10121	jQuery.fn[ name ] = function( speed, easing, callback ) {
10122		return speed == null || typeof speed === "boolean" ?
10123			cssFn.apply( this, arguments ) :
10124			this.animate( genFx( name, true ), speed, easing, callback );
10125	};
10126} );
10127
10128// Generate shortcuts for custom animations
10129jQuery.each( {
10130	slideDown: genFx( "show" ),
10131	slideUp: genFx( "hide" ),
10132	slideToggle: genFx( "toggle" ),
10133	fadeIn: { opacity: "show" },
10134	fadeOut: { opacity: "hide" },
10135	fadeToggle: { opacity: "toggle" }
10136}, function( name, props ) {
10137	jQuery.fn[ name ] = function( speed, easing, callback ) {
10138		return this.animate( props, speed, easing, callback );
10139	};
10140} );
10141
10142jQuery.timers = [];
10143jQuery.fx.tick = function() {
10144	var timer,
10145		i = 0,
10146		timers = jQuery.timers;
10147
10148	fxNow = Date.now();
10149
10150	for ( ; i < timers.length; i++ ) {
10151		timer = timers[ i ];
10152
10153		// Run the timer and safely remove it when done (allowing for external removal)
10154		if ( !timer() && timers[ i ] === timer ) {
10155			timers.splice( i--, 1 );
10156		}
10157	}
10158
10159	if ( !timers.length ) {
10160		jQuery.fx.stop();
10161	}
10162	fxNow = undefined;
10163};
10164
10165jQuery.fx.timer = function( timer ) {
10166	jQuery.timers.push( timer );
10167	jQuery.fx.start();
10168};
10169
10170jQuery.fx.interval = 13;
10171jQuery.fx.start = function() {
10172	if ( inProgress ) {
10173		return;
10174	}
10175
10176	inProgress = true;
10177	schedule();
10178};
10179
10180jQuery.fx.stop = function() {
10181	inProgress = null;
10182};
10183
10184jQuery.fx.speeds = {
10185	slow: 600,
10186	fast: 200,
10187
10188	// Default speed
10189	_default: 400
10190};
10191
10192
10193// Based off of the plugin by Clint Helfers, with permission.
10194jQuery.fn.delay = function( time, type ) {
10195	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
10196	type = type || "fx";
10197
10198	return this.queue( type, function( next, hooks ) {
10199		var timeout = window.setTimeout( next, time );
10200		hooks.stop = function() {
10201			window.clearTimeout( timeout );
10202		};
10203	} );
10204};
10205
10206
10207( function() {
10208	var input = document.createElement( "input" ),
10209		select = document.createElement( "select" ),
10210		opt = select.appendChild( document.createElement( "option" ) );
10211
10212	input.type = "checkbox";
10213
10214	// Support: Android <=4.3 only
10215	// Default value for a checkbox should be "on"
10216	support.checkOn = input.value !== "";
10217
10218	// Support: IE <=11 only
10219	// Must access selectedIndex to make default options select
10220	support.optSelected = opt.selected;
10221
10222	// Support: IE <=11 only
10223	// An input loses its value after becoming a radio
10224	input = document.createElement( "input" );
10225	input.value = "t";
10226	input.type = "radio";
10227	support.radioValue = input.value === "t";
10228} )();
10229
10230
10231var boolHook,
10232	attrHandle = jQuery.expr.attrHandle;
10233
10234jQuery.fn.extend( {
10235	attr: function( name, value ) {
10236		return access( this, jQuery.attr, name, value, arguments.length > 1 );
10237	},
10238
10239	removeAttr: function( name ) {
10240		return this.each( function() {
10241			jQuery.removeAttr( this, name );
10242		} );
10243	}
10244} );
10245
10246jQuery.extend( {
10247	attr: function( elem, name, value ) {
10248		var ret, hooks,
10249			nType = elem.nodeType;
10250
10251		// Don't get/set attributes on text, comment and attribute nodes
10252		if ( nType === 3 || nType === 8 || nType === 2 ) {
10253			return;
10254		}
10255
10256		// Fallback to prop when attributes are not supported
10257		if ( typeof elem.getAttribute === "undefined" ) {
10258			return jQuery.prop( elem, name, value );
10259		}
10260
10261		// Attribute hooks are determined by the lowercase version
10262		// Grab necessary hook if one is defined
10263		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
10264			hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
10265				( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
10266		}
10267
10268		if ( value !== undefined ) {
10269			if ( value === null ) {
10270				jQuery.removeAttr( elem, name );
10271				return;
10272			}
10273
10274			if ( hooks && "set" in hooks &&
10275				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
10276				return ret;
10277			}
10278
10279			elem.setAttribute( name, value + "" );
10280			return value;
10281		}
10282
10283		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
10284			return ret;
10285		}
10286
10287		ret = jQuery.find.attr( elem, name );
10288
10289		// Non-existent attributes return null, we normalize to undefined
10290		return ret == null ? undefined : ret;
10291	},
10292
10293	attrHooks: {
10294		type: {
10295			set: function( elem, value ) {
10296				if ( !support.radioValue && value === "radio" &&
10297					nodeName( elem, "input" ) ) {
10298					var val = elem.value;
10299					elem.setAttribute( "type", value );
10300					if ( val ) {
10301						elem.value = val;
10302					}
10303					return value;
10304				}
10305			}
10306		}
10307	},
10308
10309	removeAttr: function( elem, value ) {
10310		var name,
10311			i = 0,
10312
10313			// Attribute names can contain non-HTML whitespace characters
10314			// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
10315			attrNames = value && value.match( rnothtmlwhite );
10316
10317		if ( attrNames && elem.nodeType === 1 ) {
10318			while ( ( name = attrNames[ i++ ] ) ) {
10319				elem.removeAttribute( name );
10320			}
10321		}
10322	}
10323} );
10324
10325// Hooks for boolean attributes
10326boolHook = {
10327	set: function( elem, value, name ) {
10328		if ( value === false ) {
10329
10330			// Remove boolean attributes when set to false
10331			jQuery.removeAttr( elem, name );
10332		} else {
10333			elem.setAttribute( name, name );
10334		}
10335		return name;
10336	}
10337};
10338
10339jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) {
10340	var getter = attrHandle[ name ] || jQuery.find.attr;
10341
10342	attrHandle[ name ] = function( elem, name, isXML ) {
10343		var ret, handle,
10344			lowercaseName = name.toLowerCase();
10345
10346		if ( !isXML ) {
10347
10348			// Avoid an infinite loop by temporarily removing this function from the getter
10349			handle = attrHandle[ lowercaseName ];
10350			attrHandle[ lowercaseName ] = ret;
10351			ret = getter( elem, name, isXML ) != null ?
10352				lowercaseName :
10353				null;
10354			attrHandle[ lowercaseName ] = handle;
10355		}
10356		return ret;
10357	};
10358} );
10359
10360
10361
10362
10363var rfocusable = /^(?:input|select|textarea|button)$/i,
10364	rclickable = /^(?:a|area)$/i;
10365
10366jQuery.fn.extend( {
10367	prop: function( name, value ) {
10368		return access( this, jQuery.prop, name, value, arguments.length > 1 );
10369	},
10370
10371	removeProp: function( name ) {
10372		return this.each( function() {
10373			delete this[ jQuery.propFix[ name ] || name ];
10374		} );
10375	}
10376} );
10377
10378jQuery.extend( {
10379	prop: function( elem, name, value ) {
10380		var ret, hooks,
10381			nType = elem.nodeType;
10382
10383		// Don't get/set properties on text, comment and attribute nodes
10384		if ( nType === 3 || nType === 8 || nType === 2 ) {
10385			return;
10386		}
10387
10388		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
10389
10390			// Fix name and attach hooks
10391			name = jQuery.propFix[ name ] || name;
10392			hooks = jQuery.propHooks[ name ];
10393		}
10394
10395		if ( value !== undefined ) {
10396			if ( hooks && "set" in hooks &&
10397				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
10398				return ret;
10399			}
10400
10401			return ( elem[ name ] = value );
10402		}
10403
10404		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
10405			return ret;
10406		}
10407
10408		return elem[ name ];
10409	},
10410
10411	propHooks: {
10412		tabIndex: {
10413			get: function( elem ) {
10414
10415				// Support: IE <=9 - 11 only
10416				// elem.tabIndex doesn't always return the
10417				// correct value when it hasn't been explicitly set
10418				// Use proper attribute retrieval (trac-12072)
10419				var tabindex = jQuery.find.attr( elem, "tabindex" );
10420
10421				if ( tabindex ) {
10422					return parseInt( tabindex, 10 );
10423				}
10424
10425				if (
10426					rfocusable.test( elem.nodeName ) ||
10427					rclickable.test( elem.nodeName ) &&
10428					elem.href
10429				) {
10430					return 0;
10431				}
10432
10433				return -1;
10434			}
10435		}
10436	},
10437
10438	propFix: {
10439		"for": "htmlFor",
10440		"class": "className"
10441	}
10442} );
10443
10444// Support: IE <=11 only
10445// Accessing the selectedIndex property
10446// forces the browser to respect setting selected
10447// on the option
10448// The getter ensures a default option is selected
10449// when in an optgroup
10450// eslint rule "no-unused-expressions" is disabled for this code
10451// since it considers such accessions noop
10452if ( !support.optSelected ) {
10453	jQuery.propHooks.selected = {
10454		get: function( elem ) {
10455
10456			/* eslint no-unused-expressions: "off" */
10457
10458			var parent = elem.parentNode;
10459			if ( parent && parent.parentNode ) {
10460				parent.parentNode.selectedIndex;
10461			}
10462			return null;
10463		},
10464		set: function( elem ) {
10465
10466			/* eslint no-unused-expressions: "off" */
10467
10468			var parent = elem.parentNode;
10469			if ( parent ) {
10470				parent.selectedIndex;
10471
10472				if ( parent.parentNode ) {
10473					parent.parentNode.selectedIndex;
10474				}
10475			}
10476		}
10477	};
10478}
10479
10480jQuery.each( [
10481	"tabIndex",
10482	"readOnly",
10483	"maxLength",
10484	"cellSpacing",
10485	"cellPadding",
10486	"rowSpan",
10487	"colSpan",
10488	"useMap",
10489	"frameBorder",
10490	"contentEditable"
10491], function() {
10492	jQuery.propFix[ this.toLowerCase() ] = this;
10493} );
10494
10495
10496
10497
10498	// Strip and collapse whitespace according to HTML spec
10499	// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
10500	function stripAndCollapse( value ) {
10501		var tokens = value.match( rnothtmlwhite ) || [];
10502		return tokens.join( " " );
10503	}
10504
10505
10506function getClass( elem ) {
10507	return elem.getAttribute && elem.getAttribute( "class" ) || "";
10508}
10509
10510function classesToArray( value ) {
10511	if ( Array.isArray( value ) ) {
10512		return value;
10513	}
10514	if ( typeof value === "string" ) {
10515		return value.match( rnothtmlwhite ) || [];
10516	}
10517	return [];
10518}
10519
10520jQuery.fn.extend( {
10521	addClass: function( value ) {
10522		var classNames, cur, curValue, className, i, finalValue;
10523
10524		if ( isFunction( value ) ) {
10525			return this.each( function( j ) {
10526				jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
10527			} );
10528		}
10529
10530		classNames = classesToArray( value );
10531
10532		if ( classNames.length ) {
10533			return this.each( function() {
10534				curValue = getClass( this );
10535				cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
10536
10537				if ( cur ) {
10538					for ( i = 0; i < classNames.length; i++ ) {
10539						className = classNames[ i ];
10540						if ( cur.indexOf( " " + className + " " ) < 0 ) {
10541							cur += className + " ";
10542						}
10543					}
10544
10545					// Only assign if different to avoid unneeded rendering.
10546					finalValue = stripAndCollapse( cur );
10547					if ( curValue !== finalValue ) {
10548						this.setAttribute( "class", finalValue );
10549					}
10550				}
10551			} );
10552		}
10553
10554		return this;
10555	},
10556
10557	removeClass: function( value ) {
10558		var classNames, cur, curValue, className, i, finalValue;
10559
10560		if ( isFunction( value ) ) {
10561			return this.each( function( j ) {
10562				jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
10563			} );
10564		}
10565
10566		if ( !arguments.length ) {
10567			return this.attr( "class", "" );
10568		}
10569
10570		classNames = classesToArray( value );
10571
10572		if ( classNames.length ) {
10573			return this.each( function() {
10574				curValue = getClass( this );
10575
10576				// This expression is here for better compressibility (see addClass)
10577				cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
10578
10579				if ( cur ) {
10580					for ( i = 0; i < classNames.length; i++ ) {
10581						className = classNames[ i ];
10582
10583						// Remove *all* instances
10584						while ( cur.indexOf( " " + className + " " ) > -1 ) {
10585							cur = cur.replace( " " + className + " ", " " );
10586						}
10587					}
10588
10589					// Only assign if different to avoid unneeded rendering.
10590					finalValue = stripAndCollapse( cur );
10591					if ( curValue !== finalValue ) {
10592						this.setAttribute( "class", finalValue );
10593					}
10594				}
10595			} );
10596		}
10597
10598		return this;
10599	},
10600
10601	toggleClass: function( value, stateVal ) {
10602		var classNames, className, i, self,
10603			type = typeof value,
10604			isValidValue = type === "string" || Array.isArray( value );
10605
10606		if ( isFunction( value ) ) {
10607			return this.each( function( i ) {
10608				jQuery( this ).toggleClass(
10609					value.call( this, i, getClass( this ), stateVal ),
10610					stateVal
10611				);
10612			} );
10613		}
10614
10615		if ( typeof stateVal === "boolean" && isValidValue ) {
10616			return stateVal ? this.addClass( value ) : this.removeClass( value );
10617		}
10618
10619		classNames = classesToArray( value );
10620
10621		return this.each( function() {
10622			if ( isValidValue ) {
10623
10624				// Toggle individual class names
10625				self = jQuery( this );
10626
10627				for ( i = 0; i < classNames.length; i++ ) {
10628					className = classNames[ i ];
10629
10630					// Check each className given, space separated list
10631					if ( self.hasClass( className ) ) {
10632						self.removeClass( className );
10633					} else {
10634						self.addClass( className );
10635					}
10636				}
10637
10638			// Toggle whole class name
10639			} else if ( value === undefined || type === "boolean" ) {
10640				className = getClass( this );
10641				if ( className ) {
10642
10643					// Store className if set
10644					dataPriv.set( this, "__className__", className );
10645				}
10646
10647				// If the element has a class name or if we're passed `false`,
10648				// then remove the whole classname (if there was one, the above saved it).
10649				// Otherwise bring back whatever was previously saved (if anything),
10650				// falling back to the empty string if nothing was stored.
10651				if ( this.setAttribute ) {
10652					this.setAttribute( "class",
10653						className || value === false ?
10654							"" :
10655							dataPriv.get( this, "__className__" ) || ""
10656					);
10657				}
10658			}
10659		} );
10660	},
10661
10662	hasClass: function( selector ) {
10663		var className, elem,
10664			i = 0;
10665
10666		className = " " + selector + " ";
10667		while ( ( elem = this[ i++ ] ) ) {
10668			if ( elem.nodeType === 1 &&
10669				( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
10670				return true;
10671			}
10672		}
10673
10674		return false;
10675	}
10676} );
10677
10678
10679
10680
10681var rreturn = /\r/g;
10682
10683jQuery.fn.extend( {
10684	val: function( value ) {
10685		var hooks, ret, valueIsFunction,
10686			elem = this[ 0 ];
10687
10688		if ( !arguments.length ) {
10689			if ( elem ) {
10690				hooks = jQuery.valHooks[ elem.type ] ||
10691					jQuery.valHooks[ elem.nodeName.toLowerCase() ];
10692
10693				if ( hooks &&
10694					"get" in hooks &&
10695					( ret = hooks.get( elem, "value" ) ) !== undefined
10696				) {
10697					return ret;
10698				}
10699
10700				ret = elem.value;
10701
10702				// Handle most common string cases
10703				if ( typeof ret === "string" ) {
10704					return ret.replace( rreturn, "" );
10705				}
10706
10707				// Handle cases where value is null/undef or number
10708				return ret == null ? "" : ret;
10709			}
10710
10711			return;
10712		}
10713
10714		valueIsFunction = isFunction( value );
10715
10716		return this.each( function( i ) {
10717			var val;
10718
10719			if ( this.nodeType !== 1 ) {
10720				return;
10721			}
10722
10723			if ( valueIsFunction ) {
10724				val = value.call( this, i, jQuery( this ).val() );
10725			} else {
10726				val = value;
10727			}
10728
10729			// Treat null/undefined as ""; convert numbers to string
10730			if ( val == null ) {
10731				val = "";
10732
10733			} else if ( typeof val === "number" ) {
10734				val += "";
10735
10736			} else if ( Array.isArray( val ) ) {
10737				val = jQuery.map( val, function( value ) {
10738					return value == null ? "" : value + "";
10739				} );
10740			}
10741
10742			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
10743
10744			// If set returns undefined, fall back to normal setting
10745			if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
10746				this.value = val;
10747			}
10748		} );
10749	}
10750} );
10751
10752jQuery.extend( {
10753	valHooks: {
10754		option: {
10755			get: function( elem ) {
10756
10757				var val = jQuery.find.attr( elem, "value" );
10758				return val != null ?
10759					val :
10760
10761					// Support: IE <=10 - 11 only
10762					// option.text throws exceptions (trac-14686, trac-14858)
10763					// Strip and collapse whitespace
10764					// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
10765					stripAndCollapse( jQuery.text( elem ) );
10766			}
10767		},
10768		select: {
10769			get: function( elem ) {
10770				var value, option, i,
10771					options = elem.options,
10772					index = elem.selectedIndex,
10773					one = elem.type === "select-one",
10774					values = one ? null : [],
10775					max = one ? index + 1 : options.length;
10776
10777				if ( index < 0 ) {
10778					i = max;
10779
10780				} else {
10781					i = one ? index : 0;
10782				}
10783
10784				// Loop through all the selected options
10785				for ( ; i < max; i++ ) {
10786					option = options[ i ];
10787
10788					// Support: IE <=9 only
10789					// IE8-9 doesn't update selected after form reset (trac-2551)
10790					if ( ( option.selected || i === index ) &&
10791
10792							// Don't return options that are disabled or in a disabled optgroup
10793							!option.disabled &&
10794							( !option.parentNode.disabled ||
10795								!nodeName( option.parentNode, "optgroup" ) ) ) {
10796
10797						// Get the specific value for the option
10798						value = jQuery( option ).val();
10799
10800						// We don't need an array for one selects
10801						if ( one ) {
10802							return value;
10803						}
10804
10805						// Multi-Selects return an array
10806						values.push( value );
10807					}
10808				}
10809
10810				return values;
10811			},
10812
10813			set: function( elem, value ) {
10814				var optionSet, option,
10815					options = elem.options,
10816					values = jQuery.makeArray( value ),
10817					i = options.length;
10818
10819				while ( i-- ) {
10820					option = options[ i ];
10821
10822					/* eslint-disable no-cond-assign */
10823
10824					if ( option.selected =
10825						jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
10826					) {
10827						optionSet = true;
10828					}
10829
10830					/* eslint-enable no-cond-assign */
10831				}
10832
10833				// Force browsers to behave consistently when non-matching value is set
10834				if ( !optionSet ) {
10835					elem.selectedIndex = -1;
10836				}
10837				return values;
10838			}
10839		}
10840	}
10841} );
10842
10843// Radios and checkboxes getter/setter
10844jQuery.each( [ "radio", "checkbox" ], function() {
10845	jQuery.valHooks[ this ] = {
10846		set: function( elem, value ) {
10847			if ( Array.isArray( value ) ) {
10848				return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
10849			}
10850		}
10851	};
10852	if ( !support.checkOn ) {
10853		jQuery.valHooks[ this ].get = function( elem ) {
10854			return elem.getAttribute( "value" ) === null ? "on" : elem.value;
10855		};
10856	}
10857} );
10858
10859
10860
10861
10862// Return jQuery for attributes-only inclusion
10863var location = window.location;
10864
10865var nonce = { guid: Date.now() };
10866
10867var rquery = ( /\?/ );
10868
10869
10870
10871// Cross-browser xml parsing
10872jQuery.parseXML = function( data ) {
10873	var xml, parserErrorElem;
10874	if ( !data || typeof data !== "string" ) {
10875		return null;
10876	}
10877
10878	// Support: IE 9 - 11 only
10879	// IE throws on parseFromString with invalid input.
10880	try {
10881		xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
10882	} catch ( e ) {}
10883
10884	parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ];
10885	if ( !xml || parserErrorElem ) {
10886		jQuery.error( "Invalid XML: " + (
10887			parserErrorElem ?
10888				jQuery.map( parserErrorElem.childNodes, function( el ) {
10889					return el.textContent;
10890				} ).join( "\n" ) :
10891				data
10892		) );
10893	}
10894	return xml;
10895};
10896
10897
10898var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
10899	stopPropagationCallback = function( e ) {
10900		e.stopPropagation();
10901	};
10902
10903jQuery.extend( jQuery.event, {
10904
10905	trigger: function( event, data, elem, onlyHandlers ) {
10906
10907		var i, cur, tmp, bubbleType, ontype, handle, special, lastElement,
10908			eventPath = [ elem || document ],
10909			type = hasOwn.call( event, "type" ) ? event.type : event,
10910			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
10911
10912		cur = lastElement = tmp = elem = elem || document;
10913
10914		// Don't do events on text and comment nodes
10915		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
10916			return;
10917		}
10918
10919		// focus/blur morphs to focusin/out; ensure we're not firing them right now
10920		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
10921			return;
10922		}
10923
10924		if ( type.indexOf( "." ) > -1 ) {
10925
10926			// Namespaced trigger; create a regexp to match event type in handle()
10927			namespaces = type.split( "." );
10928			type = namespaces.shift();
10929			namespaces.sort();
10930		}
10931		ontype = type.indexOf( ":" ) < 0 && "on" + type;
10932
10933		// Caller can pass in a jQuery.Event object, Object, or just an event type string
10934		event = event[ jQuery.expando ] ?
10935			event :
10936			new jQuery.Event( type, typeof event === "object" && event );
10937
10938		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
10939		event.isTrigger = onlyHandlers ? 2 : 3;
10940		event.namespace = namespaces.join( "." );
10941		event.rnamespace = event.namespace ?
10942			new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
10943			null;
10944
10945		// Clean up the event in case it is being reused
10946		event.result = undefined;
10947		if ( !event.target ) {
10948			event.target = elem;
10949		}
10950
10951		// Clone any incoming data and prepend the event, creating the handler arg list
10952		data = data == null ?
10953			[ event ] :
10954			jQuery.makeArray( data, [ event ] );
10955
10956		// Allow special events to draw outside the lines
10957		special = jQuery.event.special[ type ] || {};
10958		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
10959			return;
10960		}
10961
10962		// Determine event propagation path in advance, per W3C events spec (trac-9951)
10963		// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)
10964		if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
10965
10966			bubbleType = special.delegateType || type;
10967			if ( !rfocusMorph.test( bubbleType + type ) ) {
10968				cur = cur.parentNode;
10969			}
10970			for ( ; cur; cur = cur.parentNode ) {
10971				eventPath.push( cur );
10972				tmp = cur;
10973			}
10974
10975			// Only add window if we got to document (e.g., not plain obj or detached DOM)
10976			if ( tmp === ( elem.ownerDocument || document ) ) {
10977				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
10978			}
10979		}
10980
10981		// Fire handlers on the event path
10982		i = 0;
10983		while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
10984			lastElement = cur;
10985			event.type = i > 1 ?
10986				bubbleType :
10987				special.bindType || type;
10988
10989			// jQuery handler
10990			handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] &&
10991				dataPriv.get( cur, "handle" );
10992			if ( handle ) {
10993				handle.apply( cur, data );
10994			}
10995
10996			// Native handler
10997			handle = ontype && cur[ ontype ];
10998			if ( handle && handle.apply && acceptData( cur ) ) {
10999				event.result = handle.apply( cur, data );
11000				if ( event.result === false ) {
11001					event.preventDefault();
11002				}
11003			}
11004		}
11005		event.type = type;
11006
11007		// If nobody prevented the default action, do it now
11008		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
11009
11010			if ( ( !special._default ||
11011				special._default.apply( eventPath.pop(), data ) === false ) &&
11012				acceptData( elem ) ) {
11013
11014				// Call a native DOM method on the target with the same name as the event.
11015				// Don't do default actions on window, that's where global variables be (trac-6170)
11016				if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
11017
11018					// Don't re-trigger an onFOO event when we call its FOO() method
11019					tmp = elem[ ontype ];
11020
11021					if ( tmp ) {
11022						elem[ ontype ] = null;
11023					}
11024
11025					// Prevent re-triggering of the same event, since we already bubbled it above
11026					jQuery.event.triggered = type;
11027
11028					if ( event.isPropagationStopped() ) {
11029						lastElement.addEventListener( type, stopPropagationCallback );
11030					}
11031
11032					elem[ type ]();
11033
11034					if ( event.isPropagationStopped() ) {
11035						lastElement.removeEventListener( type, stopPropagationCallback );
11036					}
11037
11038					jQuery.event.triggered = undefined;
11039
11040					if ( tmp ) {
11041						elem[ ontype ] = tmp;
11042					}
11043				}
11044			}
11045		}
11046
11047		return event.result;
11048	},
11049
11050	// Piggyback on a donor event to simulate a different one
11051	// Used only for `focus(in | out)` events
11052	simulate: function( type, elem, event ) {
11053		var e = jQuery.extend(
11054			new jQuery.Event(),
11055			event,
11056			{
11057				type: type,
11058				isSimulated: true
11059			}
11060		);
11061
11062		jQuery.event.trigger( e, null, elem );
11063	}
11064
11065} );
11066
11067jQuery.fn.extend( {
11068
11069	trigger: function( type, data ) {
11070		return this.each( function() {
11071			jQuery.event.trigger( type, data, this );
11072		} );
11073	},
11074	triggerHandler: function( type, data ) {
11075		var elem = this[ 0 ];
11076		if ( elem ) {
11077			return jQuery.event.trigger( type, data, elem, true );
11078		}
11079	}
11080} );
11081
11082
11083var
11084	rbracket = /\[\]$/,
11085	rCRLF = /\r?\n/g,
11086	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
11087	rsubmittable = /^(?:input|select|textarea|keygen)/i;
11088
11089function buildParams( prefix, obj, traditional, add ) {
11090	var name;
11091
11092	if ( Array.isArray( obj ) ) {
11093
11094		// Serialize array item.
11095		jQuery.each( obj, function( i, v ) {
11096			if ( traditional || rbracket.test( prefix ) ) {
11097
11098				// Treat each array item as a scalar.
11099				add( prefix, v );
11100
11101			} else {
11102
11103				// Item is non-scalar (array or object), encode its numeric index.
11104				buildParams(
11105					prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
11106					v,
11107					traditional,
11108					add
11109				);
11110			}
11111		} );
11112
11113	} else if ( !traditional && toType( obj ) === "object" ) {
11114
11115		// Serialize object item.
11116		for ( name in obj ) {
11117			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
11118		}
11119
11120	} else {
11121
11122		// Serialize scalar item.
11123		add( prefix, obj );
11124	}
11125}
11126
11127// Serialize an array of form elements or a set of
11128// key/values into a query string
11129jQuery.param = function( a, traditional ) {
11130	var prefix,
11131		s = [],
11132		add = function( key, valueOrFunction ) {
11133
11134			// If value is a function, invoke it and use its return value
11135			var value = isFunction( valueOrFunction ) ?
11136				valueOrFunction() :
11137				valueOrFunction;
11138
11139			s[ s.length ] = encodeURIComponent( key ) + "=" +
11140				encodeURIComponent( value == null ? "" : value );
11141		};
11142
11143	if ( a == null ) {
11144		return "";
11145	}
11146
11147	// If an array was passed in, assume that it is an array of form elements.
11148	if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
11149
11150		// Serialize the form elements
11151		jQuery.each( a, function() {
11152			add( this.name, this.value );
11153		} );
11154
11155	} else {
11156
11157		// If traditional, encode the "old" way (the way 1.3.2 or older
11158		// did it), otherwise encode params recursively.
11159		for ( prefix in a ) {
11160			buildParams( prefix, a[ prefix ], traditional, add );
11161		}
11162	}
11163
11164	// Return the resulting serialization
11165	return s.join( "&" );
11166};
11167
11168jQuery.fn.extend( {
11169	serialize: function() {
11170		return jQuery.param( this.serializeArray() );
11171	},
11172	serializeArray: function() {
11173		return this.map( function() {
11174
11175			// Can add propHook for "elements" to filter or add form elements
11176			var elements = jQuery.prop( this, "elements" );
11177			return elements ? jQuery.makeArray( elements ) : this;
11178		} ).filter( function() {
11179			var type = this.type;
11180
11181			// Use .is( ":disabled" ) so that fieldset[disabled] works
11182			return this.name && !jQuery( this ).is( ":disabled" ) &&
11183				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
11184				( this.checked || !rcheckableType.test( type ) );
11185		} ).map( function( _i, elem ) {
11186			var val = jQuery( this ).val();
11187
11188			if ( val == null ) {
11189				return null;
11190			}
11191
11192			if ( Array.isArray( val ) ) {
11193				return jQuery.map( val, function( val ) {
11194					return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
11195				} );
11196			}
11197
11198			return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
11199		} ).get();
11200	}
11201} );
11202
11203
11204var
11205	r20 = /%20/g,
11206	rhash = /#.*$/,
11207	rantiCache = /([?&])_=[^&]*/,
11208	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
11209
11210	// trac-7653, trac-8125, trac-8152: local protocol detection
11211	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
11212	rnoContent = /^(?:GET|HEAD)$/,
11213	rprotocol = /^\/\//,
11214
11215	/* Prefilters
11216	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
11217	 * 2) These are called:
11218	 *    - BEFORE asking for a transport
11219	 *    - AFTER param serialization (s.data is a string if s.processData is true)
11220	 * 3) key is the dataType
11221	 * 4) the catchall symbol "*" can be used
11222	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
11223	 */
11224	prefilters = {},
11225
11226	/* Transports bindings
11227	 * 1) key is the dataType
11228	 * 2) the catchall symbol "*" can be used
11229	 * 3) selection will start with transport dataType and THEN go to "*" if needed
11230	 */
11231	transports = {},
11232
11233	// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression
11234	allTypes = "*/".concat( "*" ),
11235
11236	// Anchor tag for parsing the document origin
11237	originAnchor = document.createElement( "a" );
11238
11239originAnchor.href = location.href;
11240
11241// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
11242function addToPrefiltersOrTransports( structure ) {
11243
11244	// dataTypeExpression is optional and defaults to "*"
11245	return function( dataTypeExpression, func ) {
11246
11247		if ( typeof dataTypeExpression !== "string" ) {
11248			func = dataTypeExpression;
11249			dataTypeExpression = "*";
11250		}
11251
11252		var dataType,
11253			i = 0,
11254			dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
11255
11256		if ( isFunction( func ) ) {
11257
11258			// For each dataType in the dataTypeExpression
11259			while ( ( dataType = dataTypes[ i++ ] ) ) {
11260
11261				// Prepend if requested
11262				if ( dataType[ 0 ] === "+" ) {
11263					dataType = dataType.slice( 1 ) || "*";
11264					( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
11265
11266				// Otherwise append
11267				} else {
11268					( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
11269				}
11270			}
11271		}
11272	};
11273}
11274
11275// Base inspection function for prefilters and transports
11276function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
11277
11278	var inspected = {},
11279		seekingTransport = ( structure === transports );
11280
11281	function inspect( dataType ) {
11282		var selected;
11283		inspected[ dataType ] = true;
11284		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
11285			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
11286			if ( typeof dataTypeOrTransport === "string" &&
11287				!seekingTransport && !inspected[ dataTypeOrTransport ] ) {
11288
11289				options.dataTypes.unshift( dataTypeOrTransport );
11290				inspect( dataTypeOrTransport );
11291				return false;
11292			} else if ( seekingTransport ) {
11293				return !( selected = dataTypeOrTransport );
11294			}
11295		} );
11296		return selected;
11297	}
11298
11299	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
11300}
11301
11302// A special extend for ajax options
11303// that takes "flat" options (not to be deep extended)
11304// Fixes trac-9887
11305function ajaxExtend( target, src ) {
11306	var key, deep,
11307		flatOptions = jQuery.ajaxSettings.flatOptions || {};
11308
11309	for ( key in src ) {
11310		if ( src[ key ] !== undefined ) {
11311			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
11312		}
11313	}
11314	if ( deep ) {
11315		jQuery.extend( true, target, deep );
11316	}
11317
11318	return target;
11319}
11320
11321/* Handles responses to an ajax request:
11322 * - finds the right dataType (mediates between content-type and expected dataType)
11323 * - returns the corresponding response
11324 */
11325function ajaxHandleResponses( s, jqXHR, responses ) {
11326
11327	var ct, type, finalDataType, firstDataType,
11328		contents = s.contents,
11329		dataTypes = s.dataTypes;
11330
11331	// Remove auto dataType and get content-type in the process
11332	while ( dataTypes[ 0 ] === "*" ) {
11333		dataTypes.shift();
11334		if ( ct === undefined ) {
11335			ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
11336		}
11337	}
11338
11339	// Check if we're dealing with a known content-type
11340	if ( ct ) {
11341		for ( type in contents ) {
11342			if ( contents[ type ] && contents[ type ].test( ct ) ) {
11343				dataTypes.unshift( type );
11344				break;
11345			}
11346		}
11347	}
11348
11349	// Check to see if we have a response for the expected dataType
11350	if ( dataTypes[ 0 ] in responses ) {
11351		finalDataType = dataTypes[ 0 ];
11352	} else {
11353
11354		// Try convertible dataTypes
11355		for ( type in responses ) {
11356			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
11357				finalDataType = type;
11358				break;
11359			}
11360			if ( !firstDataType ) {
11361				firstDataType = type;
11362			}
11363		}
11364
11365		// Or just use first one
11366		finalDataType = finalDataType || firstDataType;
11367	}
11368
11369	// If we found a dataType
11370	// We add the dataType to the list if needed
11371	// and return the corresponding response
11372	if ( finalDataType ) {
11373		if ( finalDataType !== dataTypes[ 0 ] ) {
11374			dataTypes.unshift( finalDataType );
11375		}
11376		return responses[ finalDataType ];
11377	}
11378}
11379
11380/* Chain conversions given the request and the original response
11381 * Also sets the responseXXX fields on the jqXHR instance
11382 */
11383function ajaxConvert( s, response, jqXHR, isSuccess ) {
11384	var conv2, current, conv, tmp, prev,
11385		converters = {},
11386
11387		// Work with a copy of dataTypes in case we need to modify it for conversion
11388		dataTypes = s.dataTypes.slice();
11389
11390	// Create converters map with lowercased keys
11391	if ( dataTypes[ 1 ] ) {
11392		for ( conv in s.converters ) {
11393			converters[ conv.toLowerCase() ] = s.converters[ conv ];
11394		}
11395	}
11396
11397	current = dataTypes.shift();
11398
11399	// Convert to each sequential dataType
11400	while ( current ) {
11401
11402		if ( s.responseFields[ current ] ) {
11403			jqXHR[ s.responseFields[ current ] ] = response;
11404		}
11405
11406		// Apply the dataFilter if provided
11407		if ( !prev && isSuccess && s.dataFilter ) {
11408			response = s.dataFilter( response, s.dataType );
11409		}
11410
11411		prev = current;
11412		current = dataTypes.shift();
11413
11414		if ( current ) {
11415
11416			// There's only work to do if current dataType is non-auto
11417			if ( current === "*" ) {
11418
11419				current = prev;
11420
11421			// Convert response if prev dataType is non-auto and differs from current
11422			} else if ( prev !== "*" && prev !== current ) {
11423
11424				// Seek a direct converter
11425				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
11426
11427				// If none found, seek a pair
11428				if ( !conv ) {
11429					for ( conv2 in converters ) {
11430
11431						// If conv2 outputs current
11432						tmp = conv2.split( " " );
11433						if ( tmp[ 1 ] === current ) {
11434
11435							// If prev can be converted to accepted input
11436							conv = converters[ prev + " " + tmp[ 0 ] ] ||
11437								converters[ "* " + tmp[ 0 ] ];
11438							if ( conv ) {
11439
11440								// Condense equivalence converters
11441								if ( conv === true ) {
11442									conv = converters[ conv2 ];
11443
11444								// Otherwise, insert the intermediate dataType
11445								} else if ( converters[ conv2 ] !== true ) {
11446									current = tmp[ 0 ];
11447									dataTypes.unshift( tmp[ 1 ] );
11448								}
11449								break;
11450							}
11451						}
11452					}
11453				}
11454
11455				// Apply converter (if not an equivalence)
11456				if ( conv !== true ) {
11457
11458					// Unless errors are allowed to bubble, catch and return them
11459					if ( conv && s.throws ) {
11460						response = conv( response );
11461					} else {
11462						try {
11463							response = conv( response );
11464						} catch ( e ) {
11465							return {
11466								state: "parsererror",
11467								error: conv ? e : "No conversion from " + prev + " to " + current
11468							};
11469						}
11470					}
11471				}
11472			}
11473		}
11474	}
11475
11476	return { state: "success", data: response };
11477}
11478
11479jQuery.extend( {
11480
11481	// Counter for holding the number of active queries
11482	active: 0,
11483
11484	// Last-Modified header cache for next request
11485	lastModified: {},
11486	etag: {},
11487
11488	ajaxSettings: {
11489		url: location.href,
11490		type: "GET",
11491		isLocal: rlocalProtocol.test( location.protocol ),
11492		global: true,
11493		processData: true,
11494		async: true,
11495		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
11496
11497		/*
11498		timeout: 0,
11499		data: null,
11500		dataType: null,
11501		username: null,
11502		password: null,
11503		cache: null,
11504		throws: false,
11505		traditional: false,
11506		headers: {},
11507		*/
11508
11509		accepts: {
11510			"*": allTypes,
11511			text: "text/plain",
11512			html: "text/html",
11513			xml: "application/xml, text/xml",
11514			json: "application/json, text/javascript"
11515		},
11516
11517		contents: {
11518			xml: /\bxml\b/,
11519			html: /\bhtml/,
11520			json: /\bjson\b/
11521		},
11522
11523		responseFields: {
11524			xml: "responseXML",
11525			text: "responseText",
11526			json: "responseJSON"
11527		},
11528
11529		// Data converters
11530		// Keys separate source (or catchall "*") and destination types with a single space
11531		converters: {
11532
11533			// Convert anything to text
11534			"* text": String,
11535
11536			// Text to html (true = no transformation)
11537			"text html": true,
11538
11539			// Evaluate text as a json expression
11540			"text json": JSON.parse,
11541
11542			// Parse text as xml
11543			"text xml": jQuery.parseXML
11544		},
11545
11546		// For options that shouldn't be deep extended:
11547		// you can add your own custom options here if
11548		// and when you create one that shouldn't be
11549		// deep extended (see ajaxExtend)
11550		flatOptions: {
11551			url: true,
11552			context: true
11553		}
11554	},
11555
11556	// Creates a full fledged settings object into target
11557	// with both ajaxSettings and settings fields.
11558	// If target is omitted, writes into ajaxSettings.
11559	ajaxSetup: function( target, settings ) {
11560		return settings ?
11561
11562			// Building a settings object
11563			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
11564
11565			// Extending ajaxSettings
11566			ajaxExtend( jQuery.ajaxSettings, target );
11567	},
11568
11569	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
11570	ajaxTransport: addToPrefiltersOrTransports( transports ),
11571
11572	// Main method
11573	ajax: function( url, options ) {
11574
11575		// If url is an object, simulate pre-1.5 signature
11576		if ( typeof url === "object" ) {
11577			options = url;
11578			url = undefined;
11579		}
11580
11581		// Force options to be an object
11582		options = options || {};
11583
11584		var transport,
11585
11586			// URL without anti-cache param
11587			cacheURL,
11588
11589			// Response headers
11590			responseHeadersString,
11591			responseHeaders,
11592
11593			// timeout handle
11594			timeoutTimer,
11595
11596			// Url cleanup var
11597			urlAnchor,
11598
11599			// Request state (becomes false upon send and true upon completion)
11600			completed,
11601
11602			// To know if global events are to be dispatched
11603			fireGlobals,
11604
11605			// Loop variable
11606			i,
11607
11608			// uncached part of the url
11609			uncached,
11610
11611			// Create the final options object
11612			s = jQuery.ajaxSetup( {}, options ),
11613
11614			// Callbacks context
11615			callbackContext = s.context || s,
11616
11617			// Context for global events is callbackContext if it is a DOM node or jQuery collection
11618			globalEventContext = s.context &&
11619				( callbackContext.nodeType || callbackContext.jquery ) ?
11620				jQuery( callbackContext ) :
11621				jQuery.event,
11622
11623			// Deferreds
11624			deferred = jQuery.Deferred(),
11625			completeDeferred = jQuery.Callbacks( "once memory" ),
11626
11627			// Status-dependent callbacks
11628			statusCode = s.statusCode || {},
11629
11630			// Headers (they are sent all at once)
11631			requestHeaders = {},
11632			requestHeadersNames = {},
11633
11634			// Default abort message
11635			strAbort = "canceled",
11636
11637			// Fake xhr
11638			jqXHR = {
11639				readyState: 0,
11640
11641				// Builds headers hashtable if needed
11642				getResponseHeader: function( key ) {
11643					var match;
11644					if ( completed ) {
11645						if ( !responseHeaders ) {
11646							responseHeaders = {};
11647							while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
11648								responseHeaders[ match[ 1 ].toLowerCase() + " " ] =
11649									( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] )
11650										.concat( match[ 2 ] );
11651							}
11652						}
11653						match = responseHeaders[ key.toLowerCase() + " " ];
11654					}
11655					return match == null ? null : match.join( ", " );
11656				},
11657
11658				// Raw string
11659				getAllResponseHeaders: function() {
11660					return completed ? responseHeadersString : null;
11661				},
11662
11663				// Caches the header
11664				setRequestHeader: function( name, value ) {
11665					if ( completed == null ) {
11666						name = requestHeadersNames[ name.toLowerCase() ] =
11667							requestHeadersNames[ name.toLowerCase() ] || name;
11668						requestHeaders[ name ] = value;
11669					}
11670					return this;
11671				},
11672
11673				// Overrides response content-type header
11674				overrideMimeType: function( type ) {
11675					if ( completed == null ) {
11676						s.mimeType = type;
11677					}
11678					return this;
11679				},
11680
11681				// Status-dependent callbacks
11682				statusCode: function( map ) {
11683					var code;
11684					if ( map ) {
11685						if ( completed ) {
11686
11687							// Execute the appropriate callbacks
11688							jqXHR.always( map[ jqXHR.status ] );
11689						} else {
11690
11691							// Lazy-add the new callbacks in a way that preserves old ones
11692							for ( code in map ) {
11693								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
11694							}
11695						}
11696					}
11697					return this;
11698				},
11699
11700				// Cancel the request
11701				abort: function( statusText ) {
11702					var finalText = statusText || strAbort;
11703					if ( transport ) {
11704						transport.abort( finalText );
11705					}
11706					done( 0, finalText );
11707					return this;
11708				}
11709			};
11710
11711		// Attach deferreds
11712		deferred.promise( jqXHR );
11713
11714		// Add protocol if not provided (prefilters might expect it)
11715		// Handle falsy url in the settings object (trac-10093: consistency with old signature)
11716		// We also use the url parameter if available
11717		s.url = ( ( url || s.url || location.href ) + "" )
11718			.replace( rprotocol, location.protocol + "//" );
11719
11720		// Alias method option to type as per ticket trac-12004
11721		s.type = options.method || options.type || s.method || s.type;
11722
11723		// Extract dataTypes list
11724		s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
11725
11726		// A cross-domain request is in order when the origin doesn't match the current origin.
11727		if ( s.crossDomain == null ) {
11728			urlAnchor = document.createElement( "a" );
11729
11730			// Support: IE <=8 - 11, Edge 12 - 15
11731			// IE throws exception on accessing the href property if url is malformed,
11732			// e.g. http://example.com:80x/
11733			try {
11734				urlAnchor.href = s.url;
11735
11736				// Support: IE <=8 - 11 only
11737				// Anchor's host property isn't correctly set when s.url is relative
11738				urlAnchor.href = urlAnchor.href;
11739				s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
11740					urlAnchor.protocol + "//" + urlAnchor.host;
11741			} catch ( e ) {
11742
11743				// If there is an error parsing the URL, assume it is crossDomain,
11744				// it can be rejected by the transport if it is invalid
11745				s.crossDomain = true;
11746			}
11747		}
11748
11749		// Convert data if not already a string
11750		if ( s.data && s.processData && typeof s.data !== "string" ) {
11751			s.data = jQuery.param( s.data, s.traditional );
11752		}
11753
11754		// Apply prefilters
11755		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
11756
11757		// If request was aborted inside a prefilter, stop there
11758		if ( completed ) {
11759			return jqXHR;
11760		}
11761
11762		// We can fire global events as of now if asked to
11763		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)
11764		fireGlobals = jQuery.event && s.global;
11765
11766		// Watch for a new set of requests
11767		if ( fireGlobals && jQuery.active++ === 0 ) {
11768			jQuery.event.trigger( "ajaxStart" );
11769		}
11770
11771		// Uppercase the type
11772		s.type = s.type.toUpperCase();
11773
11774		// Determine if request has content
11775		s.hasContent = !rnoContent.test( s.type );
11776
11777		// Save the URL in case we're toying with the If-Modified-Since
11778		// and/or If-None-Match header later on
11779		// Remove hash to simplify url manipulation
11780		cacheURL = s.url.replace( rhash, "" );
11781
11782		// More options handling for requests with no content
11783		if ( !s.hasContent ) {
11784
11785			// Remember the hash so we can put it back
11786			uncached = s.url.slice( cacheURL.length );
11787
11788			// If data is available and should be processed, append data to url
11789			if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
11790				cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
11791
11792				// trac-9682: remove data so that it's not used in an eventual retry
11793				delete s.data;
11794			}
11795
11796			// Add or update anti-cache param if needed
11797			if ( s.cache === false ) {
11798				cacheURL = cacheURL.replace( rantiCache, "$1" );
11799				uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) +
11800					uncached;
11801			}
11802
11803			// Put hash and anti-cache on the URL that will be requested (gh-1732)
11804			s.url = cacheURL + uncached;
11805
11806		// Change '%20' to '+' if this is encoded form body content (gh-2658)
11807		} else if ( s.data && s.processData &&
11808			( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
11809			s.data = s.data.replace( r20, "+" );
11810		}
11811
11812		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
11813		if ( s.ifModified ) {
11814			if ( jQuery.lastModified[ cacheURL ] ) {
11815				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
11816			}
11817			if ( jQuery.etag[ cacheURL ] ) {
11818				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
11819			}
11820		}
11821
11822		// Set the correct header, if data is being sent
11823		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
11824			jqXHR.setRequestHeader( "Content-Type", s.contentType );
11825		}
11826
11827		// Set the Accepts header for the server, depending on the dataType
11828		jqXHR.setRequestHeader(
11829			"Accept",
11830			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
11831				s.accepts[ s.dataTypes[ 0 ] ] +
11832					( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
11833				s.accepts[ "*" ]
11834		);
11835
11836		// Check for headers option
11837		for ( i in s.headers ) {
11838			jqXHR.setRequestHeader( i, s.headers[ i ] );
11839		}
11840
11841		// Allow custom headers/mimetypes and early abort
11842		if ( s.beforeSend &&
11843			( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
11844
11845			// Abort if not done already and return
11846			return jqXHR.abort();
11847		}
11848
11849		// Aborting is no longer a cancellation
11850		strAbort = "abort";
11851
11852		// Install callbacks on deferreds
11853		completeDeferred.add( s.complete );
11854		jqXHR.done( s.success );
11855		jqXHR.fail( s.error );
11856
11857		// Get transport
11858		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
11859
11860		// If no transport, we auto-abort
11861		if ( !transport ) {
11862			done( -1, "No Transport" );
11863		} else {
11864			jqXHR.readyState = 1;
11865
11866			// Send global event
11867			if ( fireGlobals ) {
11868				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
11869			}
11870
11871			// If request was aborted inside ajaxSend, stop there
11872			if ( completed ) {
11873				return jqXHR;
11874			}
11875
11876			// Timeout
11877			if ( s.async && s.timeout > 0 ) {
11878				timeoutTimer = window.setTimeout( function() {
11879					jqXHR.abort( "timeout" );
11880				}, s.timeout );
11881			}
11882
11883			try {
11884				completed = false;
11885				transport.send( requestHeaders, done );
11886			} catch ( e ) {
11887
11888				// Rethrow post-completion exceptions
11889				if ( completed ) {
11890					throw e;
11891				}
11892
11893				// Propagate others as results
11894				done( -1, e );
11895			}
11896		}
11897
11898		// Callback for when everything is done
11899		function done( status, nativeStatusText, responses, headers ) {
11900			var isSuccess, success, error, response, modified,
11901				statusText = nativeStatusText;
11902
11903			// Ignore repeat invocations
11904			if ( completed ) {
11905				return;
11906			}
11907
11908			completed = true;
11909
11910			// Clear timeout if it exists
11911			if ( timeoutTimer ) {
11912				window.clearTimeout( timeoutTimer );
11913			}
11914
11915			// Dereference transport for early garbage collection
11916			// (no matter how long the jqXHR object will be used)
11917			transport = undefined;
11918
11919			// Cache response headers
11920			responseHeadersString = headers || "";
11921
11922			// Set readyState
11923			jqXHR.readyState = status > 0 ? 4 : 0;
11924
11925			// Determine if successful
11926			isSuccess = status >= 200 && status < 300 || status === 304;
11927
11928			// Get response data
11929			if ( responses ) {
11930				response = ajaxHandleResponses( s, jqXHR, responses );
11931			}
11932
11933			// Use a noop converter for missing script but not if jsonp
11934			if ( !isSuccess &&
11935				jQuery.inArray( "script", s.dataTypes ) > -1 &&
11936				jQuery.inArray( "json", s.dataTypes ) < 0 ) {
11937				s.converters[ "text script" ] = function() {};
11938			}
11939
11940			// Convert no matter what (that way responseXXX fields are always set)
11941			response = ajaxConvert( s, response, jqXHR, isSuccess );
11942
11943			// If successful, handle type chaining
11944			if ( isSuccess ) {
11945
11946				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
11947				if ( s.ifModified ) {
11948					modified = jqXHR.getResponseHeader( "Last-Modified" );
11949					if ( modified ) {
11950						jQuery.lastModified[ cacheURL ] = modified;
11951					}
11952					modified = jqXHR.getResponseHeader( "etag" );
11953					if ( modified ) {
11954						jQuery.etag[ cacheURL ] = modified;
11955					}
11956				}
11957
11958				// if no content
11959				if ( status === 204 || s.type === "HEAD" ) {
11960					statusText = "nocontent";
11961
11962				// if not modified
11963				} else if ( status === 304 ) {
11964					statusText = "notmodified";
11965
11966				// If we have data, let's convert it
11967				} else {
11968					statusText = response.state;
11969					success = response.data;
11970					error = response.error;
11971					isSuccess = !error;
11972				}
11973			} else {
11974
11975				// Extract error from statusText and normalize for non-aborts
11976				error = statusText;
11977				if ( status || !statusText ) {
11978					statusText = "error";
11979					if ( status < 0 ) {
11980						status = 0;
11981					}
11982				}
11983			}
11984
11985			// Set data for the fake xhr object
11986			jqXHR.status = status;
11987			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
11988
11989			// Success/Error
11990			if ( isSuccess ) {
11991				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
11992			} else {
11993				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
11994			}
11995
11996			// Status-dependent callbacks
11997			jqXHR.statusCode( statusCode );
11998			statusCode = undefined;
11999
12000			if ( fireGlobals ) {
12001				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
12002					[ jqXHR, s, isSuccess ? success : error ] );
12003			}
12004
12005			// Complete
12006			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
12007
12008			if ( fireGlobals ) {
12009				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
12010
12011				// Handle the global AJAX counter
12012				if ( !( --jQuery.active ) ) {
12013					jQuery.event.trigger( "ajaxStop" );
12014				}
12015			}
12016		}
12017
12018		return jqXHR;
12019	},
12020
12021	getJSON: function( url, data, callback ) {
12022		return jQuery.get( url, data, callback, "json" );
12023	},
12024
12025	getScript: function( url, callback ) {
12026		return jQuery.get( url, undefined, callback, "script" );
12027	}
12028} );
12029
12030jQuery.each( [ "get", "post" ], function( _i, method ) {
12031	jQuery[ method ] = function( url, data, callback, type ) {
12032
12033		// Shift arguments if data argument was omitted
12034		if ( isFunction( data ) ) {
12035			type = type || callback;
12036			callback = data;
12037			data = undefined;
12038		}
12039
12040		// The url can be an options object (which then must have .url)
12041		return jQuery.ajax( jQuery.extend( {
12042			url: url,
12043			type: method,
12044			dataType: type,
12045			data: data,
12046			success: callback
12047		}, jQuery.isPlainObject( url ) && url ) );
12048	};
12049} );
12050
12051jQuery.ajaxPrefilter( function( s ) {
12052	var i;
12053	for ( i in s.headers ) {
12054		if ( i.toLowerCase() === "content-type" ) {
12055			s.contentType = s.headers[ i ] || "";
12056		}
12057	}
12058} );
12059
12060
12061jQuery._evalUrl = function( url, options, doc ) {
12062	return jQuery.ajax( {
12063		url: url,
12064
12065		// Make this explicit, since user can override this through ajaxSetup (trac-11264)
12066		type: "GET",
12067		dataType: "script",
12068		cache: true,
12069		async: false,
12070		global: false,
12071
12072		// Only evaluate the response if it is successful (gh-4126)
12073		// dataFilter is not invoked for failure responses, so using it instead
12074		// of the default converter is kludgy but it works.
12075		converters: {
12076			"text script": function() {}
12077		},
12078		dataFilter: function( response ) {
12079			jQuery.globalEval( response, options, doc );
12080		}
12081	} );
12082};
12083
12084
12085jQuery.fn.extend( {
12086	wrapAll: function( html ) {
12087		var wrap;
12088
12089		if ( this[ 0 ] ) {
12090			if ( isFunction( html ) ) {
12091				html = html.call( this[ 0 ] );
12092			}
12093
12094			// The elements to wrap the target around
12095			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
12096
12097			if ( this[ 0 ].parentNode ) {
12098				wrap.insertBefore( this[ 0 ] );
12099			}
12100
12101			wrap.map( function() {
12102				var elem = this;
12103
12104				while ( elem.firstElementChild ) {
12105					elem = elem.firstElementChild;
12106				}
12107
12108				return elem;
12109			} ).append( this );
12110		}
12111
12112		return this;
12113	},
12114
12115	wrapInner: function( html ) {
12116		if ( isFunction( html ) ) {
12117			return this.each( function( i ) {
12118				jQuery( this ).wrapInner( html.call( this, i ) );
12119			} );
12120		}
12121
12122		return this.each( function() {
12123			var self = jQuery( this ),
12124				contents = self.contents();
12125
12126			if ( contents.length ) {
12127				contents.wrapAll( html );
12128
12129			} else {
12130				self.append( html );
12131			}
12132		} );
12133	},
12134
12135	wrap: function( html ) {
12136		var htmlIsFunction = isFunction( html );
12137
12138		return this.each( function( i ) {
12139			jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );
12140		} );
12141	},
12142
12143	unwrap: function( selector ) {
12144		this.parent( selector ).not( "body" ).each( function() {
12145			jQuery( this ).replaceWith( this.childNodes );
12146		} );
12147		return this;
12148	}
12149} );
12150
12151
12152jQuery.expr.pseudos.hidden = function( elem ) {
12153	return !jQuery.expr.pseudos.visible( elem );
12154};
12155jQuery.expr.pseudos.visible = function( elem ) {
12156	return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
12157};
12158
12159
12160
12161
12162jQuery.ajaxSettings.xhr = function() {
12163	try {
12164		return new window.XMLHttpRequest();
12165	} catch ( e ) {}
12166};
12167
12168var xhrSuccessStatus = {
12169
12170		// File protocol always yields status code 0, assume 200
12171		0: 200,
12172
12173		// Support: IE <=9 only
12174		// trac-1450: sometimes IE returns 1223 when it should be 204
12175		1223: 204
12176	},
12177	xhrSupported = jQuery.ajaxSettings.xhr();
12178
12179support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
12180support.ajax = xhrSupported = !!xhrSupported;
12181
12182jQuery.ajaxTransport( function( options ) {
12183	var callback, errorCallback;
12184
12185	// Cross domain only allowed if supported through XMLHttpRequest
12186	if ( support.cors || xhrSupported && !options.crossDomain ) {
12187		return {
12188			send: function( headers, complete ) {
12189				var i,
12190					xhr = options.xhr();
12191
12192				xhr.open(
12193					options.type,
12194					options.url,
12195					options.async,
12196					options.username,
12197					options.password
12198				);
12199
12200				// Apply custom fields if provided
12201				if ( options.xhrFields ) {
12202					for ( i in options.xhrFields ) {
12203						xhr[ i ] = options.xhrFields[ i ];
12204					}
12205				}
12206
12207				// Override mime type if needed
12208				if ( options.mimeType && xhr.overrideMimeType ) {
12209					xhr.overrideMimeType( options.mimeType );
12210				}
12211
12212				// X-Requested-With header
12213				// For cross-domain requests, seeing as conditions for a preflight are
12214				// akin to a jigsaw puzzle, we simply never set it to be sure.
12215				// (it can always be set on a per-request basis or even using ajaxSetup)
12216				// For same-domain requests, won't change header if already provided.
12217				if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
12218					headers[ "X-Requested-With" ] = "XMLHttpRequest";
12219				}
12220
12221				// Set headers
12222				for ( i in headers ) {
12223					xhr.setRequestHeader( i, headers[ i ] );
12224				}
12225
12226				// Callback
12227				callback = function( type ) {
12228					return function() {
12229						if ( callback ) {
12230							callback = errorCallback = xhr.onload =
12231								xhr.onerror = xhr.onabort = xhr.ontimeout =
12232									xhr.onreadystatechange = null;
12233
12234							if ( type === "abort" ) {
12235								xhr.abort();
12236							} else if ( type === "error" ) {
12237
12238								// Support: IE <=9 only
12239								// On a manual native abort, IE9 throws
12240								// errors on any property access that is not readyState
12241								if ( typeof xhr.status !== "number" ) {
12242									complete( 0, "error" );
12243								} else {
12244									complete(
12245
12246										// File: protocol always yields status 0; see trac-8605, trac-14207
12247										xhr.status,
12248										xhr.statusText
12249									);
12250								}
12251							} else {
12252								complete(
12253									xhrSuccessStatus[ xhr.status ] || xhr.status,
12254									xhr.statusText,
12255
12256									// Support: IE <=9 only
12257									// IE9 has no XHR2 but throws on binary (trac-11426)
12258									// For XHR2 non-text, let the caller handle it (gh-2498)
12259									( xhr.responseType || "text" ) !== "text"  ||
12260									typeof xhr.responseText !== "string" ?
12261										{ binary: xhr.response } :
12262										{ text: xhr.responseText },
12263									xhr.getAllResponseHeaders()
12264								);
12265							}
12266						}
12267					};
12268				};
12269
12270				// Listen to events
12271				xhr.onload = callback();
12272				errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" );
12273
12274				// Support: IE 9 only
12275				// Use onreadystatechange to replace onabort
12276				// to handle uncaught aborts
12277				if ( xhr.onabort !== undefined ) {
12278					xhr.onabort = errorCallback;
12279				} else {
12280					xhr.onreadystatechange = function() {
12281
12282						// Check readyState before timeout as it changes
12283						if ( xhr.readyState === 4 ) {
12284
12285							// Allow onerror to be called first,
12286							// but that will not handle a native abort
12287							// Also, save errorCallback to a variable
12288							// as xhr.onerror cannot be accessed
12289							window.setTimeout( function() {
12290								if ( callback ) {
12291									errorCallback();
12292								}
12293							} );
12294						}
12295					};
12296				}
12297
12298				// Create the abort callback
12299				callback = callback( "abort" );
12300
12301				try {
12302
12303					// Do send the request (this may raise an exception)
12304					xhr.send( options.hasContent && options.data || null );
12305				} catch ( e ) {
12306
12307					// trac-14683: Only rethrow if this hasn't been notified as an error yet
12308					if ( callback ) {
12309						throw e;
12310					}
12311				}
12312			},
12313
12314			abort: function() {
12315				if ( callback ) {
12316					callback();
12317				}
12318			}
12319		};
12320	}
12321} );
12322
12323
12324
12325
12326// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
12327jQuery.ajaxPrefilter( function( s ) {
12328	if ( s.crossDomain ) {
12329		s.contents.script = false;
12330	}
12331} );
12332
12333// Install script dataType
12334jQuery.ajaxSetup( {
12335	accepts: {
12336		script: "text/javascript, application/javascript, " +
12337			"application/ecmascript, application/x-ecmascript"
12338	},
12339	contents: {
12340		script: /\b(?:java|ecma)script\b/
12341	},
12342	converters: {
12343		"text script": function( text ) {
12344			jQuery.globalEval( text );
12345			return text;
12346		}
12347	}
12348} );
12349
12350// Handle cache's special case and crossDomain
12351jQuery.ajaxPrefilter( "script", function( s ) {
12352	if ( s.cache === undefined ) {
12353		s.cache = false;
12354	}
12355	if ( s.crossDomain ) {
12356		s.type = "GET";
12357	}
12358} );
12359
12360// Bind script tag hack transport
12361jQuery.ajaxTransport( "script", function( s ) {
12362
12363	// This transport only deals with cross domain or forced-by-attrs requests
12364	if ( s.crossDomain || s.scriptAttrs ) {
12365		var script, callback;
12366		return {
12367			send: function( _, complete ) {
12368				script = jQuery( "<script>" )
12369					.attr( s.scriptAttrs || {} )
12370					.prop( { charset: s.scriptCharset, src: s.url } )
12371					.on( "load error", callback = function( evt ) {
12372						script.remove();
12373						callback = null;
12374						if ( evt ) {
12375							complete( evt.type === "error" ? 404 : 200, evt.type );
12376						}
12377					} );
12378
12379				// Use native DOM manipulation to avoid our domManip AJAX trickery
12380				document.head.appendChild( script[ 0 ] );
12381			},
12382			abort: function() {
12383				if ( callback ) {
12384					callback();
12385				}
12386			}
12387		};
12388	}
12389} );
12390
12391
12392
12393
12394var oldCallbacks = [],
12395	rjsonp = /(=)\?(?=&|$)|\?\?/;
12396
12397// Default jsonp settings
12398jQuery.ajaxSetup( {
12399	jsonp: "callback",
12400	jsonpCallback: function() {
12401		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) );
12402		this[ callback ] = true;
12403		return callback;
12404	}
12405} );
12406
12407// Detect, normalize options and install callbacks for jsonp requests
12408jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
12409
12410	var callbackName, overwritten, responseContainer,
12411		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
12412			"url" :
12413			typeof s.data === "string" &&
12414				( s.contentType || "" )
12415					.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
12416				rjsonp.test( s.data ) && "data"
12417		);
12418
12419	// Handle iff the expected data type is "jsonp" or we have a parameter to set
12420	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
12421
12422		// Get callback name, remembering preexisting value associated with it
12423		callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?
12424			s.jsonpCallback() :
12425			s.jsonpCallback;
12426
12427		// Insert callback into url or form data
12428		if ( jsonProp ) {
12429			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
12430		} else if ( s.jsonp !== false ) {
12431			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
12432		}
12433
12434		// Use data converter to retrieve json after script execution
12435		s.converters[ "script json" ] = function() {
12436			if ( !responseContainer ) {
12437				jQuery.error( callbackName + " was not called" );
12438			}
12439			return responseContainer[ 0 ];
12440		};
12441
12442		// Force json dataType
12443		s.dataTypes[ 0 ] = "json";
12444
12445		// Install callback
12446		overwritten = window[ callbackName ];
12447		window[ callbackName ] = function() {
12448			responseContainer = arguments;
12449		};
12450
12451		// Clean-up function (fires after converters)
12452		jqXHR.always( function() {
12453
12454			// If previous value didn't exist - remove it
12455			if ( overwritten === undefined ) {
12456				jQuery( window ).removeProp( callbackName );
12457
12458			// Otherwise restore preexisting value
12459			} else {
12460				window[ callbackName ] = overwritten;
12461			}
12462
12463			// Save back as free
12464			if ( s[ callbackName ] ) {
12465
12466				// Make sure that re-using the options doesn't screw things around
12467				s.jsonpCallback = originalSettings.jsonpCallback;
12468
12469				// Save the callback name for future use
12470				oldCallbacks.push( callbackName );
12471			}
12472
12473			// Call if it was a function and we have a response
12474			if ( responseContainer && isFunction( overwritten ) ) {
12475				overwritten( responseContainer[ 0 ] );
12476			}
12477
12478			responseContainer = overwritten = undefined;
12479		} );
12480
12481		// Delegate to script
12482		return "script";
12483	}
12484} );
12485
12486
12487
12488
12489// Support: Safari 8 only
12490// In Safari 8 documents created via document.implementation.createHTMLDocument
12491// collapse sibling forms: the second one becomes a child of the first one.
12492// Because of that, this security measure has to be disabled in Safari 8.
12493// https://bugs.webkit.org/show_bug.cgi?id=137337
12494support.createHTMLDocument = ( function() {
12495	var body = document.implementation.createHTMLDocument( "" ).body;
12496	body.innerHTML = "<form></form><form></form>";
12497	return body.childNodes.length === 2;
12498} )();
12499
12500
12501// Argument "data" should be string of html
12502// context (optional): If specified, the fragment will be created in this context,
12503// defaults to document
12504// keepScripts (optional): If true, will include scripts passed in the html string
12505jQuery.parseHTML = function( data, context, keepScripts ) {
12506	if ( typeof data !== "string" ) {
12507		return [];
12508	}
12509	if ( typeof context === "boolean" ) {
12510		keepScripts = context;
12511		context = false;
12512	}
12513
12514	var base, parsed, scripts;
12515
12516	if ( !context ) {
12517
12518		// Stop scripts or inline event handlers from being executed immediately
12519		// by using document.implementation
12520		if ( support.createHTMLDocument ) {
12521			context = document.implementation.createHTMLDocument( "" );
12522
12523			// Set the base href for the created document
12524			// so any parsed elements with URLs
12525			// are based on the document's URL (gh-2965)
12526			base = context.createElement( "base" );
12527			base.href = document.location.href;
12528			context.head.appendChild( base );
12529		} else {
12530			context = document;
12531		}
12532	}
12533
12534	parsed = rsingleTag.exec( data );
12535	scripts = !keepScripts && [];
12536
12537	// Single tag
12538	if ( parsed ) {
12539		return [ context.createElement( parsed[ 1 ] ) ];
12540	}
12541
12542	parsed = buildFragment( [ data ], context, scripts );
12543
12544	if ( scripts && scripts.length ) {
12545		jQuery( scripts ).remove();
12546	}
12547
12548	return jQuery.merge( [], parsed.childNodes );
12549};
12550
12551
12552/**
12553 * Load a url into a page
12554 */
12555jQuery.fn.load = function( url, params, callback ) {
12556	var selector, type, response,
12557		self = this,
12558		off = url.indexOf( " " );
12559
12560	if ( off > -1 ) {
12561		selector = stripAndCollapse( url.slice( off ) );
12562		url = url.slice( 0, off );
12563	}
12564
12565	// If it's a function
12566	if ( isFunction( params ) ) {
12567
12568		// We assume that it's the callback
12569		callback = params;
12570		params = undefined;
12571
12572	// Otherwise, build a param string
12573	} else if ( params && typeof params === "object" ) {
12574		type = "POST";
12575	}
12576
12577	// If we have elements to modify, make the request
12578	if ( self.length > 0 ) {
12579		jQuery.ajax( {
12580			url: url,
12581
12582			// If "type" variable is undefined, then "GET" method will be used.
12583			// Make value of this field explicit since
12584			// user can override it through ajaxSetup method
12585			type: type || "GET",
12586			dataType: "html",
12587			data: params
12588		} ).done( function( responseText ) {
12589
12590			// Save response for use in complete callback
12591			response = arguments;
12592
12593			self.html( selector ?
12594
12595				// If a selector was specified, locate the right elements in a dummy div
12596				// Exclude scripts to avoid IE 'Permission Denied' errors
12597				jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
12598
12599				// Otherwise use the full result
12600				responseText );
12601
12602		// If the request succeeds, this function gets "data", "status", "jqXHR"
12603		// but they are ignored because response was set above.
12604		// If it fails, this function gets "jqXHR", "status", "error"
12605		} ).always( callback && function( jqXHR, status ) {
12606			self.each( function() {
12607				callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
12608			} );
12609		} );
12610	}
12611
12612	return this;
12613};
12614
12615
12616
12617
12618jQuery.expr.pseudos.animated = function( elem ) {
12619	return jQuery.grep( jQuery.timers, function( fn ) {
12620		return elem === fn.elem;
12621	} ).length;
12622};
12623
12624
12625
12626
12627jQuery.offset = {
12628	setOffset: function( elem, options, i ) {
12629		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
12630			position = jQuery.css( elem, "position" ),
12631			curElem = jQuery( elem ),
12632			props = {};
12633
12634		// Set position first, in-case top/left are set even on static elem
12635		if ( position === "static" ) {
12636			elem.style.position = "relative";
12637		}
12638
12639		curOffset = curElem.offset();
12640		curCSSTop = jQuery.css( elem, "top" );
12641		curCSSLeft = jQuery.css( elem, "left" );
12642		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
12643			( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
12644
12645		// Need to be able to calculate position if either
12646		// top or left is auto and position is either absolute or fixed
12647		if ( calculatePosition ) {
12648			curPosition = curElem.position();
12649			curTop = curPosition.top;
12650			curLeft = curPosition.left;
12651
12652		} else {
12653			curTop = parseFloat( curCSSTop ) || 0;
12654			curLeft = parseFloat( curCSSLeft ) || 0;
12655		}
12656
12657		if ( isFunction( options ) ) {
12658
12659			// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
12660			options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
12661		}
12662
12663		if ( options.top != null ) {
12664			props.top = ( options.top - curOffset.top ) + curTop;
12665		}
12666		if ( options.left != null ) {
12667			props.left = ( options.left - curOffset.left ) + curLeft;
12668		}
12669
12670		if ( "using" in options ) {
12671			options.using.call( elem, props );
12672
12673		} else {
12674			curElem.css( props );
12675		}
12676	}
12677};
12678
12679jQuery.fn.extend( {
12680
12681	// offset() relates an element's border box to the document origin
12682	offset: function( options ) {
12683
12684		// Preserve chaining for setter
12685		if ( arguments.length ) {
12686			return options === undefined ?
12687				this :
12688				this.each( function( i ) {
12689					jQuery.offset.setOffset( this, options, i );
12690				} );
12691		}
12692
12693		var rect, win,
12694			elem = this[ 0 ];
12695
12696		if ( !elem ) {
12697			return;
12698		}
12699
12700		// Return zeros for disconnected and hidden (display: none) elements (gh-2310)
12701		// Support: IE <=11 only
12702		// Running getBoundingClientRect on a
12703		// disconnected node in IE throws an error
12704		if ( !elem.getClientRects().length ) {
12705			return { top: 0, left: 0 };
12706		}
12707
12708		// Get document-relative position by adding viewport scroll to viewport-relative gBCR
12709		rect = elem.getBoundingClientRect();
12710		win = elem.ownerDocument.defaultView;
12711		return {
12712			top: rect.top + win.pageYOffset,
12713			left: rect.left + win.pageXOffset
12714		};
12715	},
12716
12717	// position() relates an element's margin box to its offset parent's padding box
12718	// This corresponds to the behavior of CSS absolute positioning
12719	position: function() {
12720		if ( !this[ 0 ] ) {
12721			return;
12722		}
12723
12724		var offsetParent, offset, doc,
12725			elem = this[ 0 ],
12726			parentOffset = { top: 0, left: 0 };
12727
12728		// position:fixed elements are offset from the viewport, which itself always has zero offset
12729		if ( jQuery.css( elem, "position" ) === "fixed" ) {
12730
12731			// Assume position:fixed implies availability of getBoundingClientRect
12732			offset = elem.getBoundingClientRect();
12733
12734		} else {
12735			offset = this.offset();
12736
12737			// Account for the *real* offset parent, which can be the document or its root element
12738			// when a statically positioned element is identified
12739			doc = elem.ownerDocument;
12740			offsetParent = elem.offsetParent || doc.documentElement;
12741			while ( offsetParent &&
12742				( offsetParent === doc.body || offsetParent === doc.documentElement ) &&
12743				jQuery.css( offsetParent, "position" ) === "static" ) {
12744
12745				offsetParent = offsetParent.parentNode;
12746			}
12747			if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {
12748
12749				// Incorporate borders into its offset, since they are outside its content origin
12750				parentOffset = jQuery( offsetParent ).offset();
12751				parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true );
12752				parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true );
12753			}
12754		}
12755
12756		// Subtract parent offsets and element margins
12757		return {
12758			top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
12759			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
12760		};
12761	},
12762
12763	// This method will return documentElement in the following cases:
12764	// 1) For the element inside the iframe without offsetParent, this method will return
12765	//    documentElement of the parent window
12766	// 2) For the hidden or detached element
12767	// 3) For body or html element, i.e. in case of the html node - it will return itself
12768	//
12769	// but those exceptions were never presented as a real life use-cases
12770	// and might be considered as more preferable results.
12771	//
12772	// This logic, however, is not guaranteed and can change at any point in the future
12773	offsetParent: function() {
12774		return this.map( function() {
12775			var offsetParent = this.offsetParent;
12776
12777			while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
12778				offsetParent = offsetParent.offsetParent;
12779			}
12780
12781			return offsetParent || documentElement;
12782		} );
12783	}
12784} );
12785
12786// Create scrollLeft and scrollTop methods
12787jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
12788	var top = "pageYOffset" === prop;
12789
12790	jQuery.fn[ method ] = function( val ) {
12791		return access( this, function( elem, method, val ) {
12792
12793			// Coalesce documents and windows
12794			var win;
12795			if ( isWindow( elem ) ) {
12796				win = elem;
12797			} else if ( elem.nodeType === 9 ) {
12798				win = elem.defaultView;
12799			}
12800
12801			if ( val === undefined ) {
12802				return win ? win[ prop ] : elem[ method ];
12803			}
12804
12805			if ( win ) {
12806				win.scrollTo(
12807					!top ? val : win.pageXOffset,
12808					top ? val : win.pageYOffset
12809				);
12810
12811			} else {
12812				elem[ method ] = val;
12813			}
12814		}, method, val, arguments.length );
12815	};
12816} );
12817
12818// Support: Safari <=7 - 9.1, Chrome <=37 - 49
12819// Add the top/left cssHooks using jQuery.fn.position
12820// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
12821// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
12822// getComputedStyle returns percent when specified for top/left/bottom/right;
12823// rather than make the css module depend on the offset module, just check for it here
12824jQuery.each( [ "top", "left" ], function( _i, prop ) {
12825	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
12826		function( elem, computed ) {
12827			if ( computed ) {
12828				computed = curCSS( elem, prop );
12829
12830				// If curCSS returns percentage, fallback to offset
12831				return rnumnonpx.test( computed ) ?
12832					jQuery( elem ).position()[ prop ] + "px" :
12833					computed;
12834			}
12835		}
12836	);
12837} );
12838
12839
12840// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
12841jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
12842	jQuery.each( {
12843		padding: "inner" + name,
12844		content: type,
12845		"": "outer" + name
12846	}, function( defaultExtra, funcName ) {
12847
12848		// Margin is only for outerHeight, outerWidth
12849		jQuery.fn[ funcName ] = function( margin, value ) {
12850			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
12851				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
12852
12853			return access( this, function( elem, type, value ) {
12854				var doc;
12855
12856				if ( isWindow( elem ) ) {
12857
12858					// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
12859					return funcName.indexOf( "outer" ) === 0 ?
12860						elem[ "inner" + name ] :
12861						elem.document.documentElement[ "client" + name ];
12862				}
12863
12864				// Get document width or height
12865				if ( elem.nodeType === 9 ) {
12866					doc = elem.documentElement;
12867
12868					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
12869					// whichever is greatest
12870					return Math.max(
12871						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
12872						elem.body[ "offset" + name ], doc[ "offset" + name ],
12873						doc[ "client" + name ]
12874					);
12875				}
12876
12877				return value === undefined ?
12878
12879					// Get width or height on the element, requesting but not forcing parseFloat
12880					jQuery.css( elem, type, extra ) :
12881
12882					// Set width or height on the element
12883					jQuery.style( elem, type, value, extra );
12884			}, type, chainable ? margin : undefined, chainable );
12885		};
12886	} );
12887} );
12888
12889
12890jQuery.each( [
12891	"ajaxStart",
12892	"ajaxStop",
12893	"ajaxComplete",
12894	"ajaxError",
12895	"ajaxSuccess",
12896	"ajaxSend"
12897], function( _i, type ) {
12898	jQuery.fn[ type ] = function( fn ) {
12899		return this.on( type, fn );
12900	};
12901} );
12902
12903
12904
12905
12906jQuery.fn.extend( {
12907
12908	bind: function( types, data, fn ) {
12909		return this.on( types, null, data, fn );
12910	},
12911	unbind: function( types, fn ) {
12912		return this.off( types, null, fn );
12913	},
12914
12915	delegate: function( selector, types, data, fn ) {
12916		return this.on( types, selector, data, fn );
12917	},
12918	undelegate: function( selector, types, fn ) {
12919
12920		// ( namespace ) or ( selector, types [, fn] )
12921		return arguments.length === 1 ?
12922			this.off( selector, "**" ) :
12923			this.off( types, selector || "**", fn );
12924	},
12925
12926	hover: function( fnOver, fnOut ) {
12927		return this
12928			.on( "mouseenter", fnOver )
12929			.on( "mouseleave", fnOut || fnOver );
12930	}
12931} );
12932
12933jQuery.each(
12934	( "blur focus focusin focusout resize scroll click dblclick " +
12935	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
12936	"change select submit keydown keypress keyup contextmenu" ).split( " " ),
12937	function( _i, name ) {
12938
12939		// Handle event binding
12940		jQuery.fn[ name ] = function( data, fn ) {
12941			return arguments.length > 0 ?
12942				this.on( name, null, data, fn ) :
12943				this.trigger( name );
12944		};
12945	}
12946);
12947
12948
12949
12950
12951// Support: Android <=4.0 only
12952// Make sure we trim BOM and NBSP
12953// Require that the "whitespace run" starts from a non-whitespace
12954// to avoid O(N^2) behavior when the engine would try matching "\s+$" at each space position.
12955var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;
12956
12957// Bind a function to a context, optionally partially applying any
12958// arguments.
12959// jQuery.proxy is deprecated to promote standards (specifically Function#bind)
12960// However, it is not slated for removal any time soon
12961jQuery.proxy = function( fn, context ) {
12962	var tmp, args, proxy;
12963
12964	if ( typeof context === "string" ) {
12965		tmp = fn[ context ];
12966		context = fn;
12967		fn = tmp;
12968	}
12969
12970	// Quick check to determine if target is callable, in the spec
12971	// this throws a TypeError, but we will just return undefined.
12972	if ( !isFunction( fn ) ) {
12973		return undefined;
12974	}
12975
12976	// Simulated bind
12977	args = slice.call( arguments, 2 );
12978	proxy = function() {
12979		return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
12980	};
12981
12982	// Set the guid of unique handler to the same of original handler, so it can be removed
12983	proxy.guid = fn.guid = fn.guid || jQuery.guid++;
12984
12985	return proxy;
12986};
12987
12988jQuery.holdReady = function( hold ) {
12989	if ( hold ) {
12990		jQuery.readyWait++;
12991	} else {
12992		jQuery.ready( true );
12993	}
12994};
12995jQuery.isArray = Array.isArray;
12996jQuery.parseJSON = JSON.parse;
12997jQuery.nodeName = nodeName;
12998jQuery.isFunction = isFunction;
12999jQuery.isWindow = isWindow;
13000jQuery.camelCase = camelCase;
13001jQuery.type = toType;
13002
13003jQuery.now = Date.now;
13004
13005jQuery.isNumeric = function( obj ) {
13006
13007	// As of jQuery 3.0, isNumeric is limited to
13008	// strings and numbers (primitives or objects)
13009	// that can be coerced to finite numbers (gh-2662)
13010	var type = jQuery.type( obj );
13011	return ( type === "number" || type === "string" ) &&
13012
13013		// parseFloat NaNs numeric-cast false positives ("")
13014		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
13015		// subtraction forces infinities to NaN
13016		!isNaN( obj - parseFloat( obj ) );
13017};
13018
13019jQuery.trim = function( text ) {
13020	return text == null ?
13021		"" :
13022		( text + "" ).replace( rtrim, "$1" );
13023};
13024
13025
13026
13027// Register as a named AMD module, since jQuery can be concatenated with other
13028// files that may use define, but not via a proper concatenation script that
13029// understands anonymous AMD modules. A named AMD is safest and most robust
13030// way to register. Lowercase jquery is used because AMD module names are
13031// derived from file names, and jQuery is normally delivered in a lowercase
13032// file name. Do this after creating the global so that if an AMD module wants
13033// to call noConflict to hide this version of jQuery, it will work.
13034
13035// Note that for maximum portability, libraries that are not jQuery should
13036// declare themselves as anonymous modules, and avoid setting a global if an
13037// AMD loader is present. jQuery is a special case. For more information, see
13038// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
13039
13040if ( true ) {
13041	!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() {
13042		return jQuery;
13043	}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
13044		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
13045}
13046
13047
13048
13049
13050var
13051
13052	// Map over jQuery in case of overwrite
13053	_jQuery = window.jQuery,
13054
13055	// Map over the $ in case of overwrite
13056	_$ = window.$;
13057
13058jQuery.noConflict = function( deep ) {
13059	if ( window.$ === jQuery ) {
13060		window.$ = _$;
13061	}
13062
13063	if ( deep && window.jQuery === jQuery ) {
13064		window.jQuery = _jQuery;
13065	}
13066
13067	return jQuery;
13068};
13069
13070// Expose jQuery and $ identifiers, even in AMD
13071// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)
13072// and CommonJS for browser emulators (trac-13566)
13073if ( typeof noGlobal === "undefined" ) {
13074	window.jQuery = window.$ = jQuery;
13075}
13076
13077
13078
13079
13080return jQuery;
13081} );
13082
13083
13084/***/ }),
13085
vendor: 9,797 bytes, lines 13086-13309
13086/***/ "./node_modules/process/browser.js":
13087/*!*****************************************!*\
13088  !*** ./node_modules/process/browser.js ***!
13089  \*****************************************/
13090/***/ ((module) => {
13091
13092// shim for using process in browser
13093var process = module.exports = {};
13094
13095// cached from whatever global is present so that test runners that stub it
13096// don't break things.  But we need to wrap it in a try catch in case it is
13097// wrapped in strict mode code which doesn't define any globals.  It's inside a
13098// function because try/catches deoptimize in certain engines.
13099
13100var cachedSetTimeout;
13101var cachedClearTimeout;
13102
13103function defaultSetTimout() {
13104    throw new Error('setTimeout has not been defined');
13105}
13106function defaultClearTimeout () {
13107    throw new Error('clearTimeout has not been defined');
13108}
13109(function () {
13110    try {
13111        if (typeof setTimeout === 'function') {
13112            cachedSetTimeout = setTimeout;
13113        } else {
13114            cachedSetTimeout = defaultSetTimout;
13115        }
13116    } catch (e) {
13117        cachedSetTimeout = defaultSetTimout;
13118    }
13119    try {
13120        if (typeof clearTimeout === 'function') {
13121            cachedClearTimeout = clearTimeout;
13122        } else {
13123            cachedClearTimeout = defaultClearTimeout;
13124        }
13125    } catch (e) {
13126        cachedClearTimeout = defaultClearTimeout;
13127    }
13128} ())
13129function runTimeout(fun) {
13130    if (cachedSetTimeout === setTimeout) {
13131        //normal enviroments in sane situations
13132        return setTimeout(fun, 0);
13133    }
13134    // if setTimeout wasn't available but was latter defined
13135    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
13136        cachedSetTimeout = setTimeout;
13137        return setTimeout(fun, 0);
13138    }
13139    try {
13140        // when when somebody has screwed with setTimeout but no I.E. maddness
13141        return cachedSetTimeout(fun, 0);
13142    } catch(e){
13143        try {
13144            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
13145            return cachedSetTimeout.call(null, fun, 0);
13146        } catch(e){
13147            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
13148            return cachedSetTimeout.call(this, fun, 0);
13149        }
13150    }
13151
13152
13153}
13154function runClearTimeout(marker) {
13155    if (cachedClearTimeout === clearTimeout) {
13156        //normal enviroments in sane situations
13157        return clearTimeout(marker);
13158    }
13159    // if clearTimeout wasn't available but was latter defined
13160    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
13161        cachedClearTimeout = clearTimeout;
13162        return clearTimeout(marker);
13163    }
13164    try {
13165        // when when somebody has screwed with setTimeout but no I.E. maddness
13166        return cachedClearTimeout(marker);
13167    } catch (e){
13168        try {
13169            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
13170            return cachedClearTimeout.call(null, marker);
13171        } catch (e){
13172            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
13173            // Some versions of I.E. have different rules for clearTimeout vs setTimeout
13174            return cachedClearTimeout.call(this, marker);
13175        }
13176    }
13177
13178
13179
13180}
13181var queue = [];
13182var draining = false;
13183var currentQueue;
13184var queueIndex = -1;
13185
13186function cleanUpNextTick() {
13187    if (!draining || !currentQueue) {
13188        return;
13189    }
13190    draining = false;
13191    if (currentQueue.length) {
13192        queue = currentQueue.concat(queue);
13193    } else {
13194        queueIndex = -1;
13195    }
13196    if (queue.length) {
13197        drainQueue();
13198    }
13199}
13200
13201function drainQueue() {
13202    if (draining) {
13203        return;
13204    }
13205    var timeout = runTimeout(cleanUpNextTick);
13206    draining = true;
13207
13208    var len = queue.length;
13209    while(len) {
13210        currentQueue = queue;
13211        queue = [];
13212        while (++queueIndex < len) {
13213            if (currentQueue) {
13214                currentQueue[queueIndex].run();
13215            }
13216        }
13217        queueIndex = -1;
13218        len = queue.length;
13219    }
13220    currentQueue = null;
13221    draining = false;
13222    runClearTimeout(timeout);
13223}
13224
13225process.nextTick = function (fun) {
13226    var args = new Array(arguments.length - 1);
13227    if (arguments.length > 1) {
13228        for (var i = 1; i < arguments.length; i++) {
13229            args[i - 1] = arguments[i];
13230        }
13231    }
13232    queue.push(new Item(fun, args));
13233    if (queue.length === 1 && !draining) {
13234        runTimeout(drainQueue);
13235    }
13236};
13237
13238// v8 likes predictible objects
13239function Item(fun, array) {
13240    this.fun = fun;
13241    this.array = array;
13242}
13243Item.prototype.run = function () {
13244    this.fun.apply(null, this.array);
13245};
13246process.title = 'browser';
13247process.browser = true;
13248process.env = {};
13249process.argv = [];
13250process.version = ''; // empty string to avoid regexp issues
13251process.versions = {};
13252
13253function noop() {}
13254
13255process.on = noop;
13256process.addListener = noop;
13257process.once = noop;
13258process.off = noop;
13259process.removeListener = noop;
13260process.removeAllListeners = noop;
13261process.emit = noop;
13262process.prependListener = noop;
13263process.prependOnceListener = noop;
13264
13265process.listeners = function (name) { return [] }
13266
13267process.binding = function (name) {
13268    throw new Error('process.binding is not supported');
13269};
13270
13271process.cwd = function () { return '/' };
13272process.chdir = function (dir) {
13273    throw new Error('process.chdir is not supported');
13274};
13275process.umask = function() { return 0; };
13276
13277
13278/***/ }),
13279
13280/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=style&index=0&id=35989352&lang=css":
13281/*!***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
13282  !*** ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=style&index=0&id=35989352&lang=css ***!
13283  \***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
13284/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
13285
13286"use strict";
13287__webpack_require__.r(__webpack_exports__);
13288/* harmony export */ __webpack_require__.d(__webpack_exports__, {
13289/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
13290/* harmony export */ });
13291/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
13292/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
13293/* harmony import */ var _css_loader_dist_cjs_js_clonedRuleSet_13_use_1_vue_loader_lib_loaders_stylePostLoader_js_postcss_loader_dist_cjs_js_clonedRuleSet_13_use_2_vue_loader_lib_index_js_vue_loader_options_ClipLoader_vue_vue_type_style_index_0_id_35989352_lang_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!../../vue-loader/lib/loaders/stylePostLoader.js!../../postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!../../vue-loader/lib/index.js??vue-loader-options!./ClipLoader.vue?vue&type=style&index=0&id=35989352&lang=css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=style&index=0&id=35989352&lang=css");
13294
13295            
13296
13297var options = {};
13298
13299options.insert = "head";
13300options.singleton = false;
13301
13302var update = _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_css_loader_dist_cjs_js_clonedRuleSet_13_use_1_vue_loader_lib_loaders_stylePostLoader_js_postcss_loader_dist_cjs_js_clonedRuleSet_13_use_2_vue_loader_lib_index_js_vue_loader_options_ClipLoader_vue_vue_type_style_index_0_id_35989352_lang_css__WEBPACK_IMPORTED_MODULE_1__["default"], options);
13303
13304
13305
13306/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_css_loader_dist_cjs_js_clonedRuleSet_13_use_1_vue_loader_lib_loaders_stylePostLoader_js_postcss_loader_dist_cjs_js_clonedRuleSet_13_use_2_vue_loader_lib_index_js_vue_loader_options_ClipLoader_vue_vue_type_style_index_0_id_35989352_lang_css__WEBPACK_IMPORTED_MODULE_1__["default"].locals || {});
13307
13308/***/ }),
13309
vendor: 7,200 bytes, lines 13310-13588
13310/***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js":
13311/*!****************************************************************************!*\
13312  !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***!
13313  \****************************************************************************/
13314/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
13315
13316"use strict";
13317
13318
13319var isOldIE = function isOldIE() {
13320  var memo;
13321  return function memorize() {
13322    if (typeof memo === 'undefined') {
13323      // Test for IE <= 9 as proposed by Browserhacks
13324      // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805
13325      // Tests for existence of standard globals is to allow style-loader
13326      // to operate correctly into non-standard environments
13327      // @see https://github.com/webpack-contrib/style-loader/issues/177
13328      memo = Boolean(window && document && document.all && !window.atob);
13329    }
13330
13331    return memo;
13332  };
13333}();
13334
13335var getTarget = function getTarget() {
13336  var memo = {};
13337  return function memorize(target) {
13338    if (typeof memo[target] === 'undefined') {
13339      var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself
13340
13341      if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {
13342        try {
13343          // This will throw an exception if access to iframe is blocked
13344          // due to cross-origin restrictions
13345          styleTarget = styleTarget.contentDocument.head;
13346        } catch (e) {
13347          // istanbul ignore next
13348          styleTarget = null;
13349        }
13350      }
13351
13352      memo[target] = styleTarget;
13353    }
13354
13355    return memo[target];
13356  };
13357}();
13358
13359var stylesInDom = [];
13360
13361function getIndexByIdentifier(identifier) {
13362  var result = -1;
13363
13364  for (var i = 0; i < stylesInDom.length; i++) {
13365    if (stylesInDom[i].identifier === identifier) {
13366      result = i;
13367      break;
13368    }
13369  }
13370
13371  return result;
13372}
13373
13374function modulesToDom(list, options) {
13375  var idCountMap = {};
13376  var identifiers = [];
13377
13378  for (var i = 0; i < list.length; i++) {
13379    var item = list[i];
13380    var id = options.base ? item[0] + options.base : item[0];
13381    var count = idCountMap[id] || 0;
13382    var identifier = "".concat(id, " ").concat(count);
13383    idCountMap[id] = count + 1;
13384    var index = getIndexByIdentifier(identifier);
13385    var obj = {
13386      css: item[1],
13387      media: item[2],
13388      sourceMap: item[3]
13389    };
13390
13391    if (index !== -1) {
13392      stylesInDom[index].references++;
13393      stylesInDom[index].updater(obj);
13394    } else {
13395      stylesInDom.push({
13396        identifier: identifier,
13397        updater: addStyle(obj, options),
13398        references: 1
13399      });
13400    }
13401
13402    identifiers.push(identifier);
13403  }
13404
13405  return identifiers;
13406}
13407
13408function insertStyleElement(options) {
13409  var style = document.createElement('style');
13410  var attributes = options.attributes || {};
13411
13412  if (typeof attributes.nonce === 'undefined') {
13413    var nonce =  true ? __webpack_require__.nc : 0;
13414
13415    if (nonce) {
13416      attributes.nonce = nonce;
13417    }
13418  }
13419
13420  Object.keys(attributes).forEach(function (key) {
13421    style.setAttribute(key, attributes[key]);
13422  });
13423
13424  if (typeof options.insert === 'function') {
13425    options.insert(style);
13426  } else {
13427    var target = getTarget(options.insert || 'head');
13428
13429    if (!target) {
13430      throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");
13431    }
13432
13433    target.appendChild(style);
13434  }
13435
13436  return style;
13437}
13438
13439function removeStyleElement(style) {
13440  // istanbul ignore if
13441  if (style.parentNode === null) {
13442    return false;
13443  }
13444
13445  style.parentNode.removeChild(style);
13446}
13447/* istanbul ignore next  */
13448
13449
13450var replaceText = function replaceText() {
13451  var textStore = [];
13452  return function replace(index, replacement) {
13453    textStore[index] = replacement;
13454    return textStore.filter(Boolean).join('\n');
13455  };
13456}();
13457
13458function applyToSingletonTag(style, index, remove, obj) {
13459  var css = remove ? '' : obj.media ? "@media ".concat(obj.media, " {").concat(obj.css, "}") : obj.css; // For old IE
13460
13461  /* istanbul ignore if  */
13462
13463  if (style.styleSheet) {
13464    style.styleSheet.cssText = replaceText(index, css);
13465  } else {
13466    var cssNode = document.createTextNode(css);
13467    var childNodes = style.childNodes;
13468
13469    if (childNodes[index]) {
13470      style.removeChild(childNodes[index]);
13471    }
13472
13473    if (childNodes.length) {
13474      style.insertBefore(cssNode, childNodes[index]);
13475    } else {
13476      style.appendChild(cssNode);
13477    }
13478  }
13479}
13480
13481function applyToTag(style, options, obj) {
13482  var css = obj.css;
13483  var media = obj.media;
13484  var sourceMap = obj.sourceMap;
13485
13486  if (media) {
13487    style.setAttribute('media', media);
13488  } else {
13489    style.removeAttribute('media');
13490  }
13491
13492  if (sourceMap && typeof btoa !== 'undefined') {
13493    css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */");
13494  } // For old IE
13495
13496  /* istanbul ignore if  */
13497
13498
13499  if (style.styleSheet) {
13500    style.styleSheet.cssText = css;
13501  } else {
13502    while (style.firstChild) {
13503      style.removeChild(style.firstChild);
13504    }
13505
13506    style.appendChild(document.createTextNode(css));
13507  }
13508}
13509
13510var singleton = null;
13511var singletonCounter = 0;
13512
13513function addStyle(obj, options) {
13514  var style;
13515  var update;
13516  var remove;
13517
13518  if (options.singleton) {
13519    var styleIndex = singletonCounter++;
13520    style = singleton || (singleton = insertStyleElement(options));
13521    update = applyToSingletonTag.bind(null, style, styleIndex, false);
13522    remove = applyToSingletonTag.bind(null, style, styleIndex, true);
13523  } else {
13524    style = insertStyleElement(options);
13525    update = applyToTag.bind(null, style, options);
13526
13527    remove = function remove() {
13528      removeStyleElement(style);
13529    };
13530  }
13531
13532  update(obj);
13533  return function updateStyle(newObj) {
13534    if (newObj) {
13535      if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {
13536        return;
13537      }
13538
13539      update(obj = newObj);
13540    } else {
13541      remove();
13542    }
13543  };
13544}
13545
13546module.exports = function (list, options) {
13547  options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
13548  // tags it will allow on a page
13549
13550  if (!options.singleton && typeof options.singleton !== 'boolean') {
13551    options.singleton = isOldIE();
13552  }
13553
13554  list = list || [];
13555  var lastIdentifiers = modulesToDom(list, options);
13556  return function update(newList) {
13557    newList = newList || [];
13558
13559    if (Object.prototype.toString.call(newList) !== '[object Array]') {
13560      return;
13561    }
13562
13563    for (var i = 0; i < lastIdentifiers.length; i++) {
13564      var identifier = lastIdentifiers[i];
13565      var index = getIndexByIdentifier(identifier);
13566      stylesInDom[index].references--;
13567    }
13568
13569    var newLastIdentifiers = modulesToDom(newList, options);
13570
13571    for (var _i = 0; _i < lastIdentifiers.length; _i++) {
13572      var _identifier = lastIdentifiers[_i];
13573
13574      var _index = getIndexByIdentifier(_identifier);
13575
13576      if (stylesInDom[_index].references === 0) {
13577        stylesInDom[_index].updater();
13578
13579        stylesInDom.splice(_index, 1);
13580      }
13581    }
13582
13583    lastIdentifiers = newLastIdentifiers;
13584  };
13585};
13586
13587/***/ }),
13588
vendor: 10,020 bytes, lines 13589-13765
13589/***/ "./node_modules/vue-spinner/src/ClipLoader.vue":
13590/*!*****************************************************!*\
13591  !*** ./node_modules/vue-spinner/src/ClipLoader.vue ***!
13592  \*****************************************************/
13593/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
13594
13595"use strict";
13596__webpack_require__.r(__webpack_exports__);
13597/* harmony export */ __webpack_require__.d(__webpack_exports__, {
13598/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
13599/* harmony export */ });
13600/* harmony import */ var _ClipLoader_vue_vue_type_template_id_35989352__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ClipLoader.vue?vue&type=template&id=35989352 */ "./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=template&id=35989352");
13601/* harmony import */ var _ClipLoader_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ClipLoader.vue?vue&type=script&lang=js */ "./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=script&lang=js");
13602/* harmony import */ var _ClipLoader_vue_vue_type_style_index_0_id_35989352_lang_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ClipLoader.vue?vue&type=style&index=0&id=35989352&lang=css */ "./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=style&index=0&id=35989352&lang=css");
13603/* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
13604
13605
13606
13607;
13608
13609
13610/* normalize component */
13611
13612var component = (0,_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
13613  _ClipLoader_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__["default"],
13614  _ClipLoader_vue_vue_type_template_id_35989352__WEBPACK_IMPORTED_MODULE_0__.render,
13615  _ClipLoader_vue_vue_type_template_id_35989352__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
13616  false,
13617  null,
13618  null,
13619  null
13620  
13621)
13622
13623/* hot reload */
13624if (false) { var api; }
13625component.options.__file = "node_modules/vue-spinner/src/ClipLoader.vue"
13626/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);
13627
13628/***/ }),
13629
13630/***/ "./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=script&lang=js":
13631/*!****************************************************************************************************************************************!*\
13632  !*** ./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=script&lang=js ***!
13633  \****************************************************************************************************************************************/
13634/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
13635
13636"use strict";
13637__webpack_require__.r(__webpack_exports__);
13638/* harmony export */ __webpack_require__.d(__webpack_exports__, {
13639/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
13640/* harmony export */ });
13641
13642/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
13643  
13644  name: 'ClipLoader',
13645
13646  props: {
13647    loading: {
13648      type: Boolean,
13649      default: true
13650    },
13651  	color: { 
13652      type: String,
13653      default: '#5dc596'
13654    },
13655  	size: {
13656      type: String,
13657      default: '35px'
13658    },
13659    radius: {
13660      type: String,
13661      default: '100%'
13662    }
13663  },
13664  computed: {
13665    spinnerStyle () {
13666      return {
13667        height: this.size,
13668        width: this.size,
13669        borderWidth: '2px',
13670        borderStyle: 'solid',
13671        borderColor: this.color + ' ' + this.color + ' transparent',
13672        borderRadius: this.radius,
13673        background: 'transparent'
13674      }
13675    }
13676  }
13677});
13678
13679
13680/***/ }),
13681
13682/***/ "./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=style&index=0&id=35989352&lang=css":
13683/*!*************************************************************************************************!*\
13684  !*** ./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=style&index=0&id=35989352&lang=css ***!
13685  \*************************************************************************************************/
13686/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
13687
13688"use strict";
13689__webpack_require__.r(__webpack_exports__);
13690/* harmony import */ var _style_loader_dist_cjs_js_css_loader_dist_cjs_js_clonedRuleSet_13_use_1_vue_loader_lib_loaders_stylePostLoader_js_postcss_loader_dist_cjs_js_clonedRuleSet_13_use_2_vue_loader_lib_index_js_vue_loader_options_ClipLoader_vue_vue_type_style_index_0_id_35989352_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../style-loader/dist/cjs.js!../../css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!../../vue-loader/lib/loaders/stylePostLoader.js!../../postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!../../vue-loader/lib/index.js??vue-loader-options!./ClipLoader.vue?vue&type=style&index=0&id=35989352&lang=css */ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=style&index=0&id=35989352&lang=css");
13691
13692
13693/***/ }),
13694
13695/***/ "./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=script&lang=js":
13696/*!*****************************************************************************!*\
13697  !*** ./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=script&lang=js ***!
13698  \*****************************************************************************/
13699/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
13700
13701"use strict";
13702__webpack_require__.r(__webpack_exports__);
13703/* harmony export */ __webpack_require__.d(__webpack_exports__, {
13704/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
13705/* harmony export */ });
13706/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_ClipLoader_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../vue-loader/lib/index.js??vue-loader-options!./ClipLoader.vue?vue&type=script&lang=js */ "./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=script&lang=js");
13707 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_vue_loader_lib_index_js_vue_loader_options_ClipLoader_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__["default"]); 
13708
13709/***/ }),
13710
13711/***/ "./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=template&id=35989352":
13712/*!***********************************************************************************!*\
13713  !*** ./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=template&id=35989352 ***!
13714  \***********************************************************************************/
13715/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
13716
13717"use strict";
13718__webpack_require__.r(__webpack_exports__);
13719/* harmony export */ __webpack_require__.d(__webpack_exports__, {
13720/* harmony export */   render: () => (/* reexport safe */ _vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_vue_loader_lib_index_js_vue_loader_options_ClipLoader_vue_vue_type_template_id_35989352__WEBPACK_IMPORTED_MODULE_0__.render),
13721/* harmony export */   staticRenderFns: () => (/* reexport safe */ _vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_vue_loader_lib_index_js_vue_loader_options_ClipLoader_vue_vue_type_template_id_35989352__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
13722/* harmony export */ });
13723/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_vue_loader_lib_index_js_vue_loader_options_ClipLoader_vue_vue_type_template_id_35989352__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../vue-loader/lib/index.js??vue-loader-options!./ClipLoader.vue?vue&type=template&id=35989352 */ "./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=template&id=35989352");
13724
13725
13726/***/ }),
13727
13728/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=template&id=35989352":
13729/*!***************************************************************************************************************************************************************************************************************************!*\
13730  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=template&id=35989352 ***!
13731  \***************************************************************************************************************************************************************************************************************************/
13732/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
13733
13734"use strict";
13735__webpack_require__.r(__webpack_exports__);
13736/* harmony export */ __webpack_require__.d(__webpack_exports__, {
13737/* harmony export */   render: () => (/* binding */ render),
13738/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)
13739/* harmony export */ });
13740var render = function render() {
13741  var _vm = this,
13742    _c = _vm._self._c
13743  return _c(
13744    "div",
13745    {
13746      directives: [
13747        {
13748          name: "show",
13749          rawName: "v-show",
13750          value: _vm.loading,
13751          expression: "loading",
13752        },
13753      ],
13754      staticClass: "v-spinner",
13755    },
13756    [_c("div", { staticClass: "v-clip", style: _vm.spinnerStyle })]
13757  )
13758}
13759var staticRenderFns = []
13760render._withStripped = true
13761
13762
13763
13764/***/ }),
13765
vendor: 3,357 bytes, lines 13766-13876
13766/***/ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js":
13767/*!********************************************************************!*\
13768  !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***!
13769  \********************************************************************/
13770/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
13771
13772"use strict";
13773__webpack_require__.r(__webpack_exports__);
13774/* harmony export */ __webpack_require__.d(__webpack_exports__, {
13775/* harmony export */   "default": () => (/* binding */ normalizeComponent)
13776/* harmony export */ });
13777/* globals __VUE_SSR_CONTEXT__ */
13778
13779// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
13780// This module is a runtime utility for cleaner component module output and will
13781// be included in the final webpack user bundle.
13782
13783function normalizeComponent(
13784  scriptExports,
13785  render,
13786  staticRenderFns,
13787  functionalTemplate,
13788  injectStyles,
13789  scopeId,
13790  moduleIdentifier /* server only */,
13791  shadowMode /* vue-cli only */
13792) {
13793  // Vue.extend constructor export interop
13794  var options =
13795    typeof scriptExports === 'function' ? scriptExports.options : scriptExports
13796
13797  // render functions
13798  if (render) {
13799    options.render = render
13800    options.staticRenderFns = staticRenderFns
13801    options._compiled = true
13802  }
13803
13804  // functional template
13805  if (functionalTemplate) {
13806    options.functional = true
13807  }
13808
13809  // scopedId
13810  if (scopeId) {
13811    options._scopeId = 'data-v-' + scopeId
13812  }
13813
13814  var hook
13815  if (moduleIdentifier) {
13816    // server build
13817    hook = function (context) {
13818      // 2.3 injection
13819      context =
13820        context || // cached call
13821        (this.$vnode && this.$vnode.ssrContext) || // stateful
13822        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
13823      // 2.2 with runInNewContext: true
13824      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
13825        context = __VUE_SSR_CONTEXT__
13826      }
13827      // inject component styles
13828      if (injectStyles) {
13829        injectStyles.call(this, context)
13830      }
13831      // register component module identifier for async chunk inferrence
13832      if (context && context._registeredComponents) {
13833        context._registeredComponents.add(moduleIdentifier)
13834      }
13835    }
13836    // used by ssr in case component is cached and beforeCreate
13837    // never gets called
13838    options._ssrRegister = hook
13839  } else if (injectStyles) {
13840    hook = shadowMode
13841      ? function () {
13842          injectStyles.call(
13843            this,
13844            (options.functional ? this.parent : this).$root.$options.shadowRoot
13845          )
13846        }
13847      : injectStyles
13848  }
13849
13850  if (hook) {
13851    if (options.functional) {
13852      // for template-only hot-reload because in that case the render fn doesn't
13853      // go through the normalizer
13854      options._injectStyles = hook
13855      // register for functional component in vue file
13856      var originalRender = options.render
13857      options.render = function renderWithStyleInjection(h, context) {
13858        hook.call(context)
13859        return originalRender(h, context)
13860      }
13861    } else {
13862      // inject component registration as beforeCreate hook
13863      var existing = options.beforeCreate
13864      options.beforeCreate = existing ? [].concat(existing, hook) : [hook]
13865    }
13866  }
13867
13868  return {
13869    exports: scriptExports,
13870    options: options
13871  }
13872}
13873
13874
13875/***/ }),
13876
vendor: 415,308 bytes, lines 13877-25820
13877/***/ "./node_modules/vue/dist/vue.esm.js":
13878/*!******************************************!*\
13879  !*** ./node_modules/vue/dist/vue.esm.js ***!
13880  \******************************************/
13881/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
13882
13883"use strict";
13884__webpack_require__.r(__webpack_exports__);
13885/* harmony export */ __webpack_require__.d(__webpack_exports__, {
13886/* harmony export */   EffectScope: () => (/* binding */ EffectScope),
13887/* harmony export */   computed: () => (/* binding */ computed),
13888/* harmony export */   customRef: () => (/* binding */ customRef),
13889/* harmony export */   "default": () => (/* binding */ Vue),
13890/* harmony export */   defineAsyncComponent: () => (/* binding */ defineAsyncComponent),
13891/* harmony export */   defineComponent: () => (/* binding */ defineComponent),
13892/* harmony export */   del: () => (/* binding */ del),
13893/* harmony export */   effectScope: () => (/* binding */ effectScope),
13894/* harmony export */   getCurrentInstance: () => (/* binding */ getCurrentInstance),
13895/* harmony export */   getCurrentScope: () => (/* binding */ getCurrentScope),
13896/* harmony export */   h: () => (/* binding */ h),
13897/* harmony export */   inject: () => (/* binding */ inject),
13898/* harmony export */   isProxy: () => (/* binding */ isProxy),
13899/* harmony export */   isReactive: () => (/* binding */ isReactive),
13900/* harmony export */   isReadonly: () => (/* binding */ isReadonly),
13901/* harmony export */   isRef: () => (/* binding */ isRef),
13902/* harmony export */   isShallow: () => (/* binding */ isShallow),
13903/* harmony export */   markRaw: () => (/* binding */ markRaw),
13904/* harmony export */   mergeDefaults: () => (/* binding */ mergeDefaults),
13905/* harmony export */   nextTick: () => (/* binding */ nextTick),
13906/* harmony export */   onActivated: () => (/* binding */ onActivated),
13907/* harmony export */   onBeforeMount: () => (/* binding */ onBeforeMount),
13908/* harmony export */   onBeforeUnmount: () => (/* binding */ onBeforeUnmount),
13909/* harmony export */   onBeforeUpdate: () => (/* binding */ onBeforeUpdate),
13910/* harmony export */   onDeactivated: () => (/* binding */ onDeactivated),
13911/* harmony export */   onErrorCaptured: () => (/* binding */ onErrorCaptured),
13912/* harmony export */   onMounted: () => (/* binding */ onMounted),
13913/* harmony export */   onRenderTracked: () => (/* binding */ onRenderTracked),
13914/* harmony export */   onRenderTriggered: () => (/* binding */ onRenderTriggered),
13915/* harmony export */   onScopeDispose: () => (/* binding */ onScopeDispose),
13916/* harmony export */   onServerPrefetch: () => (/* binding */ onServerPrefetch),
13917/* harmony export */   onUnmounted: () => (/* binding */ onUnmounted),
13918/* harmony export */   onUpdated: () => (/* binding */ onUpdated),
13919/* harmony export */   provide: () => (/* binding */ provide),
13920/* harmony export */   proxyRefs: () => (/* binding */ proxyRefs),
13921/* harmony export */   reactive: () => (/* binding */ reactive),
13922/* harmony export */   readonly: () => (/* binding */ readonly),
13923/* harmony export */   ref: () => (/* binding */ ref$1),
13924/* harmony export */   set: () => (/* binding */ set),
13925/* harmony export */   shallowReactive: () => (/* binding */ shallowReactive),
13926/* harmony export */   shallowReadonly: () => (/* binding */ shallowReadonly),
13927/* harmony export */   shallowRef: () => (/* binding */ shallowRef),
13928/* harmony export */   toRaw: () => (/* binding */ toRaw),
13929/* harmony export */   toRef: () => (/* binding */ toRef),
13930/* harmony export */   toRefs: () => (/* binding */ toRefs),
13931/* harmony export */   triggerRef: () => (/* binding */ triggerRef),
13932/* harmony export */   unref: () => (/* binding */ unref),
13933/* harmony export */   useAttrs: () => (/* binding */ useAttrs),
13934/* harmony export */   useCssModule: () => (/* binding */ useCssModule),
13935/* harmony export */   useCssVars: () => (/* binding */ useCssVars),
13936/* harmony export */   useListeners: () => (/* binding */ useListeners),
13937/* harmony export */   useSlots: () => (/* binding */ useSlots),
13938/* harmony export */   version: () => (/* binding */ version),
13939/* harmony export */   watch: () => (/* binding */ watch),
13940/* harmony export */   watchEffect: () => (/* binding */ watchEffect),
13941/* harmony export */   watchPostEffect: () => (/* binding */ watchPostEffect),
13942/* harmony export */   watchSyncEffect: () => (/* binding */ watchSyncEffect)
13943/* harmony export */ });
13944/*!
13945 * Vue.js v2.7.15
13946 * (c) 2014-2023 Evan You
13947 * Released under the MIT License.
13948 */
13949var emptyObject = Object.freeze({});
13950var isArray = Array.isArray;
13951// These helpers produce better VM code in JS engines due to their
13952// explicitness and function inlining.
13953function isUndef(v) {
13954    return v === undefined || v === null;
13955}
13956function isDef(v) {
13957    return v !== undefined && v !== null;
13958}
13959function isTrue(v) {
13960    return v === true;
13961}
13962function isFalse(v) {
13963    return v === false;
13964}
13965/**
13966 * Check if value is primitive.
13967 */
13968function isPrimitive(value) {
13969    return (typeof value === 'string' ||
13970        typeof value === 'number' ||
13971        // $flow-disable-line
13972        typeof value === 'symbol' ||
13973        typeof value === 'boolean');
13974}
13975function isFunction(value) {
13976    return typeof value === 'function';
13977}
13978/**
13979 * Quick object check - this is primarily used to tell
13980 * objects from primitive values when we know the value
13981 * is a JSON-compliant type.
13982 */
13983function isObject(obj) {
13984    return obj !== null && typeof obj === 'object';
13985}
13986/**
13987 * Get the raw type string of a value, e.g., [object Object].
13988 */
13989var _toString = Object.prototype.toString;
13990function toRawType(value) {
13991    return _toString.call(value).slice(8, -1);
13992}
13993/**
13994 * Strict object type check. Only returns true
13995 * for plain JavaScript objects.
13996 */
13997function isPlainObject(obj) {
13998    return _toString.call(obj) === '[object Object]';
13999}
14000function isRegExp(v) {
14001    return _toString.call(v) === '[object RegExp]';
14002}
14003/**
14004 * Check if val is a valid array index.
14005 */
14006function isValidArrayIndex(val) {
14007    var n = parseFloat(String(val));
14008    return n >= 0 && Math.floor(n) === n && isFinite(val);
14009}
14010function isPromise(val) {
14011    return (isDef(val) &&
14012        typeof val.then === 'function' &&
14013        typeof val.catch === 'function');
14014}
14015/**
14016 * Convert a value to a string that is actually rendered.
14017 */
14018function toString(val) {
14019    return val == null
14020        ? ''
14021        : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)
14022            ? JSON.stringify(val, null, 2)
14023            : String(val);
14024}
14025/**
14026 * Convert an input value to a number for persistence.
14027 * If the conversion fails, return original string.
14028 */
14029function toNumber(val) {
14030    var n = parseFloat(val);
14031    return isNaN(n) ? val : n;
14032}
14033/**
14034 * Make a map and return a function for checking if a key
14035 * is in that map.
14036 */
14037function makeMap(str, expectsLowerCase) {
14038    var map = Object.create(null);
14039    var list = str.split(',');
14040    for (var i = 0; i < list.length; i++) {
14041        map[list[i]] = true;
14042    }
14043    return expectsLowerCase ? function (val) { return map[val.toLowerCase()]; } : function (val) { return map[val]; };
14044}
14045/**
14046 * Check if a tag is a built-in tag.
14047 */
14048var isBuiltInTag = makeMap('slot,component', true);
14049/**
14050 * Check if an attribute is a reserved attribute.
14051 */
14052var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');
14053/**
14054 * Remove an item from an array.
14055 */
14056function remove$2(arr, item) {
14057    var len = arr.length;
14058    if (len) {
14059        // fast path for the only / last item
14060        if (item === arr[len - 1]) {
14061            arr.length = len - 1;
14062            return;
14063        }
14064        var index = arr.indexOf(item);
14065        if (index > -1) {
14066            return arr.splice(index, 1);
14067        }
14068    }
14069}
14070/**
14071 * Check whether an object has the property.
14072 */
14073var hasOwnProperty = Object.prototype.hasOwnProperty;
14074function hasOwn(obj, key) {
14075    return hasOwnProperty.call(obj, key);
14076}
14077/**
14078 * Create a cached version of a pure function.
14079 */
14080function cached(fn) {
14081    var cache = Object.create(null);
14082    return function cachedFn(str) {
14083        var hit = cache[str];
14084        return hit || (cache[str] = fn(str));
14085    };
14086}
14087/**
14088 * Camelize a hyphen-delimited string.
14089 */
14090var camelizeRE = /-(\w)/g;
14091var camelize = cached(function (str) {
14092    return str.replace(camelizeRE, function (_, c) { return (c ? c.toUpperCase() : ''); });
14093});
14094/**
14095 * Capitalize a string.
14096 */
14097var capitalize = cached(function (str) {
14098    return str.charAt(0).toUpperCase() + str.slice(1);
14099});
14100/**
14101 * Hyphenate a camelCase string.
14102 */
14103var hyphenateRE = /\B([A-Z])/g;
14104var hyphenate = cached(function (str) {
14105    return str.replace(hyphenateRE, '-$1').toLowerCase();
14106});
14107/**
14108 * Simple bind polyfill for environments that do not support it,
14109 * e.g., PhantomJS 1.x. Technically, we don't need this anymore
14110 * since native bind is now performant enough in most browsers.
14111 * But removing it would mean breaking code that was able to run in
14112 * PhantomJS 1.x, so this must be kept for backward compatibility.
14113 */
14114/* istanbul ignore next */
14115function polyfillBind(fn, ctx) {
14116    function boundFn(a) {
14117        var l = arguments.length;
14118        return l
14119            ? l > 1
14120                ? fn.apply(ctx, arguments)
14121                : fn.call(ctx, a)
14122            : fn.call(ctx);
14123    }
14124    boundFn._length = fn.length;
14125    return boundFn;
14126}
14127function nativeBind(fn, ctx) {
14128    return fn.bind(ctx);
14129}
14130// @ts-expect-error bind cannot be `undefined`
14131var bind$1 = Function.prototype.bind ? nativeBind : polyfillBind;
14132/**
14133 * Convert an Array-like object to a real Array.
14134 */
14135function toArray(list, start) {
14136    start = start || 0;
14137    var i = list.length - start;
14138    var ret = new Array(i);
14139    while (i--) {
14140        ret[i] = list[i + start];
14141    }
14142    return ret;
14143}
14144/**
14145 * Mix properties into target object.
14146 */
14147function extend(to, _from) {
14148    for (var key in _from) {
14149        to[key] = _from[key];
14150    }
14151    return to;
14152}
14153/**
14154 * Merge an Array of Objects into a single Object.
14155 */
14156function toObject(arr) {
14157    var res = {};
14158    for (var i = 0; i < arr.length; i++) {
14159        if (arr[i]) {
14160            extend(res, arr[i]);
14161        }
14162    }
14163    return res;
14164}
14165/* eslint-disable no-unused-vars */
14166/**
14167 * Perform no operation.
14168 * Stubbing args to make Flow happy without leaving useless transpiled code
14169 * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).
14170 */
14171function noop(a, b, c) { }
14172/**
14173 * Always return false.
14174 */
14175var no = function (a, b, c) { return false; };
14176/* eslint-enable no-unused-vars */
14177/**
14178 * Return the same value.
14179 */
14180var identity = function (_) { return _; };
14181/**
14182 * Generate a string containing static keys from compiler modules.
14183 */
14184function genStaticKeys$1(modules) {
14185    return modules
14186        .reduce(function (keys, m) { return keys.concat(m.staticKeys || []); }, [])
14187        .join(',');
14188}
14189/**
14190 * Check if two values are loosely equal - that is,
14191 * if they are plain objects, do they have the same shape?
14192 */
14193function looseEqual(a, b) {
14194    if (a === b)
14195        return true;
14196    var isObjectA = isObject(a);
14197    var isObjectB = isObject(b);
14198    if (isObjectA && isObjectB) {
14199        try {
14200            var isArrayA = Array.isArray(a);
14201            var isArrayB = Array.isArray(b);
14202            if (isArrayA && isArrayB) {
14203                return (a.length === b.length &&
14204                    a.every(function (e, i) {
14205                        return looseEqual(e, b[i]);
14206                    }));
14207            }
14208            else if (a instanceof Date && b instanceof Date) {
14209                return a.getTime() === b.getTime();
14210            }
14211            else if (!isArrayA && !isArrayB) {
14212                var keysA = Object.keys(a);
14213                var keysB = Object.keys(b);
14214                return (keysA.length === keysB.length &&
14215                    keysA.every(function (key) {
14216                        return looseEqual(a[key], b[key]);
14217                    }));
14218            }
14219            else {
14220                /* istanbul ignore next */
14221                return false;
14222            }
14223        }
14224        catch (e) {
14225            /* istanbul ignore next */
14226            return false;
14227        }
14228    }
14229    else if (!isObjectA && !isObjectB) {
14230        return String(a) === String(b);
14231    }
14232    else {
14233        return false;
14234    }
14235}
14236/**
14237 * Return the first index at which a loosely equal value can be
14238 * found in the array (if value is a plain object, the array must
14239 * contain an object of the same shape), or -1 if it is not present.
14240 */
14241function looseIndexOf(arr, val) {
14242    for (var i = 0; i < arr.length; i++) {
14243        if (looseEqual(arr[i], val))
14244            return i;
14245    }
14246    return -1;
14247}
14248/**
14249 * Ensure a function is called only once.
14250 */
14251function once(fn) {
14252    var called = false;
14253    return function () {
14254        if (!called) {
14255            called = true;
14256            fn.apply(this, arguments);
14257        }
14258    };
14259}
14260// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#polyfill
14261function hasChanged(x, y) {
14262    if (x === y) {
14263        return x === 0 && 1 / x !== 1 / y;
14264    }
14265    else {
14266        return x === x || y === y;
14267    }
14268}
14269
14270var SSR_ATTR = 'data-server-rendered';
14271var ASSET_TYPES = ['component', 'directive', 'filter'];
14272var LIFECYCLE_HOOKS = [
14273    'beforeCreate',
14274    'created',
14275    'beforeMount',
14276    'mounted',
14277    'beforeUpdate',
14278    'updated',
14279    'beforeDestroy',
14280    'destroyed',
14281    'activated',
14282    'deactivated',
14283    'errorCaptured',
14284    'serverPrefetch',
14285    'renderTracked',
14286    'renderTriggered'
14287];
14288
14289var config = {
14290    /**
14291     * Option merge strategies (used in core/util/options)
14292     */
14293    // $flow-disable-line
14294    optionMergeStrategies: Object.create(null),
14295    /**
14296     * Whether to suppress warnings.
14297     */
14298    silent: false,
14299    /**
14300     * Show production mode tip message on boot?
14301     */
14302    productionTip: "development" !== 'production',
14303    /**
14304     * Whether to enable devtools
14305     */
14306    devtools: "development" !== 'production',
14307    /**
14308     * Whether to record perf
14309     */
14310    performance: false,
14311    /**
14312     * Error handler for watcher errors
14313     */
14314    errorHandler: null,
14315    /**
14316     * Warn handler for watcher warns
14317     */
14318    warnHandler: null,
14319    /**
14320     * Ignore certain custom elements
14321     */
14322    ignoredElements: [],
14323    /**
14324     * Custom user key aliases for v-on
14325     */
14326    // $flow-disable-line
14327    keyCodes: Object.create(null),
14328    /**
14329     * Check if a tag is reserved so that it cannot be registered as a
14330     * component. This is platform-dependent and may be overwritten.
14331     */
14332    isReservedTag: no,
14333    /**
14334     * Check if an attribute is reserved so that it cannot be used as a component
14335     * prop. This is platform-dependent and may be overwritten.
14336     */
14337    isReservedAttr: no,
14338    /**
14339     * Check if a tag is an unknown element.
14340     * Platform-dependent.
14341     */
14342    isUnknownElement: no,
14343    /**
14344     * Get the namespace of an element
14345     */
14346    getTagNamespace: noop,
14347    /**
14348     * Parse the real tag name for the specific platform.
14349     */
14350    parsePlatformTagName: identity,
14351    /**
14352     * Check if an attribute must be bound using property, e.g. value
14353     * Platform-dependent.
14354     */
14355    mustUseProp: no,
14356    /**
14357     * Perform updates asynchronously. Intended to be used by Vue Test Utils
14358     * This will significantly reduce performance if set to false.
14359     */
14360    async: true,
14361    /**
14362     * Exposed for legacy reasons
14363     */
14364    _lifecycleHooks: LIFECYCLE_HOOKS
14365};
14366
14367/**
14368 * unicode letters used for parsing html tags, component names and property paths.
14369 * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname
14370 * skipping \u10000-\uEFFFF due to it freezing up PhantomJS
14371 */
14372var unicodeRegExp = /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;
14373/**
14374 * Check if a string starts with $ or _
14375 */
14376function isReserved(str) {
14377    var c = (str + '').charCodeAt(0);
14378    return c === 0x24 || c === 0x5f;
14379}
14380/**
14381 * Define a property.
14382 */
14383function def(obj, key, val, enumerable) {
14384    Object.defineProperty(obj, key, {
14385        value: val,
14386        enumerable: !!enumerable,
14387        writable: true,
14388        configurable: true
14389    });
14390}
14391/**
14392 * Parse simple path.
14393 */
14394var bailRE = new RegExp("[^".concat(unicodeRegExp.source, ".$_\\d]"));
14395function parsePath(path) {
14396    if (bailRE.test(path)) {
14397        return;
14398    }
14399    var segments = path.split('.');
14400    return function (obj) {
14401        for (var i = 0; i < segments.length; i++) {
14402            if (!obj)
14403                return;
14404            obj = obj[segments[i]];
14405        }
14406        return obj;
14407    };
14408}
14409
14410// can we use __proto__?
14411var hasProto = '__proto__' in {};
14412// Browser environment sniffing
14413var inBrowser = typeof window !== 'undefined';
14414var UA = inBrowser && window.navigator.userAgent.toLowerCase();
14415var isIE = UA && /msie|trident/.test(UA);
14416var isIE9 = UA && UA.indexOf('msie 9.0') > 0;
14417var isEdge = UA && UA.indexOf('edge/') > 0;
14418UA && UA.indexOf('android') > 0;
14419var isIOS = UA && /iphone|ipad|ipod|ios/.test(UA);
14420UA && /chrome\/\d+/.test(UA) && !isEdge;
14421UA && /phantomjs/.test(UA);
14422var isFF = UA && UA.match(/firefox\/(\d+)/);
14423// Firefox has a "watch" function on Object.prototype...
14424// @ts-expect-error firebox support
14425var nativeWatch = {}.watch;
14426var supportsPassive = false;
14427if (inBrowser) {
14428    try {
14429        var opts = {};
14430        Object.defineProperty(opts, 'passive', {
14431            get: function () {
14432                /* istanbul ignore next */
14433                supportsPassive = true;
14434            }
14435        }); // https://github.com/facebook/flow/issues/285
14436        window.addEventListener('test-passive', null, opts);
14437    }
14438    catch (e) { }
14439}
14440// this needs to be lazy-evaled because vue may be required before
14441// vue-server-renderer can set VUE_ENV
14442var _isServer;
14443var isServerRendering = function () {
14444    if (_isServer === undefined) {
14445        /* istanbul ignore if */
14446        if (!inBrowser && typeof __webpack_require__.g !== 'undefined') {
14447            // detect presence of vue-server-renderer and avoid
14448            // Webpack shimming the process
14449            _isServer =
14450                __webpack_require__.g['process'] && __webpack_require__.g['process'].env.VUE_ENV === 'server';
14451        }
14452        else {
14453            _isServer = false;
14454        }
14455    }
14456    return _isServer;
14457};
14458// detect devtools
14459var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
14460/* istanbul ignore next */
14461function isNative(Ctor) {
14462    return typeof Ctor === 'function' && /native code/.test(Ctor.toString());
14463}
14464var hasSymbol = typeof Symbol !== 'undefined' &&
14465    isNative(Symbol) &&
14466    typeof Reflect !== 'undefined' &&
14467    isNative(Reflect.ownKeys);
14468var _Set; // $flow-disable-line
14469/* istanbul ignore if */ if (typeof Set !== 'undefined' && isNative(Set)) {
14470    // use native Set when available.
14471    _Set = Set;
14472}
14473else {
14474    // a non-standard Set polyfill that only works with primitive keys.
14475    _Set = /** @class */ (function () {
14476        function Set() {
14477            this.set = Object.create(null);
14478        }
14479        Set.prototype.has = function (key) {
14480            return this.set[key] === true;
14481        };
14482        Set.prototype.add = function (key) {
14483            this.set[key] = true;
14484        };
14485        Set.prototype.clear = function () {
14486            this.set = Object.create(null);
14487        };
14488        return Set;
14489    }());
14490}
14491
14492var currentInstance = null;
14493/**
14494 * This is exposed for compatibility with v3 (e.g. some functions in VueUse
14495 * relies on it). Do not use this internally, just use `currentInstance`.
14496 *
14497 * @internal this function needs manual type declaration because it relies
14498 * on previously manually authored types from Vue 2
14499 */
14500function getCurrentInstance() {
14501    return currentInstance && { proxy: currentInstance };
14502}
14503/**
14504 * @internal
14505 */
14506function setCurrentInstance(vm) {
14507    if (vm === void 0) { vm = null; }
14508    if (!vm)
14509        currentInstance && currentInstance._scope.off();
14510    currentInstance = vm;
14511    vm && vm._scope.on();
14512}
14513
14514/**
14515 * @internal
14516 */
14517var VNode = /** @class */ (function () {
14518    function VNode(tag, data, children, text, elm, context, componentOptions, asyncFactory) {
14519        this.tag = tag;
14520        this.data = data;
14521        this.children = children;
14522        this.text = text;
14523        this.elm = elm;
14524        this.ns = undefined;
14525        this.context = context;
14526        this.fnContext = undefined;
14527        this.fnOptions = undefined;
14528        this.fnScopeId = undefined;
14529        this.key = data && data.key;
14530        this.componentOptions = componentOptions;
14531        this.componentInstance = undefined;
14532        this.parent = undefined;
14533        this.raw = false;
14534        this.isStatic = false;
14535        this.isRootInsert = true;
14536        this.isComment = false;
14537        this.isCloned = false;
14538        this.isOnce = false;
14539        this.asyncFactory = asyncFactory;
14540        this.asyncMeta = undefined;
14541        this.isAsyncPlaceholder = false;
14542    }
14543    Object.defineProperty(VNode.prototype, "child", {
14544        // DEPRECATED: alias for componentInstance for backwards compat.
14545        /* istanbul ignore next */
14546        get: function () {
14547            return this.componentInstance;
14548        },
14549        enumerable: false,
14550        configurable: true
14551    });
14552    return VNode;
14553}());
14554var createEmptyVNode = function (text) {
14555    if (text === void 0) { text = ''; }
14556    var node = new VNode();
14557    node.text = text;
14558    node.isComment = true;
14559    return node;
14560};
14561function createTextVNode(val) {
14562    return new VNode(undefined, undefined, undefined, String(val));
14563}
14564// optimized shallow clone
14565// used for static nodes and slot nodes because they may be reused across
14566// multiple renders, cloning them avoids errors when DOM manipulations rely
14567// on their elm reference.
14568function cloneVNode(vnode) {
14569    var cloned = new VNode(vnode.tag, vnode.data, 
14570    // #7975
14571    // clone children array to avoid mutating original in case of cloning
14572    // a child.
14573    vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory);
14574    cloned.ns = vnode.ns;
14575    cloned.isStatic = vnode.isStatic;
14576    cloned.key = vnode.key;
14577    cloned.isComment = vnode.isComment;
14578    cloned.fnContext = vnode.fnContext;
14579    cloned.fnOptions = vnode.fnOptions;
14580    cloned.fnScopeId = vnode.fnScopeId;
14581    cloned.asyncMeta = vnode.asyncMeta;
14582    cloned.isCloned = true;
14583    return cloned;
14584}
14585
14586/* not type checking this file because flow doesn't play well with Proxy */
14587var initProxy;
14588if (true) {
14589    var allowedGlobals_1 = makeMap('Infinity,undefined,NaN,isFinite,isNaN,' +
14590        'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
14591        'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,' +
14592        'require' // for Webpack/Browserify
14593    );
14594    var warnNonPresent_1 = function (target, key) {
14595        warn$2("Property or method \"".concat(key, "\" is not defined on the instance but ") +
14596            'referenced during render. Make sure that this property is reactive, ' +
14597            'either in the data option, or for class-based components, by ' +
14598            'initializing the property. ' +
14599            'See: https://v2.vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.', target);
14600    };
14601    var warnReservedPrefix_1 = function (target, key) {
14602        warn$2("Property \"".concat(key, "\" must be accessed with \"$data.").concat(key, "\" because ") +
14603            'properties starting with "$" or "_" are not proxied in the Vue instance to ' +
14604            'prevent conflicts with Vue internals. ' +
14605            'See: https://v2.vuejs.org/v2/api/#data', target);
14606    };
14607    var hasProxy_1 = typeof Proxy !== 'undefined' && isNative(Proxy);
14608    if (hasProxy_1) {
14609        var isBuiltInModifier_1 = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');
14610        config.keyCodes = new Proxy(config.keyCodes, {
14611            set: function (target, key, value) {
14612                if (isBuiltInModifier_1(key)) {
14613                    warn$2("Avoid overwriting built-in modifier in config.keyCodes: .".concat(key));
14614                    return false;
14615                }
14616                else {
14617                    target[key] = value;
14618                    return true;
14619                }
14620            }
14621        });
14622    }
14623    var hasHandler_1 = {
14624        has: function (target, key) {
14625            var has = key in target;
14626            var isAllowed = allowedGlobals_1(key) ||
14627                (typeof key === 'string' &&
14628                    key.charAt(0) === '_' &&
14629                    !(key in target.$data));
14630            if (!has && !isAllowed) {
14631                if (key in target.$data)
14632                    warnReservedPrefix_1(target, key);
14633                else
14634                    warnNonPresent_1(target, key);
14635            }
14636            return has || !isAllowed;
14637        }
14638    };
14639    var getHandler_1 = {
14640        get: function (target, key) {
14641            if (typeof key === 'string' && !(key in target)) {
14642                if (key in target.$data)
14643                    warnReservedPrefix_1(target, key);
14644                else
14645                    warnNonPresent_1(target, key);
14646            }
14647            return target[key];
14648        }
14649    };
14650    initProxy = function initProxy(vm) {
14651        if (hasProxy_1) {
14652            // determine which proxy handler to use
14653            var options = vm.$options;
14654            var handlers = options.render && options.render._withStripped ? getHandler_1 : hasHandler_1;
14655            vm._renderProxy = new Proxy(vm, handlers);
14656        }
14657        else {
14658            vm._renderProxy = vm;
14659        }
14660    };
14661}
14662
14663/******************************************************************************
14664Copyright (c) Microsoft Corporation.
14665
14666Permission to use, copy, modify, and/or distribute this software for any
14667purpose with or without fee is hereby granted.
14668
14669THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
14670REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
14671AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
14672INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
14673LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
14674OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
14675PERFORMANCE OF THIS SOFTWARE.
14676***************************************************************************** */
14677
14678var __assign = function() {
14679    __assign = Object.assign || function __assign(t) {
14680        for (var s, i = 1, n = arguments.length; i < n; i++) {
14681            s = arguments[i];
14682            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
14683        }
14684        return t;
14685    };
14686    return __assign.apply(this, arguments);
14687};
14688
14689var uid$2 = 0;
14690var pendingCleanupDeps = [];
14691var cleanupDeps = function () {
14692    for (var i = 0; i < pendingCleanupDeps.length; i++) {
14693        var dep = pendingCleanupDeps[i];
14694        dep.subs = dep.subs.filter(function (s) { return s; });
14695        dep._pending = false;
14696    }
14697    pendingCleanupDeps.length = 0;
14698};
14699/**
14700 * A dep is an observable that can have multiple
14701 * directives subscribing to it.
14702 * @internal
14703 */
14704var Dep = /** @class */ (function () {
14705    function Dep() {
14706        // pending subs cleanup
14707        this._pending = false;
14708        this.id = uid$2++;
14709        this.subs = [];
14710    }
14711    Dep.prototype.addSub = function (sub) {
14712        this.subs.push(sub);
14713    };
14714    Dep.prototype.removeSub = function (sub) {
14715        // #12696 deps with massive amount of subscribers are extremely slow to
14716        // clean up in Chromium
14717        // to workaround this, we unset the sub for now, and clear them on
14718        // next scheduler flush.
14719        this.subs[this.subs.indexOf(sub)] = null;
14720        if (!this._pending) {
14721            this._pending = true;
14722            pendingCleanupDeps.push(this);
14723        }
14724    };
14725    Dep.prototype.depend = function (info) {
14726        if (Dep.target) {
14727            Dep.target.addDep(this);
14728            if ( true && info && Dep.target.onTrack) {
14729                Dep.target.onTrack(__assign({ effect: Dep.target }, info));
14730            }
14731        }
14732    };
14733    Dep.prototype.notify = function (info) {
14734        // stabilize the subscriber list first
14735        var subs = this.subs.filter(function (s) { return s; });
14736        if ( true && !config.async) {
14737            // subs aren't sorted in scheduler if not running async
14738            // we need to sort them now to make sure they fire in correct
14739            // order
14740            subs.sort(function (a, b) { return a.id - b.id; });
14741        }
14742        for (var i = 0, l = subs.length; i < l; i++) {
14743            var sub = subs[i];
14744            if ( true && info) {
14745                sub.onTrigger &&
14746                    sub.onTrigger(__assign({ effect: subs[i] }, info));
14747            }
14748            sub.update();
14749        }
14750    };
14751    return Dep;
14752}());
14753// The current target watcher being evaluated.
14754// This is globally unique because only one watcher
14755// can be evaluated at a time.
14756Dep.target = null;
14757var targetStack = [];
14758function pushTarget(target) {
14759    targetStack.push(target);
14760    Dep.target = target;
14761}
14762function popTarget() {
14763    targetStack.pop();
14764    Dep.target = targetStack[targetStack.length - 1];
14765}
14766
14767/*
14768 * not type checking this file because flow doesn't play well with
14769 * dynamically accessing methods on Array prototype
14770 */
14771var arrayProto = Array.prototype;
14772var arrayMethods = Object.create(arrayProto);
14773var methodsToPatch = [
14774    'push',
14775    'pop',
14776    'shift',
14777    'unshift',
14778    'splice',
14779    'sort',
14780    'reverse'
14781];
14782/**
14783 * Intercept mutating methods and emit events
14784 */
14785methodsToPatch.forEach(function (method) {
14786    // cache original method
14787    var original = arrayProto[method];
14788    def(arrayMethods, method, function mutator() {
14789        var args = [];
14790        for (var _i = 0; _i < arguments.length; _i++) {
14791            args[_i] = arguments[_i];
14792        }
14793        var result = original.apply(this, args);
14794        var ob = this.__ob__;
14795        var inserted;
14796        switch (method) {
14797            case 'push':
14798            case 'unshift':
14799                inserted = args;
14800                break;
14801            case 'splice':
14802                inserted = args.slice(2);
14803                break;
14804        }
14805        if (inserted)
14806            ob.observeArray(inserted);
14807        // notify change
14808        if (true) {
14809            ob.dep.notify({
14810                type: "array mutation" /* TriggerOpTypes.ARRAY_MUTATION */,
14811                target: this,
14812                key: method
14813            });
14814        }
14815        else {}
14816        return result;
14817    });
14818});
14819
14820var arrayKeys = Object.getOwnPropertyNames(arrayMethods);
14821var NO_INITIAL_VALUE = {};
14822/**
14823 * In some cases we may want to disable observation inside a component's
14824 * update computation.
14825 */
14826var shouldObserve = true;
14827function toggleObserving(value) {
14828    shouldObserve = value;
14829}
14830// ssr mock dep
14831var mockDep = {
14832    notify: noop,
14833    depend: noop,
14834    addSub: noop,
14835    removeSub: noop
14836};
14837/**
14838 * Observer class that is attached to each observed
14839 * object. Once attached, the observer converts the target
14840 * object's property keys into getter/setters that
14841 * collect dependencies and dispatch updates.
14842 */
14843var Observer = /** @class */ (function () {
14844    function Observer(value, shallow, mock) {
14845        if (shallow === void 0) { shallow = false; }
14846        if (mock === void 0) { mock = false; }
14847        this.value = value;
14848        this.shallow = shallow;
14849        this.mock = mock;
14850        // this.value = value
14851        this.dep = mock ? mockDep : new Dep();
14852        this.vmCount = 0;
14853        def(value, '__ob__', this);
14854        if (isArray(value)) {
14855            if (!mock) {
14856                if (hasProto) {
14857                    value.__proto__ = arrayMethods;
14858                    /* eslint-enable no-proto */
14859                }
14860                else {
14861                    for (var i = 0, l = arrayKeys.length; i < l; i++) {
14862                        var key = arrayKeys[i];
14863                        def(value, key, arrayMethods[key]);
14864                    }
14865                }
14866            }
14867            if (!shallow) {
14868                this.observeArray(value);
14869            }
14870        }
14871        else {
14872            /**
14873             * Walk through all properties and convert them into
14874             * getter/setters. This method should only be called when
14875             * value type is Object.
14876             */
14877            var keys = Object.keys(value);
14878            for (var i = 0; i < keys.length; i++) {
14879                var key = keys[i];
14880                defineReactive(value, key, NO_INITIAL_VALUE, undefined, shallow, mock);
14881            }
14882        }
14883    }
14884    /**
14885     * Observe a list of Array items.
14886     */
14887    Observer.prototype.observeArray = function (value) {
14888        for (var i = 0, l = value.length; i < l; i++) {
14889            observe(value[i], false, this.mock);
14890        }
14891    };
14892    return Observer;
14893}());
14894// helpers
14895/**
14896 * Attempt to create an observer instance for a value,
14897 * returns the new observer if successfully observed,
14898 * or the existing observer if the value already has one.
14899 */
14900function observe(value, shallow, ssrMockReactivity) {
14901    if (value && hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {
14902        return value.__ob__;
14903    }
14904    if (shouldObserve &&
14905        (ssrMockReactivity || !isServerRendering()) &&
14906        (isArray(value) || isPlainObject(value)) &&
14907        Object.isExtensible(value) &&
14908        !value.__v_skip /* ReactiveFlags.SKIP */ &&
14909        !isRef(value) &&
14910        !(value instanceof VNode)) {
14911        return new Observer(value, shallow, ssrMockReactivity);
14912    }
14913}
14914/**
14915 * Define a reactive property on an Object.
14916 */
14917function defineReactive(obj, key, val, customSetter, shallow, mock) {
14918    var dep = new Dep();
14919    var property = Object.getOwnPropertyDescriptor(obj, key);
14920    if (property && property.configurable === false) {
14921        return;
14922    }
14923    // cater for pre-defined getter/setters
14924    var getter = property && property.get;
14925    var setter = property && property.set;
14926    if ((!getter || setter) &&
14927        (val === NO_INITIAL_VALUE || arguments.length === 2)) {
14928        val = obj[key];
14929    }
14930    var childOb = !shallow && observe(val, false, mock);
14931    Object.defineProperty(obj, key, {
14932        enumerable: true,
14933        configurable: true,
14934        get: function reactiveGetter() {
14935            var value = getter ? getter.call(obj) : val;
14936            if (Dep.target) {
14937                if (true) {
14938                    dep.depend({
14939                        target: obj,
14940                        type: "get" /* TrackOpTypes.GET */,
14941                        key: key
14942                    });
14943                }
14944                else {}
14945                if (childOb) {
14946                    childOb.dep.depend();
14947                    if (isArray(value)) {
14948                        dependArray(value);
14949                    }
14950                }
14951            }
14952            return isRef(value) && !shallow ? value.value : value;
14953        },
14954        set: function reactiveSetter(newVal) {
14955            var value = getter ? getter.call(obj) : val;
14956            if (!hasChanged(value, newVal)) {
14957                return;
14958            }
14959            if ( true && customSetter) {
14960                customSetter();
14961            }
14962            if (setter) {
14963                setter.call(obj, newVal);
14964            }
14965            else if (getter) {
14966                // #7981: for accessor properties without setter
14967                return;
14968            }
14969            else if (!shallow && isRef(value) && !isRef(newVal)) {
14970                value.value = newVal;
14971                return;
14972            }
14973            else {
14974                val = newVal;
14975            }
14976            childOb = !shallow && observe(newVal, false, mock);
14977            if (true) {
14978                dep.notify({
14979                    type: "set" /* TriggerOpTypes.SET */,
14980                    target: obj,
14981                    key: key,
14982                    newValue: newVal,
14983                    oldValue: value
14984                });
14985            }
14986            else {}
14987        }
14988    });
14989    return dep;
14990}
14991function set(target, key, val) {
14992    if ( true && (isUndef(target) || isPrimitive(target))) {
14993        warn$2("Cannot set reactive property on undefined, null, or primitive value: ".concat(target));
14994    }
14995    if (isReadonly(target)) {
14996         true && warn$2("Set operation on key \"".concat(key, "\" failed: target is readonly."));
14997        return;
14998    }
14999    var ob = target.__ob__;
15000    if (isArray(target) && isValidArrayIndex(key)) {
15001        target.length = Math.max(target.length, key);
15002        target.splice(key, 1, val);
15003        // when mocking for SSR, array methods are not hijacked
15004        if (ob && !ob.shallow && ob.mock) {
15005            observe(val, false, true);
15006        }
15007        return val;
15008    }
15009    if (key in target && !(key in Object.prototype)) {
15010        target[key] = val;
15011        return val;
15012    }
15013    if (target._isVue || (ob && ob.vmCount)) {
15014         true &&
15015            warn$2('Avoid adding reactive properties to a Vue instance or its root $data ' +
15016                'at runtime - declare it upfront in the data option.');
15017        return val;
15018    }
15019    if (!ob) {
15020        target[key] = val;
15021        return val;
15022    }
15023    defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock);
15024    if (true) {
15025        ob.dep.notify({
15026            type: "add" /* TriggerOpTypes.ADD */,
15027            target: target,
15028            key: key,
15029            newValue: val,
15030            oldValue: undefined
15031        });
15032    }
15033    else {}
15034    return val;
15035}
15036function del(target, key) {
15037    if ( true && (isUndef(target) || isPrimitive(target))) {
15038        warn$2("Cannot delete reactive property on undefined, null, or primitive value: ".concat(target));
15039    }
15040    if (isArray(target) && isValidArrayIndex(key)) {
15041        target.splice(key, 1);
15042        return;
15043    }
15044    var ob = target.__ob__;
15045    if (target._isVue || (ob && ob.vmCount)) {
15046         true &&
15047            warn$2('Avoid deleting properties on a Vue instance or its root $data ' +
15048                '- just set it to null.');
15049        return;
15050    }
15051    if (isReadonly(target)) {
15052         true &&
15053            warn$2("Delete operation on key \"".concat(key, "\" failed: target is readonly."));
15054        return;
15055    }
15056    if (!hasOwn(target, key)) {
15057        return;
15058    }
15059    delete target[key];
15060    if (!ob) {
15061        return;
15062    }
15063    if (true) {
15064        ob.dep.notify({
15065            type: "delete" /* TriggerOpTypes.DELETE */,
15066            target: target,
15067            key: key
15068        });
15069    }
15070    else {}
15071}
15072/**
15073 * Collect dependencies on array elements when the array is touched, since
15074 * we cannot intercept array element access like property getters.
15075 */
15076function dependArray(value) {
15077    for (var e = void 0, i = 0, l = value.length; i < l; i++) {
15078        e = value[i];
15079        if (e && e.__ob__) {
15080            e.__ob__.dep.depend();
15081        }
15082        if (isArray(e)) {
15083            dependArray(e);
15084        }
15085    }
15086}
15087
15088function reactive(target) {
15089    makeReactive(target, false);
15090    return target;
15091}
15092/**
15093 * Return a shallowly-reactive copy of the original object, where only the root
15094 * level properties are reactive. It also does not auto-unwrap refs (even at the
15095 * root level).
15096 */
15097function shallowReactive(target) {
15098    makeReactive(target, true);
15099    def(target, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true);
15100    return target;
15101}
15102function makeReactive(target, shallow) {
15103    // if trying to observe a readonly proxy, return the readonly version.
15104    if (!isReadonly(target)) {
15105        if (true) {
15106            if (isArray(target)) {
15107                warn$2("Avoid using Array as root value for ".concat(shallow ? "shallowReactive()" : "reactive()", " as it cannot be tracked in watch() or watchEffect(). Use ").concat(shallow ? "shallowRef()" : "ref()", " instead. This is a Vue-2-only limitation."));
15108            }
15109            var existingOb = target && target.__ob__;
15110            if (existingOb && existingOb.shallow !== shallow) {
15111                warn$2("Target is already a ".concat(existingOb.shallow ? "" : "non-", "shallow reactive object, and cannot be converted to ").concat(shallow ? "" : "non-", "shallow."));
15112            }
15113        }
15114        var ob = observe(target, shallow, isServerRendering() /* ssr mock reactivity */);
15115        if ( true && !ob) {
15116            if (target == null || isPrimitive(target)) {
15117                warn$2("value cannot be made reactive: ".concat(String(target)));
15118            }
15119            if (isCollectionType(target)) {
15120                warn$2("Vue 2 does not support reactive collection types such as Map or Set.");
15121            }
15122        }
15123    }
15124}
15125function isReactive(value) {
15126    if (isReadonly(value)) {
15127        return isReactive(value["__v_raw" /* ReactiveFlags.RAW */]);
15128    }
15129    return !!(value && value.__ob__);
15130}
15131function isShallow(value) {
15132    return !!(value && value.__v_isShallow);
15133}
15134function isReadonly(value) {
15135    return !!(value && value.__v_isReadonly);
15136}
15137function isProxy(value) {
15138    return isReactive(value) || isReadonly(value);
15139}
15140function toRaw(observed) {
15141    var raw = observed && observed["__v_raw" /* ReactiveFlags.RAW */];
15142    return raw ? toRaw(raw) : observed;
15143}
15144function markRaw(value) {
15145    // non-extensible objects won't be observed anyway
15146    if (Object.isExtensible(value)) {
15147        def(value, "__v_skip" /* ReactiveFlags.SKIP */, true);
15148    }
15149    return value;
15150}
15151/**
15152 * @internal
15153 */
15154function isCollectionType(value) {
15155    var type = toRawType(value);
15156    return (type === 'Map' || type === 'WeakMap' || type === 'Set' || type === 'WeakSet');
15157}
15158
15159/**
15160 * @internal
15161 */
15162var RefFlag = "__v_isRef";
15163function isRef(r) {
15164    return !!(r && r.__v_isRef === true);
15165}
15166function ref$1(value) {
15167    return createRef(value, false);
15168}
15169function shallowRef(value) {
15170    return createRef(value, true);
15171}
15172function createRef(rawValue, shallow) {
15173    if (isRef(rawValue)) {
15174        return rawValue;
15175    }
15176    var ref = {};
15177    def(ref, RefFlag, true);
15178    def(ref, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, shallow);
15179    def(ref, 'dep', defineReactive(ref, 'value', rawValue, null, shallow, isServerRendering()));
15180    return ref;
15181}
15182function triggerRef(ref) {
15183    if ( true && !ref.dep) {
15184        warn$2("received object is not a triggerable ref.");
15185    }
15186    if (true) {
15187        ref.dep &&
15188            ref.dep.notify({
15189                type: "set" /* TriggerOpTypes.SET */,
15190                target: ref,
15191                key: 'value'
15192            });
15193    }
15194    else {}
15195}
15196function unref(ref) {
15197    return isRef(ref) ? ref.value : ref;
15198}
15199function proxyRefs(objectWithRefs) {
15200    if (isReactive(objectWithRefs)) {
15201        return objectWithRefs;
15202    }
15203    var proxy = {};
15204    var keys = Object.keys(objectWithRefs);
15205    for (var i = 0; i < keys.length; i++) {
15206        proxyWithRefUnwrap(proxy, objectWithRefs, keys[i]);
15207    }
15208    return proxy;
15209}
15210function proxyWithRefUnwrap(target, source, key) {
15211    Object.defineProperty(target, key, {
15212        enumerable: true,
15213        configurable: true,
15214        get: function () {
15215            var val = source[key];
15216            if (isRef(val)) {
15217                return val.value;
15218            }
15219            else {
15220                var ob = val && val.__ob__;
15221                if (ob)
15222                    ob.dep.depend();
15223                return val;
15224            }
15225        },
15226        set: function (value) {
15227            var oldValue = source[key];
15228            if (isRef(oldValue) && !isRef(value)) {
15229                oldValue.value = value;
15230            }
15231            else {
15232                source[key] = value;
15233            }
15234        }
15235    });
15236}
15237function customRef(factory) {
15238    var dep = new Dep();
15239    var _a = factory(function () {
15240        if (true) {
15241            dep.depend({
15242                target: ref,
15243                type: "get" /* TrackOpTypes.GET */,
15244                key: 'value'
15245            });
15246        }
15247        else {}
15248    }, function () {
15249        if (true) {
15250            dep.notify({
15251                target: ref,
15252                type: "set" /* TriggerOpTypes.SET */,
15253                key: 'value'
15254            });
15255        }
15256        else {}
15257    }), get = _a.get, set = _a.set;
15258    var ref = {
15259        get value() {
15260            return get();
15261        },
15262        set value(newVal) {
15263            set(newVal);
15264        }
15265    };
15266    def(ref, RefFlag, true);
15267    return ref;
15268}
15269function toRefs(object) {
15270    if ( true && !isReactive(object)) {
15271        warn$2("toRefs() expects a reactive object but received a plain one.");
15272    }
15273    var ret = isArray(object) ? new Array(object.length) : {};
15274    for (var key in object) {
15275        ret[key] = toRef(object, key);
15276    }
15277    return ret;
15278}
15279function toRef(object, key, defaultValue) {
15280    var val = object[key];
15281    if (isRef(val)) {
15282        return val;
15283    }
15284    var ref = {
15285        get value() {
15286            var val = object[key];
15287            return val === undefined ? defaultValue : val;
15288        },
15289        set value(newVal) {
15290            object[key] = newVal;
15291        }
15292    };
15293    def(ref, RefFlag, true);
15294    return ref;
15295}
15296
15297var rawToReadonlyFlag = "__v_rawToReadonly";
15298var rawToShallowReadonlyFlag = "__v_rawToShallowReadonly";
15299function readonly(target) {
15300    return createReadonly(target, false);
15301}
15302function createReadonly(target, shallow) {
15303    if (!isPlainObject(target)) {
15304        if (true) {
15305            if (isArray(target)) {
15306                warn$2("Vue 2 does not support readonly arrays.");
15307            }
15308            else if (isCollectionType(target)) {
15309                warn$2("Vue 2 does not support readonly collection types such as Map or Set.");
15310            }
15311            else {
15312                warn$2("value cannot be made readonly: ".concat(typeof target));
15313            }
15314        }
15315        return target;
15316    }
15317    if ( true && !Object.isExtensible(target)) {
15318        warn$2("Vue 2 does not support creating readonly proxy for non-extensible object.");
15319    }
15320    // already a readonly object
15321    if (isReadonly(target)) {
15322        return target;
15323    }
15324    // already has a readonly proxy
15325    var existingFlag = shallow ? rawToShallowReadonlyFlag : rawToReadonlyFlag;
15326    var existingProxy = target[existingFlag];
15327    if (existingProxy) {
15328        return existingProxy;
15329    }
15330    var proxy = Object.create(Object.getPrototypeOf(target));
15331    def(target, existingFlag, proxy);
15332    def(proxy, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, true);
15333    def(proxy, "__v_raw" /* ReactiveFlags.RAW */, target);
15334    if (isRef(target)) {
15335        def(proxy, RefFlag, true);
15336    }
15337    if (shallow || isShallow(target)) {
15338        def(proxy, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true);
15339    }
15340    var keys = Object.keys(target);
15341    for (var i = 0; i < keys.length; i++) {
15342        defineReadonlyProperty(proxy, target, keys[i], shallow);
15343    }
15344    return proxy;
15345}
15346function defineReadonlyProperty(proxy, target, key, shallow) {
15347    Object.defineProperty(proxy, key, {
15348        enumerable: true,
15349        configurable: true,
15350        get: function () {
15351            var val = target[key];
15352            return shallow || !isPlainObject(val) ? val : readonly(val);
15353        },
15354        set: function () {
15355             true &&
15356                warn$2("Set operation on key \"".concat(key, "\" failed: target is readonly."));
15357        }
15358    });
15359}
15360/**
15361 * Returns a reactive-copy of the original object, where only the root level
15362 * properties are readonly, and does NOT unwrap refs nor recursively convert
15363 * returned properties.
15364 * This is used for creating the props proxy object for stateful components.
15365 */
15366function shallowReadonly(target) {
15367    return createReadonly(target, true);
15368}
15369
15370function computed(getterOrOptions, debugOptions) {
15371    var getter;
15372    var setter;
15373    var onlyGetter = isFunction(getterOrOptions);
15374    if (onlyGetter) {
15375        getter = getterOrOptions;
15376        setter =  true
15377            ? function () {
15378                warn$2('Write operation failed: computed value is readonly');
15379            }
15380            : 0;
15381    }
15382    else {
15383        getter = getterOrOptions.get;
15384        setter = getterOrOptions.set;
15385    }
15386    var watcher = isServerRendering()
15387        ? null
15388        : new Watcher(currentInstance, getter, noop, { lazy: true });
15389    if ( true && watcher && debugOptions) {
15390        watcher.onTrack = debugOptions.onTrack;
15391        watcher.onTrigger = debugOptions.onTrigger;
15392    }
15393    var ref = {
15394        // some libs rely on the presence effect for checking computed refs
15395        // from normal refs, but the implementation doesn't matter
15396        effect: watcher,
15397        get value() {
15398            if (watcher) {
15399                if (watcher.dirty) {
15400                    watcher.evaluate();
15401                }
15402                if (Dep.target) {
15403                    if ( true && Dep.target.onTrack) {
15404                        Dep.target.onTrack({
15405                            effect: Dep.target,
15406                            target: ref,
15407                            type: "get" /* TrackOpTypes.GET */,
15408                            key: 'value'
15409                        });
15410                    }
15411                    watcher.depend();
15412                }
15413                return watcher.value;
15414            }
15415            else {
15416                return getter();
15417            }
15418        },
15419        set value(newVal) {
15420            setter(newVal);
15421        }
15422    };
15423    def(ref, RefFlag, true);
15424    def(ref, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, onlyGetter);
15425    return ref;
15426}
15427
15428var mark;
15429var measure;
15430if (true) {
15431    var perf_1 = inBrowser && window.performance;
15432    /* istanbul ignore if */
15433    if (perf_1 &&
15434        // @ts-ignore
15435        perf_1.mark &&
15436        // @ts-ignore
15437        perf_1.measure &&
15438        // @ts-ignore
15439        perf_1.clearMarks &&
15440        // @ts-ignore
15441        perf_1.clearMeasures) {
15442        mark = function (tag) { return perf_1.mark(tag); };
15443        measure = function (name, startTag, endTag) {
15444            perf_1.measure(name, startTag, endTag);
15445            perf_1.clearMarks(startTag);
15446            perf_1.clearMarks(endTag);
15447            // perf.clearMeasures(name)
15448        };
15449    }
15450}
15451
15452var normalizeEvent = cached(function (name) {
15453    var passive = name.charAt(0) === '&';
15454    name = passive ? name.slice(1) : name;
15455    var once = name.charAt(0) === '~'; // Prefixed last, checked first
15456    name = once ? name.slice(1) : name;
15457    var capture = name.charAt(0) === '!';
15458    name = capture ? name.slice(1) : name;
15459    return {
15460        name: name,
15461        once: once,
15462        capture: capture,
15463        passive: passive
15464    };
15465});
15466function createFnInvoker(fns, vm) {
15467    function invoker() {
15468        var fns = invoker.fns;
15469        if (isArray(fns)) {
15470            var cloned = fns.slice();
15471            for (var i = 0; i < cloned.length; i++) {
15472                invokeWithErrorHandling(cloned[i], null, arguments, vm, "v-on handler");
15473            }
15474        }
15475        else {
15476            // return handler return value for single handlers
15477            return invokeWithErrorHandling(fns, null, arguments, vm, "v-on handler");
15478        }
15479    }
15480    invoker.fns = fns;
15481    return invoker;
15482}
15483function updateListeners(on, oldOn, add, remove, createOnceHandler, vm) {
15484    var name, cur, old, event;
15485    for (name in on) {
15486        cur = on[name];
15487        old = oldOn[name];
15488        event = normalizeEvent(name);
15489        if (isUndef(cur)) {
15490             true &&
15491                warn$2("Invalid handler for event \"".concat(event.name, "\": got ") + String(cur), vm);
15492        }
15493        else if (isUndef(old)) {
15494            if (isUndef(cur.fns)) {
15495                cur = on[name] = createFnInvoker(cur, vm);
15496            }
15497            if (isTrue(event.once)) {
15498                cur = on[name] = createOnceHandler(event.name, cur, event.capture);
15499            }
15500            add(event.name, cur, event.capture, event.passive, event.params);
15501        }
15502        else if (cur !== old) {
15503            old.fns = cur;
15504            on[name] = old;
15505        }
15506    }
15507    for (name in oldOn) {
15508        if (isUndef(on[name])) {
15509            event = normalizeEvent(name);
15510            remove(event.name, oldOn[name], event.capture);
15511        }
15512    }
15513}
15514
15515function mergeVNodeHook(def, hookKey, hook) {
15516    if (def instanceof VNode) {
15517        def = def.data.hook || (def.data.hook = {});
15518    }
15519    var invoker;
15520    var oldHook = def[hookKey];
15521    function wrappedHook() {
15522        hook.apply(this, arguments);
15523        // important: remove merged hook to ensure it's called only once
15524        // and prevent memory leak
15525        remove$2(invoker.fns, wrappedHook);
15526    }
15527    if (isUndef(oldHook)) {
15528        // no existing hook
15529        invoker = createFnInvoker([wrappedHook]);
15530    }
15531    else {
15532        /* istanbul ignore if */
15533        if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {
15534            // already a merged invoker
15535            invoker = oldHook;
15536            invoker.fns.push(wrappedHook);
15537        }
15538        else {
15539            // existing plain hook
15540            invoker = createFnInvoker([oldHook, wrappedHook]);
15541        }
15542    }
15543    invoker.merged = true;
15544    def[hookKey] = invoker;
15545}
15546
15547function extractPropsFromVNodeData(data, Ctor, tag) {
15548    // we are only extracting raw values here.
15549    // validation and default values are handled in the child
15550    // component itself.
15551    var propOptions = Ctor.options.props;
15552    if (isUndef(propOptions)) {
15553        return;
15554    }
15555    var res = {};
15556    var attrs = data.attrs, props = data.props;
15557    if (isDef(attrs) || isDef(props)) {
15558        for (var key in propOptions) {
15559            var altKey = hyphenate(key);
15560            if (true) {
15561                var keyInLowerCase = key.toLowerCase();
15562                if (key !== keyInLowerCase && attrs && hasOwn(attrs, keyInLowerCase)) {
15563                    tip("Prop \"".concat(keyInLowerCase, "\" is passed to component ") +
15564                        "".concat(formatComponentName(
15565                        // @ts-expect-error tag is string
15566                        tag || Ctor), ", but the declared prop name is") +
15567                        " \"".concat(key, "\". ") +
15568                        "Note that HTML attributes are case-insensitive and camelCased " +
15569                        "props need to use their kebab-case equivalents when using in-DOM " +
15570                        "templates. You should probably use \"".concat(altKey, "\" instead of \"").concat(key, "\"."));
15571                }
15572            }
15573            checkProp(res, props, key, altKey, true) ||
15574                checkProp(res, attrs, key, altKey, false);
15575        }
15576    }
15577    return res;
15578}
15579function checkProp(res, hash, key, altKey, preserve) {
15580    if (isDef(hash)) {
15581        if (hasOwn(hash, key)) {
15582            res[key] = hash[key];
15583            if (!preserve) {
15584                delete hash[key];
15585            }
15586            return true;
15587        }
15588        else if (hasOwn(hash, altKey)) {
15589            res[key] = hash[altKey];
15590            if (!preserve) {
15591                delete hash[altKey];
15592            }
15593            return true;
15594        }
15595    }
15596    return false;
15597}
15598
15599// The template compiler attempts to minimize the need for normalization by
15600// statically analyzing the template at compile time.
15601//
15602// For plain HTML markup, normalization can be completely skipped because the
15603// generated render function is guaranteed to return Array<VNode>. There are
15604// two cases where extra normalization is needed:
15605// 1. When the children contains components - because a functional component
15606// may return an Array instead of a single root. In this case, just a simple
15607// normalization is needed - if any child is an Array, we flatten the whole
15608// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
15609// because functional components already normalize their own children.
15610function simpleNormalizeChildren(children) {
15611    for (var i = 0; i < children.length; i++) {
15612        if (isArray(children[i])) {
15613            return Array.prototype.concat.apply([], children);
15614        }
15615    }
15616    return children;
15617}
15618// 2. When the children contains constructs that always generated nested Arrays,
15619// e.g. <template>, <slot>, v-for, or when the children is provided by user
15620// with hand-written render functions / JSX. In such cases a full normalization
15621// is needed to cater to all possible types of children values.
15622function normalizeChildren(children) {
15623    return isPrimitive(children)
15624        ? [createTextVNode(children)]
15625        : isArray(children)
15626            ? normalizeArrayChildren(children)
15627            : undefined;
15628}
15629function isTextNode(node) {
15630    return isDef(node) && isDef(node.text) && isFalse(node.isComment);
15631}
15632function normalizeArrayChildren(children, nestedIndex) {
15633    var res = [];
15634    var i, c, lastIndex, last;
15635    for (i = 0; i < children.length; i++) {
15636        c = children[i];
15637        if (isUndef(c) || typeof c === 'boolean')
15638            continue;
15639        lastIndex = res.length - 1;
15640        last = res[lastIndex];
15641        //  nested
15642        if (isArray(c)) {
15643            if (c.length > 0) {
15644                c = normalizeArrayChildren(c, "".concat(nestedIndex || '', "_").concat(i));
15645                // merge adjacent text nodes
15646                if (isTextNode(c[0]) && isTextNode(last)) {
15647                    res[lastIndex] = createTextVNode(last.text + c[0].text);
15648                    c.shift();
15649                }
15650                res.push.apply(res, c);
15651            }
15652        }
15653        else if (isPrimitive(c)) {
15654            if (isTextNode(last)) {
15655                // merge adjacent text nodes
15656                // this is necessary for SSR hydration because text nodes are
15657                // essentially merged when rendered to HTML strings
15658                res[lastIndex] = createTextVNode(last.text + c);
15659            }
15660            else if (c !== '') {
15661                // convert primitive to vnode
15662                res.push(createTextVNode(c));
15663            }
15664        }
15665        else {
15666            if (isTextNode(c) && isTextNode(last)) {
15667                // merge adjacent text nodes
15668                res[lastIndex] = createTextVNode(last.text + c.text);
15669            }
15670            else {
15671                // default key for nested array children (likely generated by v-for)
15672                if (isTrue(children._isVList) &&
15673                    isDef(c.tag) &&
15674                    isUndef(c.key) &&
15675                    isDef(nestedIndex)) {
15676                    c.key = "__vlist".concat(nestedIndex, "_").concat(i, "__");
15677                }
15678                res.push(c);
15679            }
15680        }
15681    }
15682    return res;
15683}
15684
15685var SIMPLE_NORMALIZE = 1;
15686var ALWAYS_NORMALIZE = 2;
15687// wrapper function for providing a more flexible interface
15688// without getting yelled at by flow
15689function createElement$1(context, tag, data, children, normalizationType, alwaysNormalize) {
15690    if (isArray(data) || isPrimitive(data)) {
15691        normalizationType = children;
15692        children = data;
15693        data = undefined;
15694    }
15695    if (isTrue(alwaysNormalize)) {
15696        normalizationType = ALWAYS_NORMALIZE;
15697    }
15698    return _createElement(context, tag, data, children, normalizationType);
15699}
15700function _createElement(context, tag, data, children, normalizationType) {
15701    if (isDef(data) && isDef(data.__ob__)) {
15702         true &&
15703            warn$2("Avoid using observed data object as vnode data: ".concat(JSON.stringify(data), "\n") + 'Always create fresh vnode data objects in each render!', context);
15704        return createEmptyVNode();
15705    }
15706    // object syntax in v-bind
15707    if (isDef(data) && isDef(data.is)) {
15708        tag = data.is;
15709    }
15710    if (!tag) {
15711        // in case of component :is set to falsy value
15712        return createEmptyVNode();
15713    }
15714    // warn against non-primitive key
15715    if ( true && isDef(data) && isDef(data.key) && !isPrimitive(data.key)) {
15716        warn$2('Avoid using non-primitive value as key, ' +
15717            'use string/number value instead.', context);
15718    }
15719    // support single function children as default scoped slot
15720    if (isArray(children) && isFunction(children[0])) {
15721        data = data || {};
15722        data.scopedSlots = { default: children[0] };
15723        children.length = 0;
15724    }
15725    if (normalizationType === ALWAYS_NORMALIZE) {
15726        children = normalizeChildren(children);
15727    }
15728    else if (normalizationType === SIMPLE_NORMALIZE) {
15729        children = simpleNormalizeChildren(children);
15730    }
15731    var vnode, ns;
15732    if (typeof tag === 'string') {
15733        var Ctor = void 0;
15734        ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);
15735        if (config.isReservedTag(tag)) {
15736            // platform built-in elements
15737            if ( true &&
15738                isDef(data) &&
15739                isDef(data.nativeOn) &&
15740                data.tag !== 'component') {
15741                warn$2("The .native modifier for v-on is only valid on components but it was used on <".concat(tag, ">."), context);
15742            }
15743            vnode = new VNode(config.parsePlatformTagName(tag), data, children, undefined, undefined, context);
15744        }
15745        else if ((!data || !data.pre) &&
15746            isDef((Ctor = resolveAsset(context.$options, 'components', tag)))) {
15747            // component
15748            vnode = createComponent(Ctor, data, context, children, tag);
15749        }
15750        else {
15751            // unknown or unlisted namespaced elements
15752            // check at runtime because it may get assigned a namespace when its
15753            // parent normalizes children
15754            vnode = new VNode(tag, data, children, undefined, undefined, context);
15755        }
15756    }
15757    else {
15758        // direct component options / constructor
15759        vnode = createComponent(tag, data, context, children);
15760    }
15761    if (isArray(vnode)) {
15762        return vnode;
15763    }
15764    else if (isDef(vnode)) {
15765        if (isDef(ns))
15766            applyNS(vnode, ns);
15767        if (isDef(data))
15768            registerDeepBindings(data);
15769        return vnode;
15770    }
15771    else {
15772        return createEmptyVNode();
15773    }
15774}
15775function applyNS(vnode, ns, force) {
15776    vnode.ns = ns;
15777    if (vnode.tag === 'foreignObject') {
15778        // use default namespace inside foreignObject
15779        ns = undefined;
15780        force = true;
15781    }
15782    if (isDef(vnode.children)) {
15783        for (var i = 0, l = vnode.children.length; i < l; i++) {
15784            var child = vnode.children[i];
15785            if (isDef(child.tag) &&
15786                (isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {
15787                applyNS(child, ns, force);
15788            }
15789        }
15790    }
15791}
15792// ref #5318
15793// necessary to ensure parent re-render when deep bindings like :style and
15794// :class are used on slot nodes
15795function registerDeepBindings(data) {
15796    if (isObject(data.style)) {
15797        traverse(data.style);
15798    }
15799    if (isObject(data.class)) {
15800        traverse(data.class);
15801    }
15802}
15803
15804/**
15805 * Runtime helper for rendering v-for lists.
15806 */
15807function renderList(val, render) {
15808    var ret = null, i, l, keys, key;
15809    if (isArray(val) || typeof val === 'string') {
15810        ret = new Array(val.length);
15811        for (i = 0, l = val.length; i < l; i++) {
15812            ret[i] = render(val[i], i);
15813        }
15814    }
15815    else if (typeof val === 'number') {
15816        ret = new Array(val);
15817        for (i = 0; i < val; i++) {
15818            ret[i] = render(i + 1, i);
15819        }
15820    }
15821    else if (isObject(val)) {
15822        if (hasSymbol && val[Symbol.iterator]) {
15823            ret = [];
15824            var iterator = val[Symbol.iterator]();
15825            var result = iterator.next();
15826            while (!result.done) {
15827                ret.push(render(result.value, ret.length));
15828                result = iterator.next();
15829            }
15830        }
15831        else {
15832            keys = Object.keys(val);
15833            ret = new Array(keys.length);
15834            for (i = 0, l = keys.length; i < l; i++) {
15835                key = keys[i];
15836                ret[i] = render(val[key], key, i);
15837            }
15838        }
15839    }
15840    if (!isDef(ret)) {
15841        ret = [];
15842    }
15843    ret._isVList = true;
15844    return ret;
15845}
15846
15847/**
15848 * Runtime helper for rendering <slot>
15849 */
15850function renderSlot(name, fallbackRender, props, bindObject) {
15851    var scopedSlotFn = this.$scopedSlots[name];
15852    var nodes;
15853    if (scopedSlotFn) {
15854        // scoped slot
15855        props = props || {};
15856        if (bindObject) {
15857            if ( true && !isObject(bindObject)) {
15858                warn$2('slot v-bind without argument expects an Object', this);
15859            }
15860            props = extend(extend({}, bindObject), props);
15861        }
15862        nodes =
15863            scopedSlotFn(props) ||
15864                (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);
15865    }
15866    else {
15867        nodes =
15868            this.$slots[name] ||
15869                (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);
15870    }
15871    var target = props && props.slot;
15872    if (target) {
15873        return this.$createElement('template', { slot: target }, nodes);
15874    }
15875    else {
15876        return nodes;
15877    }
15878}
15879
15880/**
15881 * Runtime helper for resolving filters
15882 */
15883function resolveFilter(id) {
15884    return resolveAsset(this.$options, 'filters', id, true) || identity;
15885}
15886
15887function isKeyNotMatch(expect, actual) {
15888    if (isArray(expect)) {
15889        return expect.indexOf(actual) === -1;
15890    }
15891    else {
15892        return expect !== actual;
15893    }
15894}
15895/**
15896 * Runtime helper for checking keyCodes from config.
15897 * exposed as Vue.prototype._k
15898 * passing in eventKeyName as last argument separately for backwards compat
15899 */
15900function checkKeyCodes(eventKeyCode, key, builtInKeyCode, eventKeyName, builtInKeyName) {
15901    var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;
15902    if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {
15903        return isKeyNotMatch(builtInKeyName, eventKeyName);
15904    }
15905    else if (mappedKeyCode) {
15906        return isKeyNotMatch(mappedKeyCode, eventKeyCode);
15907    }
15908    else if (eventKeyName) {
15909        return hyphenate(eventKeyName) !== key;
15910    }
15911    return eventKeyCode === undefined;
15912}
15913
15914/**
15915 * Runtime helper for merging v-bind="object" into a VNode's data.
15916 */
15917function bindObjectProps(data, tag, value, asProp, isSync) {
15918    if (value) {
15919        if (!isObject(value)) {
15920             true &&
15921                warn$2('v-bind without argument expects an Object or Array value', this);
15922        }
15923        else {
15924            if (isArray(value)) {
15925                value = toObject(value);
15926            }
15927            var hash = void 0;
15928            var _loop_1 = function (key) {
15929                if (key === 'class' || key === 'style' || isReservedAttribute(key)) {
15930                    hash = data;
15931                }
15932                else {
15933                    var type = data.attrs && data.attrs.type;
15934                    hash =
15935                        asProp || config.mustUseProp(tag, type, key)
15936                            ? data.domProps || (data.domProps = {})
15937                            : data.attrs || (data.attrs = {});
15938                }
15939                var camelizedKey = camelize(key);
15940                var hyphenatedKey = hyphenate(key);
15941                if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {
15942                    hash[key] = value[key];
15943                    if (isSync) {
15944                        var on = data.on || (data.on = {});
15945                        on["update:".concat(key)] = function ($event) {
15946                            value[key] = $event;
15947                        };
15948                    }
15949                }
15950            };
15951            for (var key in value) {
15952                _loop_1(key);
15953            }
15954        }
15955    }
15956    return data;
15957}
15958
15959/**
15960 * Runtime helper for rendering static trees.
15961 */
15962function renderStatic(index, isInFor) {
15963    var cached = this._staticTrees || (this._staticTrees = []);
15964    var tree = cached[index];
15965    // if has already-rendered static tree and not inside v-for,
15966    // we can reuse the same tree.
15967    if (tree && !isInFor) {
15968        return tree;
15969    }
15970    // otherwise, render a fresh tree.
15971    tree = cached[index] = this.$options.staticRenderFns[index].call(this._renderProxy, this._c, this // for render fns generated for functional component templates
15972    );
15973    markStatic$1(tree, "__static__".concat(index), false);
15974    return tree;
15975}
15976/**
15977 * Runtime helper for v-once.
15978 * Effectively it means marking the node as static with a unique key.
15979 */
15980function markOnce(tree, index, key) {
15981    markStatic$1(tree, "__once__".concat(index).concat(key ? "_".concat(key) : ""), true);
15982    return tree;
15983}
15984function markStatic$1(tree, key, isOnce) {
15985    if (isArray(tree)) {
15986        for (var i = 0; i < tree.length; i++) {
15987            if (tree[i] && typeof tree[i] !== 'string') {
15988                markStaticNode(tree[i], "".concat(key, "_").concat(i), isOnce);
15989            }
15990        }
15991    }
15992    else {
15993        markStaticNode(tree, key, isOnce);
15994    }
15995}
15996function markStaticNode(node, key, isOnce) {
15997    node.isStatic = true;
15998    node.key = key;
15999    node.isOnce = isOnce;
16000}
16001
16002function bindObjectListeners(data, value) {
16003    if (value) {
16004        if (!isPlainObject(value)) {
16005             true && warn$2('v-on without argument expects an Object value', this);
16006        }
16007        else {
16008            var on = (data.on = data.on ? extend({}, data.on) : {});
16009            for (var key in value) {
16010                var existing = on[key];
16011                var ours = value[key];
16012                on[key] = existing ? [].concat(existing, ours) : ours;
16013            }
16014        }
16015    }
16016    return data;
16017}
16018
16019function resolveScopedSlots(fns, res, 
16020// the following are added in 2.6
16021hasDynamicKeys, contentHashKey) {
16022    res = res || { $stable: !hasDynamicKeys };
16023    for (var i = 0; i < fns.length; i++) {
16024        var slot = fns[i];
16025        if (isArray(slot)) {
16026            resolveScopedSlots(slot, res, hasDynamicKeys);
16027        }
16028        else if (slot) {
16029            // marker for reverse proxying v-slot without scope on this.$slots
16030            // @ts-expect-error
16031            if (slot.proxy) {
16032                // @ts-expect-error
16033                slot.fn.proxy = true;
16034            }
16035            res[slot.key] = slot.fn;
16036        }
16037    }
16038    if (contentHashKey) {
16039        res.$key = contentHashKey;
16040    }
16041    return res;
16042}
16043
16044// helper to process dynamic keys for dynamic arguments in v-bind and v-on.
16045function bindDynamicKeys(baseObj, values) {
16046    for (var i = 0; i < values.length; i += 2) {
16047        var key = values[i];
16048        if (typeof key === 'string' && key) {
16049            baseObj[values[i]] = values[i + 1];
16050        }
16051        else if ( true && key !== '' && key !== null) {
16052            // null is a special value for explicitly removing a binding
16053            warn$2("Invalid value for dynamic directive argument (expected string or null): ".concat(key), this);
16054        }
16055    }
16056    return baseObj;
16057}
16058// helper to dynamically append modifier runtime markers to event names.
16059// ensure only append when value is already string, otherwise it will be cast
16060// to string and cause the type check to miss.
16061function prependModifier(value, symbol) {
16062    return typeof value === 'string' ? symbol + value : value;
16063}
16064
16065function installRenderHelpers(target) {
16066    target._o = markOnce;
16067    target._n = toNumber;
16068    target._s = toString;
16069    target._l = renderList;
16070    target._t = renderSlot;
16071    target._q = looseEqual;
16072    target._i = looseIndexOf;
16073    target._m = renderStatic;
16074    target._f = resolveFilter;
16075    target._k = checkKeyCodes;
16076    target._b = bindObjectProps;
16077    target._v = createTextVNode;
16078    target._e = createEmptyVNode;
16079    target._u = resolveScopedSlots;
16080    target._g = bindObjectListeners;
16081    target._d = bindDynamicKeys;
16082    target._p = prependModifier;
16083}
16084
16085/**
16086 * Runtime helper for resolving raw children VNodes into a slot object.
16087 */
16088function resolveSlots(children, context) {
16089    if (!children || !children.length) {
16090        return {};
16091    }
16092    var slots = {};
16093    for (var i = 0, l = children.length; i < l; i++) {
16094        var child = children[i];
16095        var data = child.data;
16096        // remove slot attribute if the node is resolved as a Vue slot node
16097        if (data && data.attrs && data.attrs.slot) {
16098            delete data.attrs.slot;
16099        }
16100        // named slots should only be respected if the vnode was rendered in the
16101        // same context.
16102        if ((child.context === context || child.fnContext === context) &&
16103            data &&
16104            data.slot != null) {
16105            var name_1 = data.slot;
16106            var slot = slots[name_1] || (slots[name_1] = []);
16107            if (child.tag === 'template') {
16108                slot.push.apply(slot, child.children || []);
16109            }
16110            else {
16111                slot.push(child);
16112            }
16113        }
16114        else {
16115            (slots.default || (slots.default = [])).push(child);
16116        }
16117    }
16118    // ignore slots that contains only whitespace
16119    for (var name_2 in slots) {
16120        if (slots[name_2].every(isWhitespace)) {
16121            delete slots[name_2];
16122        }
16123    }
16124    return slots;
16125}
16126function isWhitespace(node) {
16127    return (node.isComment && !node.asyncFactory) || node.text === ' ';
16128}
16129
16130function isAsyncPlaceholder(node) {
16131    // @ts-expect-error not really boolean type
16132    return node.isComment && node.asyncFactory;
16133}
16134
16135function normalizeScopedSlots(ownerVm, scopedSlots, normalSlots, prevScopedSlots) {
16136    var res;
16137    var hasNormalSlots = Object.keys(normalSlots).length > 0;
16138    var isStable = scopedSlots ? !!scopedSlots.$stable : !hasNormalSlots;
16139    var key = scopedSlots && scopedSlots.$key;
16140    if (!scopedSlots) {
16141        res = {};
16142    }
16143    else if (scopedSlots._normalized) {
16144        // fast path 1: child component re-render only, parent did not change
16145        return scopedSlots._normalized;
16146    }
16147    else if (isStable &&
16148        prevScopedSlots &&
16149        prevScopedSlots !== emptyObject &&
16150        key === prevScopedSlots.$key &&
16151        !hasNormalSlots &&
16152        !prevScopedSlots.$hasNormal) {
16153        // fast path 2: stable scoped slots w/ no normal slots to proxy,
16154        // only need to normalize once
16155        return prevScopedSlots;
16156    }
16157    else {
16158        res = {};
16159        for (var key_1 in scopedSlots) {
16160            if (scopedSlots[key_1] && key_1[0] !== '$') {
16161                res[key_1] = normalizeScopedSlot(ownerVm, normalSlots, key_1, scopedSlots[key_1]);
16162            }
16163        }
16164    }
16165    // expose normal slots on scopedSlots
16166    for (var key_2 in normalSlots) {
16167        if (!(key_2 in res)) {
16168            res[key_2] = proxyNormalSlot(normalSlots, key_2);
16169        }
16170    }
16171    // avoriaz seems to mock a non-extensible $scopedSlots object
16172    // and when that is passed down this would cause an error
16173    if (scopedSlots && Object.isExtensible(scopedSlots)) {
16174        scopedSlots._normalized = res;
16175    }
16176    def(res, '$stable', isStable);
16177    def(res, '$key', key);
16178    def(res, '$hasNormal', hasNormalSlots);
16179    return res;
16180}
16181function normalizeScopedSlot(vm, normalSlots, key, fn) {
16182    var normalized = function () {
16183        var cur = currentInstance;
16184        setCurrentInstance(vm);
16185        var res = arguments.length ? fn.apply(null, arguments) : fn({});
16186        res =
16187            res && typeof res === 'object' && !isArray(res)
16188                ? [res] // single vnode
16189                : normalizeChildren(res);
16190        var vnode = res && res[0];
16191        setCurrentInstance(cur);
16192        return res &&
16193            (!vnode ||
16194                (res.length === 1 && vnode.isComment && !isAsyncPlaceholder(vnode))) // #9658, #10391
16195            ? undefined
16196            : res;
16197    };
16198    // this is a slot using the new v-slot syntax without scope. although it is
16199    // compiled as a scoped slot, render fn users would expect it to be present
16200    // on this.$slots because the usage is semantically a normal slot.
16201    if (fn.proxy) {
16202        Object.defineProperty(normalSlots, key, {
16203            get: normalized,
16204            enumerable: true,
16205            configurable: true
16206        });
16207    }
16208    return normalized;
16209}
16210function proxyNormalSlot(slots, key) {
16211    return function () { return slots[key]; };
16212}
16213
16214function initSetup(vm) {
16215    var options = vm.$options;
16216    var setup = options.setup;
16217    if (setup) {
16218        var ctx = (vm._setupContext = createSetupContext(vm));
16219        setCurrentInstance(vm);
16220        pushTarget();
16221        var setupResult = invokeWithErrorHandling(setup, null, [vm._props || shallowReactive({}), ctx], vm, "setup");
16222        popTarget();
16223        setCurrentInstance();
16224        if (isFunction(setupResult)) {
16225            // render function
16226            // @ts-ignore
16227            options.render = setupResult;
16228        }
16229        else if (isObject(setupResult)) {
16230            // bindings
16231            if ( true && setupResult instanceof VNode) {
16232                warn$2("setup() should not return VNodes directly - " +
16233                    "return a render function instead.");
16234            }
16235            vm._setupState = setupResult;
16236            // __sfc indicates compiled bindings from <script setup>
16237            if (!setupResult.__sfc) {
16238                for (var key in setupResult) {
16239                    if (!isReserved(key)) {
16240                        proxyWithRefUnwrap(vm, setupResult, key);
16241                    }
16242                    else if (true) {
16243                        warn$2("Avoid using variables that start with _ or $ in setup().");
16244                    }
16245                }
16246            }
16247            else {
16248                // exposed for compiled render fn
16249                var proxy = (vm._setupProxy = {});
16250                for (var key in setupResult) {
16251                    if (key !== '__sfc') {
16252                        proxyWithRefUnwrap(proxy, setupResult, key);
16253                    }
16254                }
16255            }
16256        }
16257        else if ( true && setupResult !== undefined) {
16258            warn$2("setup() should return an object. Received: ".concat(setupResult === null ? 'null' : typeof setupResult));
16259        }
16260    }
16261}
16262function createSetupContext(vm) {
16263    var exposeCalled = false;
16264    return {
16265        get attrs() {
16266            if (!vm._attrsProxy) {
16267                var proxy = (vm._attrsProxy = {});
16268                def(proxy, '_v_attr_proxy', true);
16269                syncSetupProxy(proxy, vm.$attrs, emptyObject, vm, '$attrs');
16270            }
16271            return vm._attrsProxy;
16272        },
16273        get listeners() {
16274            if (!vm._listenersProxy) {
16275                var proxy = (vm._listenersProxy = {});
16276                syncSetupProxy(proxy, vm.$listeners, emptyObject, vm, '$listeners');
16277            }
16278            return vm._listenersProxy;
16279        },
16280        get slots() {
16281            return initSlotsProxy(vm);
16282        },
16283        emit: bind$1(vm.$emit, vm),
16284        expose: function (exposed) {
16285            if (true) {
16286                if (exposeCalled) {
16287                    warn$2("expose() should be called only once per setup().", vm);
16288                }
16289                exposeCalled = true;
16290            }
16291            if (exposed) {
16292                Object.keys(exposed).forEach(function (key) {
16293                    return proxyWithRefUnwrap(vm, exposed, key);
16294                });
16295            }
16296        }
16297    };
16298}
16299function syncSetupProxy(to, from, prev, instance, type) {
16300    var changed = false;
16301    for (var key in from) {
16302        if (!(key in to)) {
16303            changed = true;
16304            defineProxyAttr(to, key, instance, type);
16305        }
16306        else if (from[key] !== prev[key]) {
16307            changed = true;
16308        }
16309    }
16310    for (var key in to) {
16311        if (!(key in from)) {
16312            changed = true;
16313            delete to[key];
16314        }
16315    }
16316    return changed;
16317}
16318function defineProxyAttr(proxy, key, instance, type) {
16319    Object.defineProperty(proxy, key, {
16320        enumerable: true,
16321        configurable: true,
16322        get: function () {
16323            return instance[type][key];
16324        }
16325    });
16326}
16327function initSlotsProxy(vm) {
16328    if (!vm._slotsProxy) {
16329        syncSetupSlots((vm._slotsProxy = {}), vm.$scopedSlots);
16330    }
16331    return vm._slotsProxy;
16332}
16333function syncSetupSlots(to, from) {
16334    for (var key in from) {
16335        to[key] = from[key];
16336    }
16337    for (var key in to) {
16338        if (!(key in from)) {
16339            delete to[key];
16340        }
16341    }
16342}
16343/**
16344 * @internal use manual type def because public setup context type relies on
16345 * legacy VNode types
16346 */
16347function useSlots() {
16348    return getContext().slots;
16349}
16350/**
16351 * @internal use manual type def because public setup context type relies on
16352 * legacy VNode types
16353 */
16354function useAttrs() {
16355    return getContext().attrs;
16356}
16357/**
16358 * Vue 2 only
16359 * @internal use manual type def because public setup context type relies on
16360 * legacy VNode types
16361 */
16362function useListeners() {
16363    return getContext().listeners;
16364}
16365function getContext() {
16366    if ( true && !currentInstance) {
16367        warn$2("useContext() called without active instance.");
16368    }
16369    var vm = currentInstance;
16370    return vm._setupContext || (vm._setupContext = createSetupContext(vm));
16371}
16372/**
16373 * Runtime helper for merging default declarations. Imported by compiled code
16374 * only.
16375 * @internal
16376 */
16377function mergeDefaults(raw, defaults) {
16378    var props = isArray(raw)
16379        ? raw.reduce(function (normalized, p) { return ((normalized[p] = {}), normalized); }, {})
16380        : raw;
16381    for (var key in defaults) {
16382        var opt = props[key];
16383        if (opt) {
16384            if (isArray(opt) || isFunction(opt)) {
16385                props[key] = { type: opt, default: defaults[key] };
16386            }
16387            else {
16388                opt.default = defaults[key];
16389            }
16390        }
16391        else if (opt === null) {
16392            props[key] = { default: defaults[key] };
16393        }
16394        else if (true) {
16395            warn$2("props default key \"".concat(key, "\" has no corresponding declaration."));
16396        }
16397    }
16398    return props;
16399}
16400
16401function initRender(vm) {
16402    vm._vnode = null; // the root of the child tree
16403    vm._staticTrees = null; // v-once cached trees
16404    var options = vm.$options;
16405    var parentVnode = (vm.$vnode = options._parentVnode); // the placeholder node in parent tree
16406    var renderContext = parentVnode && parentVnode.context;
16407    vm.$slots = resolveSlots(options._renderChildren, renderContext);
16408    vm.$scopedSlots = parentVnode
16409        ? normalizeScopedSlots(vm.$parent, parentVnode.data.scopedSlots, vm.$slots)
16410        : emptyObject;
16411    // bind the createElement fn to this instance
16412    // so that we get proper render context inside it.
16413    // args order: tag, data, children, normalizationType, alwaysNormalize
16414    // internal version is used by render functions compiled from templates
16415    // @ts-expect-error
16416    vm._c = function (a, b, c, d) { return createElement$1(vm, a, b, c, d, false); };
16417    // normalization is always applied for the public version, used in
16418    // user-written render functions.
16419    // @ts-expect-error
16420    vm.$createElement = function (a, b, c, d) { return createElement$1(vm, a, b, c, d, true); };
16421    // $attrs & $listeners are exposed for easier HOC creation.
16422    // they need to be reactive so that HOCs using them are always updated
16423    var parentData = parentVnode && parentVnode.data;
16424    /* istanbul ignore else */
16425    if (true) {
16426        defineReactive(vm, '$attrs', (parentData && parentData.attrs) || emptyObject, function () {
16427            !isUpdatingChildComponent && warn$2("$attrs is readonly.", vm);
16428        }, true);
16429        defineReactive(vm, '$listeners', options._parentListeners || emptyObject, function () {
16430            !isUpdatingChildComponent && warn$2("$listeners is readonly.", vm);
16431        }, true);
16432    }
16433    else {}
16434}
16435var currentRenderingInstance = null;
16436function renderMixin(Vue) {
16437    // install runtime convenience helpers
16438    installRenderHelpers(Vue.prototype);
16439    Vue.prototype.$nextTick = function (fn) {
16440        return nextTick(fn, this);
16441    };
16442    Vue.prototype._render = function () {
16443        var vm = this;
16444        var _a = vm.$options, render = _a.render, _parentVnode = _a._parentVnode;
16445        if (_parentVnode && vm._isMounted) {
16446            vm.$scopedSlots = normalizeScopedSlots(vm.$parent, _parentVnode.data.scopedSlots, vm.$slots, vm.$scopedSlots);
16447            if (vm._slotsProxy) {
16448                syncSetupSlots(vm._slotsProxy, vm.$scopedSlots);
16449            }
16450        }
16451        // set parent vnode. this allows render functions to have access
16452        // to the data on the placeholder node.
16453        vm.$vnode = _parentVnode;
16454        // render self
16455        var vnode;
16456        try {
16457            // There's no need to maintain a stack because all render fns are called
16458            // separately from one another. Nested component's render fns are called
16459            // when parent component is patched.
16460            setCurrentInstance(vm);
16461            currentRenderingInstance = vm;
16462            vnode = render.call(vm._renderProxy, vm.$createElement);
16463        }
16464        catch (e) {
16465            handleError(e, vm, "render");
16466            // return error render result,
16467            // or previous vnode to prevent render error causing blank component
16468            /* istanbul ignore else */
16469            if ( true && vm.$options.renderError) {
16470                try {
16471                    vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);
16472                }
16473                catch (e) {
16474                    handleError(e, vm, "renderError");
16475                    vnode = vm._vnode;
16476                }
16477            }
16478            else {
16479                vnode = vm._vnode;
16480            }
16481        }
16482        finally {
16483            currentRenderingInstance = null;
16484            setCurrentInstance();
16485        }
16486        // if the returned array contains only a single node, allow it
16487        if (isArray(vnode) && vnode.length === 1) {
16488            vnode = vnode[0];
16489        }
16490        // return empty vnode in case the render function errored out
16491        if (!(vnode instanceof VNode)) {
16492            if ( true && isArray(vnode)) {
16493                warn$2('Multiple root nodes returned from render function. Render function ' +
16494                    'should return a single root node.', vm);
16495            }
16496            vnode = createEmptyVNode();
16497        }
16498        // set parent
16499        vnode.parent = _parentVnode;
16500        return vnode;
16501    };
16502}
16503
16504function ensureCtor(comp, base) {
16505    if (comp.__esModule || (hasSymbol && comp[Symbol.toStringTag] === 'Module')) {
16506        comp = comp.default;
16507    }
16508    return isObject(comp) ? base.extend(comp) : comp;
16509}
16510function createAsyncPlaceholder(factory, data, context, children, tag) {
16511    var node = createEmptyVNode();
16512    node.asyncFactory = factory;
16513    node.asyncMeta = { data: data, context: context, children: children, tag: tag };
16514    return node;
16515}
16516function resolveAsyncComponent(factory, baseCtor) {
16517    if (isTrue(factory.error) && isDef(factory.errorComp)) {
16518        return factory.errorComp;
16519    }
16520    if (isDef(factory.resolved)) {
16521        return factory.resolved;
16522    }
16523    var owner = currentRenderingInstance;
16524    if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {
16525        // already pending
16526        factory.owners.push(owner);
16527    }
16528    if (isTrue(factory.loading) && isDef(factory.loadingComp)) {
16529        return factory.loadingComp;
16530    }
16531    if (owner && !isDef(factory.owners)) {
16532        var owners_1 = (factory.owners = [owner]);
16533        var sync_1 = true;
16534        var timerLoading_1 = null;
16535        var timerTimeout_1 = null;
16536        owner.$on('hook:destroyed', function () { return remove$2(owners_1, owner); });
16537        var forceRender_1 = function (renderCompleted) {
16538            for (var i = 0, l = owners_1.length; i < l; i++) {
16539                owners_1[i].$forceUpdate();
16540            }
16541            if (renderCompleted) {
16542                owners_1.length = 0;
16543                if (timerLoading_1 !== null) {
16544                    clearTimeout(timerLoading_1);
16545                    timerLoading_1 = null;
16546                }
16547                if (timerTimeout_1 !== null) {
16548                    clearTimeout(timerTimeout_1);
16549                    timerTimeout_1 = null;
16550                }
16551            }
16552        };
16553        var resolve = once(function (res) {
16554            // cache resolved
16555            factory.resolved = ensureCtor(res, baseCtor);
16556            // invoke callbacks only if this is not a synchronous resolve
16557            // (async resolves are shimmed as synchronous during SSR)
16558            if (!sync_1) {
16559                forceRender_1(true);
16560            }
16561            else {
16562                owners_1.length = 0;
16563            }
16564        });
16565        var reject_1 = once(function (reason) {
16566             true &&
16567                warn$2("Failed to resolve async component: ".concat(String(factory)) +
16568                    (reason ? "\nReason: ".concat(reason) : ''));
16569            if (isDef(factory.errorComp)) {
16570                factory.error = true;
16571                forceRender_1(true);
16572            }
16573        });
16574        var res_1 = factory(resolve, reject_1);
16575        if (isObject(res_1)) {
16576            if (isPromise(res_1)) {
16577                // () => Promise
16578                if (isUndef(factory.resolved)) {
16579                    res_1.then(resolve, reject_1);
16580                }
16581            }
16582            else if (isPromise(res_1.component)) {
16583                res_1.component.then(resolve, reject_1);
16584                if (isDef(res_1.error)) {
16585                    factory.errorComp = ensureCtor(res_1.error, baseCtor);
16586                }
16587                if (isDef(res_1.loading)) {
16588                    factory.loadingComp = ensureCtor(res_1.loading, baseCtor);
16589                    if (res_1.delay === 0) {
16590                        factory.loading = true;
16591                    }
16592                    else {
16593                        // @ts-expect-error NodeJS timeout type
16594                        timerLoading_1 = setTimeout(function () {
16595                            timerLoading_1 = null;
16596                            if (isUndef(factory.resolved) && isUndef(factory.error)) {
16597                                factory.loading = true;
16598                                forceRender_1(false);
16599                            }
16600                        }, res_1.delay || 200);
16601                    }
16602                }
16603                if (isDef(res_1.timeout)) {
16604                    // @ts-expect-error NodeJS timeout type
16605                    timerTimeout_1 = setTimeout(function () {
16606                        timerTimeout_1 = null;
16607                        if (isUndef(factory.resolved)) {
16608                            reject_1( true ? "timeout (".concat(res_1.timeout, "ms)") : 0);
16609                        }
16610                    }, res_1.timeout);
16611                }
16612            }
16613        }
16614        sync_1 = false;
16615        // return in case resolved synchronously
16616        return factory.loading ? factory.loadingComp : factory.resolved;
16617    }
16618}
16619
16620function getFirstComponentChild(children) {
16621    if (isArray(children)) {
16622        for (var i = 0; i < children.length; i++) {
16623            var c = children[i];
16624            if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {
16625                return c;
16626            }
16627        }
16628    }
16629}
16630
16631function initEvents(vm) {
16632    vm._events = Object.create(null);
16633    vm._hasHookEvent = false;
16634    // init parent attached events
16635    var listeners = vm.$options._parentListeners;
16636    if (listeners) {
16637        updateComponentListeners(vm, listeners);
16638    }
16639}
16640var target$1;
16641function add$1(event, fn) {
16642    target$1.$on(event, fn);
16643}
16644function remove$1(event, fn) {
16645    target$1.$off(event, fn);
16646}
16647function createOnceHandler$1(event, fn) {
16648    var _target = target$1;
16649    return function onceHandler() {
16650        var res = fn.apply(null, arguments);
16651        if (res !== null) {
16652            _target.$off(event, onceHandler);
16653        }
16654    };
16655}
16656function updateComponentListeners(vm, listeners, oldListeners) {
16657    target$1 = vm;
16658    updateListeners(listeners, oldListeners || {}, add$1, remove$1, createOnceHandler$1, vm);
16659    target$1 = undefined;
16660}
16661function eventsMixin(Vue) {
16662    var hookRE = /^hook:/;
16663    Vue.prototype.$on = function (event, fn) {
16664        var vm = this;
16665        if (isArray(event)) {
16666            for (var i = 0, l = event.length; i < l; i++) {
16667                vm.$on(event[i], fn);
16668            }
16669        }
16670        else {
16671            (vm._events[event] || (vm._events[event] = [])).push(fn);
16672            // optimize hook:event cost by using a boolean flag marked at registration
16673            // instead of a hash lookup
16674            if (hookRE.test(event)) {
16675                vm._hasHookEvent = true;
16676            }
16677        }
16678        return vm;
16679    };
16680    Vue.prototype.$once = function (event, fn) {
16681        var vm = this;
16682        function on() {
16683            vm.$off(event, on);
16684            fn.apply(vm, arguments);
16685        }
16686        on.fn = fn;
16687        vm.$on(event, on);
16688        return vm;
16689    };
16690    Vue.prototype.$off = function (event, fn) {
16691        var vm = this;
16692        // all
16693        if (!arguments.length) {
16694            vm._events = Object.create(null);
16695            return vm;
16696        }
16697        // array of events
16698        if (isArray(event)) {
16699            for (var i_1 = 0, l = event.length; i_1 < l; i_1++) {
16700                vm.$off(event[i_1], fn);
16701            }
16702            return vm;
16703        }
16704        // specific event
16705        var cbs = vm._events[event];
16706        if (!cbs) {
16707            return vm;
16708        }
16709        if (!fn) {
16710            vm._events[event] = null;
16711            return vm;
16712        }
16713        // specific handler
16714        var cb;
16715        var i = cbs.length;
16716        while (i--) {
16717            cb = cbs[i];
16718            if (cb === fn || cb.fn === fn) {
16719                cbs.splice(i, 1);
16720                break;
16721            }
16722        }
16723        return vm;
16724    };
16725    Vue.prototype.$emit = function (event) {
16726        var vm = this;
16727        if (true) {
16728            var lowerCaseEvent = event.toLowerCase();
16729            if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {
16730                tip("Event \"".concat(lowerCaseEvent, "\" is emitted in component ") +
16731                    "".concat(formatComponentName(vm), " but the handler is registered for \"").concat(event, "\". ") +
16732                    "Note that HTML attributes are case-insensitive and you cannot use " +
16733                    "v-on to listen to camelCase events when using in-DOM templates. " +
16734                    "You should probably use \"".concat(hyphenate(event), "\" instead of \"").concat(event, "\"."));
16735            }
16736        }
16737        var cbs = vm._events[event];
16738        if (cbs) {
16739            cbs = cbs.length > 1 ? toArray(cbs) : cbs;
16740            var args = toArray(arguments, 1);
16741            var info = "event handler for \"".concat(event, "\"");
16742            for (var i = 0, l = cbs.length; i < l; i++) {
16743                invokeWithErrorHandling(cbs[i], vm, args, vm, info);
16744            }
16745        }
16746        return vm;
16747    };
16748}
16749
16750var activeEffectScope;
16751var EffectScope = /** @class */ (function () {
16752    function EffectScope(detached) {
16753        if (detached === void 0) { detached = false; }
16754        this.detached = detached;
16755        /**
16756         * @internal
16757         */
16758        this.active = true;
16759        /**
16760         * @internal
16761         */
16762        this.effects = [];
16763        /**
16764         * @internal
16765         */
16766        this.cleanups = [];
16767        this.parent = activeEffectScope;
16768        if (!detached && activeEffectScope) {
16769            this.index =
16770                (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;
16771        }
16772    }
16773    EffectScope.prototype.run = function (fn) {
16774        if (this.active) {
16775            var currentEffectScope = activeEffectScope;
16776            try {
16777                activeEffectScope = this;
16778                return fn();
16779            }
16780            finally {
16781                activeEffectScope = currentEffectScope;
16782            }
16783        }
16784        else if (true) {
16785            warn$2("cannot run an inactive effect scope.");
16786        }
16787    };
16788    /**
16789     * This should only be called on non-detached scopes
16790     * @internal
16791     */
16792    EffectScope.prototype.on = function () {
16793        activeEffectScope = this;
16794    };
16795    /**
16796     * This should only be called on non-detached scopes
16797     * @internal
16798     */
16799    EffectScope.prototype.off = function () {
16800        activeEffectScope = this.parent;
16801    };
16802    EffectScope.prototype.stop = function (fromParent) {
16803        if (this.active) {
16804            var i = void 0, l = void 0;
16805            for (i = 0, l = this.effects.length; i < l; i++) {
16806                this.effects[i].teardown();
16807            }
16808            for (i = 0, l = this.cleanups.length; i < l; i++) {
16809                this.cleanups[i]();
16810            }
16811            if (this.scopes) {
16812                for (i = 0, l = this.scopes.length; i < l; i++) {
16813                    this.scopes[i].stop(true);
16814                }
16815            }
16816            // nested scope, dereference from parent to avoid memory leaks
16817            if (!this.detached && this.parent && !fromParent) {
16818                // optimized O(1) removal
16819                var last = this.parent.scopes.pop();
16820                if (last && last !== this) {
16821                    this.parent.scopes[this.index] = last;
16822                    last.index = this.index;
16823                }
16824            }
16825            this.parent = undefined;
16826            this.active = false;
16827        }
16828    };
16829    return EffectScope;
16830}());
16831function effectScope(detached) {
16832    return new EffectScope(detached);
16833}
16834/**
16835 * @internal
16836 */
16837function recordEffectScope(effect, scope) {
16838    if (scope === void 0) { scope = activeEffectScope; }
16839    if (scope && scope.active) {
16840        scope.effects.push(effect);
16841    }
16842}
16843function getCurrentScope() {
16844    return activeEffectScope;
16845}
16846function onScopeDispose(fn) {
16847    if (activeEffectScope) {
16848        activeEffectScope.cleanups.push(fn);
16849    }
16850    else if (true) {
16851        warn$2("onScopeDispose() is called when there is no active effect scope" +
16852            " to be associated with.");
16853    }
16854}
16855
16856var activeInstance = null;
16857var isUpdatingChildComponent = false;
16858function setActiveInstance(vm) {
16859    var prevActiveInstance = activeInstance;
16860    activeInstance = vm;
16861    return function () {
16862        activeInstance = prevActiveInstance;
16863    };
16864}
16865function initLifecycle(vm) {
16866    var options = vm.$options;
16867    // locate first non-abstract parent
16868    var parent = options.parent;
16869    if (parent && !options.abstract) {
16870        while (parent.$options.abstract && parent.$parent) {
16871            parent = parent.$parent;
16872        }
16873        parent.$children.push(vm);
16874    }
16875    vm.$parent = parent;
16876    vm.$root = parent ? parent.$root : vm;
16877    vm.$children = [];
16878    vm.$refs = {};
16879    vm._provided = parent ? parent._provided : Object.create(null);
16880    vm._watcher = null;
16881    vm._inactive = null;
16882    vm._directInactive = false;
16883    vm._isMounted = false;
16884    vm._isDestroyed = false;
16885    vm._isBeingDestroyed = false;
16886}
16887function lifecycleMixin(Vue) {
16888    Vue.prototype._update = function (vnode, hydrating) {
16889        var vm = this;
16890        var prevEl = vm.$el;
16891        var prevVnode = vm._vnode;
16892        var restoreActiveInstance = setActiveInstance(vm);
16893        vm._vnode = vnode;
16894        // Vue.prototype.__patch__ is injected in entry points
16895        // based on the rendering backend used.
16896        if (!prevVnode) {
16897            // initial render
16898            vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);
16899        }
16900        else {
16901            // updates
16902            vm.$el = vm.__patch__(prevVnode, vnode);
16903        }
16904        restoreActiveInstance();
16905        // update __vue__ reference
16906        if (prevEl) {
16907            prevEl.__vue__ = null;
16908        }
16909        if (vm.$el) {
16910            vm.$el.__vue__ = vm;
16911        }
16912        // if parent is an HOC, update its $el as well
16913        var wrapper = vm;
16914        while (wrapper &&
16915            wrapper.$vnode &&
16916            wrapper.$parent &&
16917            wrapper.$vnode === wrapper.$parent._vnode) {
16918            wrapper.$parent.$el = wrapper.$el;
16919            wrapper = wrapper.$parent;
16920        }
16921        // updated hook is called by the scheduler to ensure that children are
16922        // updated in a parent's updated hook.
16923    };
16924    Vue.prototype.$forceUpdate = function () {
16925        var vm = this;
16926        if (vm._watcher) {
16927            vm._watcher.update();
16928        }
16929    };
16930    Vue.prototype.$destroy = function () {
16931        var vm = this;
16932        if (vm._isBeingDestroyed) {
16933            return;
16934        }
16935        callHook$1(vm, 'beforeDestroy');
16936        vm._isBeingDestroyed = true;
16937        // remove self from parent
16938        var parent = vm.$parent;
16939        if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {
16940            remove$2(parent.$children, vm);
16941        }
16942        // teardown scope. this includes both the render watcher and other
16943        // watchers created
16944        vm._scope.stop();
16945        // remove reference from data ob
16946        // frozen object may not have observer.
16947        if (vm._data.__ob__) {
16948            vm._data.__ob__.vmCount--;
16949        }
16950        // call the last hook...
16951        vm._isDestroyed = true;
16952        // invoke destroy hooks on current rendered tree
16953        vm.__patch__(vm._vnode, null);
16954        // fire destroyed hook
16955        callHook$1(vm, 'destroyed');
16956        // turn off all instance listeners.
16957        vm.$off();
16958        // remove __vue__ reference
16959        if (vm.$el) {
16960            vm.$el.__vue__ = null;
16961        }
16962        // release circular reference (#6759)
16963        if (vm.$vnode) {
16964            vm.$vnode.parent = null;
16965        }
16966    };
16967}
16968function mountComponent(vm, el, hydrating) {
16969    vm.$el = el;
16970    if (!vm.$options.render) {
16971        // @ts-expect-error invalid type
16972        vm.$options.render = createEmptyVNode;
16973        if (true) {
16974            /* istanbul ignore if */
16975            if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||
16976                vm.$options.el ||
16977                el) {
16978                warn$2('You are using the runtime-only build of Vue where the template ' +
16979                    'compiler is not available. Either pre-compile the templates into ' +
16980                    'render functions, or use the compiler-included build.', vm);
16981            }
16982            else {
16983                warn$2('Failed to mount component: template or render function not defined.', vm);
16984            }
16985        }
16986    }
16987    callHook$1(vm, 'beforeMount');
16988    var updateComponent;
16989    /* istanbul ignore if */
16990    if ( true && config.performance && mark) {
16991        updateComponent = function () {
16992            var name = vm._name;
16993            var id = vm._uid;
16994            var startTag = "vue-perf-start:".concat(id);
16995            var endTag = "vue-perf-end:".concat(id);
16996            mark(startTag);
16997            var vnode = vm._render();
16998            mark(endTag);
16999            measure("vue ".concat(name, " render"), startTag, endTag);
17000            mark(startTag);
17001            vm._update(vnode, hydrating);
17002            mark(endTag);
17003            measure("vue ".concat(name, " patch"), startTag, endTag);
17004        };
17005    }
17006    else {
17007        updateComponent = function () {
17008            vm._update(vm._render(), hydrating);
17009        };
17010    }
17011    var watcherOptions = {
17012        before: function () {
17013            if (vm._isMounted && !vm._isDestroyed) {
17014                callHook$1(vm, 'beforeUpdate');
17015            }
17016        }
17017    };
17018    if (true) {
17019        watcherOptions.onTrack = function (e) { return callHook$1(vm, 'renderTracked', [e]); };
17020        watcherOptions.onTrigger = function (e) { return callHook$1(vm, 'renderTriggered', [e]); };
17021    }
17022    // we set this to vm._watcher inside the watcher's constructor
17023    // since the watcher's initial patch may call $forceUpdate (e.g. inside child
17024    // component's mounted hook), which relies on vm._watcher being already defined
17025    new Watcher(vm, updateComponent, noop, watcherOptions, true /* isRenderWatcher */);
17026    hydrating = false;
17027    // flush buffer for flush: "pre" watchers queued in setup()
17028    var preWatchers = vm._preWatchers;
17029    if (preWatchers) {
17030        for (var i = 0; i < preWatchers.length; i++) {
17031            preWatchers[i].run();
17032        }
17033    }
17034    // manually mounted instance, call mounted on self
17035    // mounted is called for render-created child components in its inserted hook
17036    if (vm.$vnode == null) {
17037        vm._isMounted = true;
17038        callHook$1(vm, 'mounted');
17039    }
17040    return vm;
17041}
17042function updateChildComponent(vm, propsData, listeners, parentVnode, renderChildren) {
17043    if (true) {
17044        isUpdatingChildComponent = true;
17045    }
17046    // determine whether component has slot children
17047    // we need to do this before overwriting $options._renderChildren.
17048    // check if there are dynamic scopedSlots (hand-written or compiled but with
17049    // dynamic slot names). Static scoped slots compiled from template has the
17050    // "$stable" marker.
17051    var newScopedSlots = parentVnode.data.scopedSlots;
17052    var oldScopedSlots = vm.$scopedSlots;
17053    var hasDynamicScopedSlot = !!((newScopedSlots && !newScopedSlots.$stable) ||
17054        (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||
17055        (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key) ||
17056        (!newScopedSlots && vm.$scopedSlots.$key));
17057    // Any static slot children from the parent may have changed during parent's
17058    // update. Dynamic scoped slots may also have changed. In such cases, a forced
17059    // update is necessary to ensure correctness.
17060    var needsForceUpdate = !!(renderChildren || // has new static slots
17061        vm.$options._renderChildren || // has old static slots
17062        hasDynamicScopedSlot);
17063    var prevVNode = vm.$vnode;
17064    vm.$options._parentVnode = parentVnode;
17065    vm.$vnode = parentVnode; // update vm's placeholder node without re-render
17066    if (vm._vnode) {
17067        // update child tree's parent
17068        vm._vnode.parent = parentVnode;
17069    }
17070    vm.$options._renderChildren = renderChildren;
17071    // update $attrs and $listeners hash
17072    // these are also reactive so they may trigger child update if the child
17073    // used them during render
17074    var attrs = parentVnode.data.attrs || emptyObject;
17075    if (vm._attrsProxy) {
17076        // force update if attrs are accessed and has changed since it may be
17077        // passed to a child component.
17078        if (syncSetupProxy(vm._attrsProxy, attrs, (prevVNode.data && prevVNode.data.attrs) || emptyObject, vm, '$attrs')) {
17079            needsForceUpdate = true;
17080        }
17081    }
17082    vm.$attrs = attrs;
17083    // update listeners
17084    listeners = listeners || emptyObject;
17085    var prevListeners = vm.$options._parentListeners;
17086    if (vm._listenersProxy) {
17087        syncSetupProxy(vm._listenersProxy, listeners, prevListeners || emptyObject, vm, '$listeners');
17088    }
17089    vm.$listeners = vm.$options._parentListeners = listeners;
17090    updateComponentListeners(vm, listeners, prevListeners);
17091    // update props
17092    if (propsData && vm.$options.props) {
17093        toggleObserving(false);
17094        var props = vm._props;
17095        var propKeys = vm.$options._propKeys || [];
17096        for (var i = 0; i < propKeys.length; i++) {
17097            var key = propKeys[i];
17098            var propOptions = vm.$options.props; // wtf flow?
17099            props[key] = validateProp(key, propOptions, propsData, vm);
17100        }
17101        toggleObserving(true);
17102        // keep a copy of raw propsData
17103        vm.$options.propsData = propsData;
17104    }
17105    // resolve slots + force update if has children
17106    if (needsForceUpdate) {
17107        vm.$slots = resolveSlots(renderChildren, parentVnode.context);
17108        vm.$forceUpdate();
17109    }
17110    if (true) {
17111        isUpdatingChildComponent = false;
17112    }
17113}
17114function isInInactiveTree(vm) {
17115    while (vm && (vm = vm.$parent)) {
17116        if (vm._inactive)
17117            return true;
17118    }
17119    return false;
17120}
17121function activateChildComponent(vm, direct) {
17122    if (direct) {
17123        vm._directInactive = false;
17124        if (isInInactiveTree(vm)) {
17125            return;
17126        }
17127    }
17128    else if (vm._directInactive) {
17129        return;
17130    }
17131    if (vm._inactive || vm._inactive === null) {
17132        vm._inactive = false;
17133        for (var i = 0; i < vm.$children.length; i++) {
17134            activateChildComponent(vm.$children[i]);
17135        }
17136        callHook$1(vm, 'activated');
17137    }
17138}
17139function deactivateChildComponent(vm, direct) {
17140    if (direct) {
17141        vm._directInactive = true;
17142        if (isInInactiveTree(vm)) {
17143            return;
17144        }
17145    }
17146    if (!vm._inactive) {
17147        vm._inactive = true;
17148        for (var i = 0; i < vm.$children.length; i++) {
17149            deactivateChildComponent(vm.$children[i]);
17150        }
17151        callHook$1(vm, 'deactivated');
17152    }
17153}
17154function callHook$1(vm, hook, args, setContext) {
17155    if (setContext === void 0) { setContext = true; }
17156    // #7573 disable dep collection when invoking lifecycle hooks
17157    pushTarget();
17158    var prevInst = currentInstance;
17159    var prevScope = getCurrentScope();
17160    setContext && setCurrentInstance(vm);
17161    var handlers = vm.$options[hook];
17162    var info = "".concat(hook, " hook");
17163    if (handlers) {
17164        for (var i = 0, j = handlers.length; i < j; i++) {
17165            invokeWithErrorHandling(handlers[i], vm, args || null, vm, info);
17166        }
17167    }
17168    if (vm._hasHookEvent) {
17169        vm.$emit('hook:' + hook);
17170    }
17171    if (setContext) {
17172        setCurrentInstance(prevInst);
17173        prevScope && prevScope.on();
17174    }
17175    popTarget();
17176}
17177
17178var MAX_UPDATE_COUNT = 100;
17179var queue = [];
17180var activatedChildren = [];
17181var has = {};
17182var circular = {};
17183var waiting = false;
17184var flushing = false;
17185var index$1 = 0;
17186/**
17187 * Reset the scheduler's state.
17188 */
17189function resetSchedulerState() {
17190    index$1 = queue.length = activatedChildren.length = 0;
17191    has = {};
17192    if (true) {
17193        circular = {};
17194    }
17195    waiting = flushing = false;
17196}
17197// Async edge case #6566 requires saving the timestamp when event listeners are
17198// attached. However, calling performance.now() has a perf overhead especially
17199// if the page has thousands of event listeners. Instead, we take a timestamp
17200// every time the scheduler flushes and use that for all event listeners
17201// attached during that flush.
17202var currentFlushTimestamp = 0;
17203// Async edge case fix requires storing an event listener's attach timestamp.
17204var getNow = Date.now;
17205// Determine what event timestamp the browser is using. Annoyingly, the
17206// timestamp can either be hi-res (relative to page load) or low-res
17207// (relative to UNIX epoch), so in order to compare time we have to use the
17208// same timestamp type when saving the flush timestamp.
17209// All IE versions use low-res event timestamps, and have problematic clock
17210// implementations (#9632)
17211if (inBrowser && !isIE) {
17212    var performance_1 = window.performance;
17213    if (performance_1 &&
17214        typeof performance_1.now === 'function' &&
17215        getNow() > document.createEvent('Event').timeStamp) {
17216        // if the event timestamp, although evaluated AFTER the Date.now(), is
17217        // smaller than it, it means the event is using a hi-res timestamp,
17218        // and we need to use the hi-res version for event listener timestamps as
17219        // well.
17220        getNow = function () { return performance_1.now(); };
17221    }
17222}
17223var sortCompareFn = function (a, b) {
17224    if (a.post) {
17225        if (!b.post)
17226            return 1;
17227    }
17228    else if (b.post) {
17229        return -1;
17230    }
17231    return a.id - b.id;
17232};
17233/**
17234 * Flush both queues and run the watchers.
17235 */
17236function flushSchedulerQueue() {
17237    currentFlushTimestamp = getNow();
17238    flushing = true;
17239    var watcher, id;
17240    // Sort queue before flush.
17241    // This ensures that:
17242    // 1. Components are updated from parent to child. (because parent is always
17243    //    created before the child)
17244    // 2. A component's user watchers are run before its render watcher (because
17245    //    user watchers are created before the render watcher)
17246    // 3. If a component is destroyed during a parent component's watcher run,
17247    //    its watchers can be skipped.
17248    queue.sort(sortCompareFn);
17249    // do not cache length because more watchers might be pushed
17250    // as we run existing watchers
17251    for (index$1 = 0; index$1 < queue.length; index$1++) {
17252        watcher = queue[index$1];
17253        if (watcher.before) {
17254            watcher.before();
17255        }
17256        id = watcher.id;
17257        has[id] = null;
17258        watcher.run();
17259        // in dev build, check and stop circular updates.
17260        if ( true && has[id] != null) {
17261            circular[id] = (circular[id] || 0) + 1;
17262            if (circular[id] > MAX_UPDATE_COUNT) {
17263                warn$2('You may have an infinite update loop ' +
17264                    (watcher.user
17265                        ? "in watcher with expression \"".concat(watcher.expression, "\"")
17266                        : "in a component render function."), watcher.vm);
17267                break;
17268            }
17269        }
17270    }
17271    // keep copies of post queues before resetting state
17272    var activatedQueue = activatedChildren.slice();
17273    var updatedQueue = queue.slice();
17274    resetSchedulerState();
17275    // call component updated and activated hooks
17276    callActivatedHooks(activatedQueue);
17277    callUpdatedHooks(updatedQueue);
17278    cleanupDeps();
17279    // devtool hook
17280    /* istanbul ignore if */
17281    if (devtools && config.devtools) {
17282        devtools.emit('flush');
17283    }
17284}
17285function callUpdatedHooks(queue) {
17286    var i = queue.length;
17287    while (i--) {
17288        var watcher = queue[i];
17289        var vm = watcher.vm;
17290        if (vm && vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {
17291            callHook$1(vm, 'updated');
17292        }
17293    }
17294}
17295/**
17296 * Queue a kept-alive component that was activated during patch.
17297 * The queue will be processed after the entire tree has been patched.
17298 */
17299function queueActivatedComponent(vm) {
17300    // setting _inactive to false here so that a render function can
17301    // rely on checking whether it's in an inactive tree (e.g. router-view)
17302    vm._inactive = false;
17303    activatedChildren.push(vm);
17304}
17305function callActivatedHooks(queue) {
17306    for (var i = 0; i < queue.length; i++) {
17307        queue[i]._inactive = true;
17308        activateChildComponent(queue[i], true /* true */);
17309    }
17310}
17311/**
17312 * Push a watcher into the watcher queue.
17313 * Jobs with duplicate IDs will be skipped unless it's
17314 * pushed when the queue is being flushed.
17315 */
17316function queueWatcher(watcher) {
17317    var id = watcher.id;
17318    if (has[id] != null) {
17319        return;
17320    }
17321    if (watcher === Dep.target && watcher.noRecurse) {
17322        return;
17323    }
17324    has[id] = true;
17325    if (!flushing) {
17326        queue.push(watcher);
17327    }
17328    else {
17329        // if already flushing, splice the watcher based on its id
17330        // if already past its id, it will be run next immediately.
17331        var i = queue.length - 1;
17332        while (i > index$1 && queue[i].id > watcher.id) {
17333            i--;
17334        }
17335        queue.splice(i + 1, 0, watcher);
17336    }
17337    // queue the flush
17338    if (!waiting) {
17339        waiting = true;
17340        if ( true && !config.async) {
17341            flushSchedulerQueue();
17342            return;
17343        }
17344        nextTick(flushSchedulerQueue);
17345    }
17346}
17347
17348var WATCHER = "watcher";
17349var WATCHER_CB = "".concat(WATCHER, " callback");
17350var WATCHER_GETTER = "".concat(WATCHER, " getter");
17351var WATCHER_CLEANUP = "".concat(WATCHER, " cleanup");
17352// Simple effect.
17353function watchEffect(effect, options) {
17354    return doWatch(effect, null, options);
17355}
17356function watchPostEffect(effect, options) {
17357    return doWatch(effect, null, ( true
17358        ? __assign(__assign({}, options), { flush: 'post' }) : 0));
17359}
17360function watchSyncEffect(effect, options) {
17361    return doWatch(effect, null, ( true
17362        ? __assign(__assign({}, options), { flush: 'sync' }) : 0));
17363}
17364// initial value for watchers to trigger on undefined initial values
17365var INITIAL_WATCHER_VALUE = {};
17366// implementation
17367function watch(source, cb, options) {
17368    if ( true && typeof cb !== 'function') {
17369        warn$2("`watch(fn, options?)` signature has been moved to a separate API. " +
17370            "Use `watchEffect(fn, options?)` instead. `watch` now only " +
17371            "supports `watch(source, cb, options?) signature.");
17372    }
17373    return doWatch(source, cb, options);
17374}
17375function doWatch(source, cb, _a) {
17376    var _b = _a === void 0 ? emptyObject : _a, immediate = _b.immediate, deep = _b.deep, _c = _b.flush, flush = _c === void 0 ? 'pre' : _c, onTrack = _b.onTrack, onTrigger = _b.onTrigger;
17377    if ( true && !cb) {
17378        if (immediate !== undefined) {
17379            warn$2("watch() \"immediate\" option is only respected when using the " +
17380                "watch(source, callback, options?) signature.");
17381        }
17382        if (deep !== undefined) {
17383            warn$2("watch() \"deep\" option is only respected when using the " +
17384                "watch(source, callback, options?) signature.");
17385        }
17386    }
17387    var warnInvalidSource = function (s) {
17388        warn$2("Invalid watch source: ".concat(s, ". A watch source can only be a getter/effect ") +
17389            "function, a ref, a reactive object, or an array of these types.");
17390    };
17391    var instance = currentInstance;
17392    var call = function (fn, type, args) {
17393        if (args === void 0) { args = null; }
17394        return invokeWithErrorHandling(fn, null, args, instance, type);
17395    };
17396    var getter;
17397    var forceTrigger = false;
17398    var isMultiSource = false;
17399    if (isRef(source)) {
17400        getter = function () { return source.value; };
17401        forceTrigger = isShallow(source);
17402    }
17403    else if (isReactive(source)) {
17404        getter = function () {
17405            source.__ob__.dep.depend();
17406            return source;
17407        };
17408        deep = true;
17409    }
17410    else if (isArray(source)) {
17411        isMultiSource = true;
17412        forceTrigger = source.some(function (s) { return isReactive(s) || isShallow(s); });
17413        getter = function () {
17414            return source.map(function (s) {
17415                if (isRef(s)) {
17416                    return s.value;
17417                }
17418                else if (isReactive(s)) {
17419                    return traverse(s);
17420                }
17421                else if (isFunction(s)) {
17422                    return call(s, WATCHER_GETTER);
17423                }
17424                else {
17425                     true && warnInvalidSource(s);
17426                }
17427            });
17428        };
17429    }
17430    else if (isFunction(source)) {
17431        if (cb) {
17432            // getter with cb
17433            getter = function () { return call(source, WATCHER_GETTER); };
17434        }
17435        else {
17436            // no cb -> simple effect
17437            getter = function () {
17438                if (instance && instance._isDestroyed) {
17439                    return;
17440                }
17441                if (cleanup) {
17442                    cleanup();
17443                }
17444                return call(source, WATCHER, [onCleanup]);
17445            };
17446        }
17447    }
17448    else {
17449        getter = noop;
17450         true && warnInvalidSource(source);
17451    }
17452    if (cb && deep) {
17453        var baseGetter_1 = getter;
17454        getter = function () { return traverse(baseGetter_1()); };
17455    }
17456    var cleanup;
17457    var onCleanup = function (fn) {
17458        cleanup = watcher.onStop = function () {
17459            call(fn, WATCHER_CLEANUP);
17460        };
17461    };
17462    // in SSR there is no need to setup an actual effect, and it should be noop
17463    // unless it's eager
17464    if (isServerRendering()) {
17465        // we will also not call the invalidate callback (+ runner is not set up)
17466        onCleanup = noop;
17467        if (!cb) {
17468            getter();
17469        }
17470        else if (immediate) {
17471            call(cb, WATCHER_CB, [
17472                getter(),
17473                isMultiSource ? [] : undefined,
17474                onCleanup
17475            ]);
17476        }
17477        return noop;
17478    }
17479    var watcher = new Watcher(currentInstance, getter, noop, {
17480        lazy: true
17481    });
17482    watcher.noRecurse = !cb;
17483    var oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE;
17484    // overwrite default run
17485    watcher.run = function () {
17486        if (!watcher.active) {
17487            return;
17488        }
17489        if (cb) {
17490            // watch(source, cb)
17491            var newValue = watcher.get();
17492            if (deep ||
17493                forceTrigger ||
17494                (isMultiSource
17495                    ? newValue.some(function (v, i) {
17496                        return hasChanged(v, oldValue[i]);
17497                    })
17498                    : hasChanged(newValue, oldValue))) {
17499                // cleanup before running cb again
17500                if (cleanup) {
17501                    cleanup();
17502                }
17503                call(cb, WATCHER_CB, [
17504                    newValue,
17505                    // pass undefined as the old value when it's changed for the first time
17506                    oldValue === INITIAL_WATCHER_VALUE ? undefined : oldValue,
17507                    onCleanup
17508                ]);
17509                oldValue = newValue;
17510            }
17511        }
17512        else {
17513            // watchEffect
17514            watcher.get();
17515        }
17516    };
17517    if (flush === 'sync') {
17518        watcher.update = watcher.run;
17519    }
17520    else if (flush === 'post') {
17521        watcher.post = true;
17522        watcher.update = function () { return queueWatcher(watcher); };
17523    }
17524    else {
17525        // pre
17526        watcher.update = function () {
17527            if (instance && instance === currentInstance && !instance._isMounted) {
17528                // pre-watcher triggered before
17529                var buffer = instance._preWatchers || (instance._preWatchers = []);
17530                if (buffer.indexOf(watcher) < 0)
17531                    buffer.push(watcher);
17532            }
17533            else {
17534                queueWatcher(watcher);
17535            }
17536        };
17537    }
17538    if (true) {
17539        watcher.onTrack = onTrack;
17540        watcher.onTrigger = onTrigger;
17541    }
17542    // initial run
17543    if (cb) {
17544        if (immediate) {
17545            watcher.run();
17546        }
17547        else {
17548            oldValue = watcher.get();
17549        }
17550    }
17551    else if (flush === 'post' && instance) {
17552        instance.$once('hook:mounted', function () { return watcher.get(); });
17553    }
17554    else {
17555        watcher.get();
17556    }
17557    return function () {
17558        watcher.teardown();
17559    };
17560}
17561
17562function provide(key, value) {
17563    if (!currentInstance) {
17564        if (true) {
17565            warn$2("provide() can only be used inside setup().");
17566        }
17567    }
17568    else {
17569        // TS doesn't allow symbol as index type
17570        resolveProvided(currentInstance)[key] = value;
17571    }
17572}
17573function resolveProvided(vm) {
17574    // by default an instance inherits its parent's provides object
17575    // but when it needs to provide values of its own, it creates its
17576    // own provides object using parent provides object as prototype.
17577    // this way in `inject` we can simply look up injections from direct
17578    // parent and let the prototype chain do the work.
17579    var existing = vm._provided;
17580    var parentProvides = vm.$parent && vm.$parent._provided;
17581    if (parentProvides === existing) {
17582        return (vm._provided = Object.create(parentProvides));
17583    }
17584    else {
17585        return existing;
17586    }
17587}
17588function inject(key, defaultValue, treatDefaultAsFactory) {
17589    if (treatDefaultAsFactory === void 0) { treatDefaultAsFactory = false; }
17590    // fallback to `currentRenderingInstance` so that this can be called in
17591    // a functional component
17592    var instance = currentInstance;
17593    if (instance) {
17594        // #2400
17595        // to support `app.use` plugins,
17596        // fallback to appContext's `provides` if the instance is at root
17597        var provides = instance.$parent && instance.$parent._provided;
17598        if (provides && key in provides) {
17599            // TS doesn't allow symbol as index type
17600            return provides[key];
17601        }
17602        else if (arguments.length > 1) {
17603            return treatDefaultAsFactory && isFunction(defaultValue)
17604                ? defaultValue.call(instance)
17605                : defaultValue;
17606        }
17607        else if (true) {
17608            warn$2("injection \"".concat(String(key), "\" not found."));
17609        }
17610    }
17611    else if (true) {
17612        warn$2("inject() can only be used inside setup() or functional components.");
17613    }
17614}
17615
17616/**
17617 * @internal this function needs manual public type declaration because it relies
17618 * on previously manually authored types from Vue 2
17619 */
17620function h(type, props, children) {
17621    if (!currentInstance) {
17622         true &&
17623            warn$2("globally imported h() can only be invoked when there is an active " +
17624                "component instance, e.g. synchronously in a component's render or setup function.");
17625    }
17626    return createElement$1(currentInstance, type, props, children, 2, true);
17627}
17628
17629function handleError(err, vm, info) {
17630    // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.
17631    // See: https://github.com/vuejs/vuex/issues/1505
17632    pushTarget();
17633    try {
17634        if (vm) {
17635            var cur = vm;
17636            while ((cur = cur.$parent)) {
17637                var hooks = cur.$options.errorCaptured;
17638                if (hooks) {
17639                    for (var i = 0; i < hooks.length; i++) {
17640                        try {
17641                            var capture = hooks[i].call(cur, err, vm, info) === false;
17642                            if (capture)
17643                                return;
17644                        }
17645                        catch (e) {
17646                            globalHandleError(e, cur, 'errorCaptured hook');
17647                        }
17648                    }
17649                }
17650            }
17651        }
17652        globalHandleError(err, vm, info);
17653    }
17654    finally {
17655        popTarget();
17656    }
17657}
17658function invokeWithErrorHandling(handler, context, args, vm, info) {
17659    var res;
17660    try {
17661        res = args ? handler.apply(context, args) : handler.call(context);
17662        if (res && !res._isVue && isPromise(res) && !res._handled) {
17663            res.catch(function (e) { return handleError(e, vm, info + " (Promise/async)"); });
17664            res._handled = true;
17665        }
17666    }
17667    catch (e) {
17668        handleError(e, vm, info);
17669    }
17670    return res;
17671}
17672function globalHandleError(err, vm, info) {
17673    if (config.errorHandler) {
17674        try {
17675            return config.errorHandler.call(null, err, vm, info);
17676        }
17677        catch (e) {
17678            // if the user intentionally throws the original error in the handler,
17679            // do not log it twice
17680            if (e !== err) {
17681                logError(e, null, 'config.errorHandler');
17682            }
17683        }
17684    }
17685    logError(err, vm, info);
17686}
17687function logError(err, vm, info) {
17688    if (true) {
17689        warn$2("Error in ".concat(info, ": \"").concat(err.toString(), "\""), vm);
17690    }
17691    /* istanbul ignore else */
17692    if (inBrowser && typeof console !== 'undefined') {
17693        console.error(err);
17694    }
17695    else {
17696        throw err;
17697    }
17698}
17699
17700/* globals MutationObserver */
17701var isUsingMicroTask = false;
17702var callbacks = [];
17703var pending = false;
17704function flushCallbacks() {
17705    pending = false;
17706    var copies = callbacks.slice(0);
17707    callbacks.length = 0;
17708    for (var i = 0; i < copies.length; i++) {
17709        copies[i]();
17710    }
17711}
17712// Here we have async deferring wrappers using microtasks.
17713// In 2.5 we used (macro) tasks (in combination with microtasks).
17714// However, it has subtle problems when state is changed right before repaint
17715// (e.g. #6813, out-in transitions).
17716// Also, using (macro) tasks in event handler would cause some weird behaviors
17717// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).
17718// So we now use microtasks everywhere, again.
17719// A major drawback of this tradeoff is that there are some scenarios
17720// where microtasks have too high a priority and fire in between supposedly
17721// sequential events (e.g. #4521, #6690, which have workarounds)
17722// or even between bubbling of the same event (#6566).
17723var timerFunc;
17724// The nextTick behavior leverages the microtask queue, which can be accessed
17725// via either native Promise.then or MutationObserver.
17726// MutationObserver has wider support, however it is seriously bugged in
17727// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It
17728// completely stops working after triggering a few times... so, if native
17729// Promise is available, we will use it:
17730/* istanbul ignore next, $flow-disable-line */
17731if (typeof Promise !== 'undefined' && isNative(Promise)) {
17732    var p_1 = Promise.resolve();
17733    timerFunc = function () {
17734        p_1.then(flushCallbacks);
17735        // In problematic UIWebViews, Promise.then doesn't completely break, but
17736        // it can get stuck in a weird state where callbacks are pushed into the
17737        // microtask queue but the queue isn't being flushed, until the browser
17738        // needs to do some other work, e.g. handle a timer. Therefore we can
17739        // "force" the microtask queue to be flushed by adding an empty timer.
17740        if (isIOS)
17741            setTimeout(noop);
17742    };
17743    isUsingMicroTask = true;
17744}
17745else if (!isIE &&
17746    typeof MutationObserver !== 'undefined' &&
17747    (isNative(MutationObserver) ||
17748        // PhantomJS and iOS 7.x
17749        MutationObserver.toString() === '[object MutationObserverConstructor]')) {
17750    // Use MutationObserver where native Promise is not available,
17751    // e.g. PhantomJS, iOS7, Android 4.4
17752    // (#6466 MutationObserver is unreliable in IE11)
17753    var counter_1 = 1;
17754    var observer = new MutationObserver(flushCallbacks);
17755    var textNode_1 = document.createTextNode(String(counter_1));
17756    observer.observe(textNode_1, {
17757        characterData: true
17758    });
17759    timerFunc = function () {
17760        counter_1 = (counter_1 + 1) % 2;
17761        textNode_1.data = String(counter_1);
17762    };
17763    isUsingMicroTask = true;
17764}
17765else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {
17766    // Fallback to setImmediate.
17767    // Technically it leverages the (macro) task queue,
17768    // but it is still a better choice than setTimeout.
17769    timerFunc = function () {
17770        setImmediate(flushCallbacks);
17771    };
17772}
17773else {
17774    // Fallback to setTimeout.
17775    timerFunc = function () {
17776        setTimeout(flushCallbacks, 0);
17777    };
17778}
17779/**
17780 * @internal
17781 */
17782function nextTick(cb, ctx) {
17783    var _resolve;
17784    callbacks.push(function () {
17785        if (cb) {
17786            try {
17787                cb.call(ctx);
17788            }
17789            catch (e) {
17790                handleError(e, ctx, 'nextTick');
17791            }
17792        }
17793        else if (_resolve) {
17794            _resolve(ctx);
17795        }
17796    });
17797    if (!pending) {
17798        pending = true;
17799        timerFunc();
17800    }
17801    // $flow-disable-line
17802    if (!cb && typeof Promise !== 'undefined') {
17803        return new Promise(function (resolve) {
17804            _resolve = resolve;
17805        });
17806    }
17807}
17808
17809function useCssModule(name) {
17810    if (name === void 0) { name = '$style'; }
17811    /* istanbul ignore else */
17812    {
17813        if (!currentInstance) {
17814             true && warn$2("useCssModule must be called inside setup()");
17815            return emptyObject;
17816        }
17817        var mod = currentInstance[name];
17818        if (!mod) {
17819             true &&
17820                warn$2("Current instance does not have CSS module named \"".concat(name, "\"."));
17821            return emptyObject;
17822        }
17823        return mod;
17824    }
17825}
17826
17827/**
17828 * Runtime helper for SFC's CSS variable injection feature.
17829 * @private
17830 */
17831function useCssVars(getter) {
17832    if (!inBrowser && !false)
17833        return;
17834    var instance = currentInstance;
17835    if (!instance) {
17836         true &&
17837            warn$2("useCssVars is called without current active component instance.");
17838        return;
17839    }
17840    watchPostEffect(function () {
17841        var el = instance.$el;
17842        var vars = getter(instance, instance._setupProxy);
17843        if (el && el.nodeType === 1) {
17844            var style = el.style;
17845            for (var key in vars) {
17846                style.setProperty("--".concat(key), vars[key]);
17847            }
17848        }
17849    });
17850}
17851
17852/**
17853 * v3-compatible async component API.
17854 * @internal the type is manually declared in <root>/types/v3-define-async-component.d.ts
17855 * because it relies on existing manual types
17856 */
17857function defineAsyncComponent(source) {
17858    if (isFunction(source)) {
17859        source = { loader: source };
17860    }
17861    var loader = source.loader, loadingComponent = source.loadingComponent, errorComponent = source.errorComponent, _a = source.delay, delay = _a === void 0 ? 200 : _a, timeout = source.timeout, // undefined = never times out
17862    _b = source.suspensible, // undefined = never times out
17863    suspensible = _b === void 0 ? false : _b, // in Vue 3 default is true
17864    userOnError = source.onError;
17865    if ( true && suspensible) {
17866        warn$2("The suspensible option for async components is not supported in Vue2. It is ignored.");
17867    }
17868    var pendingRequest = null;
17869    var retries = 0;
17870    var retry = function () {
17871        retries++;
17872        pendingRequest = null;
17873        return load();
17874    };
17875    var load = function () {
17876        var thisRequest;
17877        return (pendingRequest ||
17878            (thisRequest = pendingRequest =
17879                loader()
17880                    .catch(function (err) {
17881                    err = err instanceof Error ? err : new Error(String(err));
17882                    if (userOnError) {
17883                        return new Promise(function (resolve, reject) {
17884                            var userRetry = function () { return resolve(retry()); };
17885                            var userFail = function () { return reject(err); };
17886                            userOnError(err, userRetry, userFail, retries + 1);
17887                        });
17888                    }
17889                    else {
17890                        throw err;
17891                    }
17892                })
17893                    .then(function (comp) {
17894                    if (thisRequest !== pendingRequest && pendingRequest) {
17895                        return pendingRequest;
17896                    }
17897                    if ( true && !comp) {
17898                        warn$2("Async component loader resolved to undefined. " +
17899                            "If you are using retry(), make sure to return its return value.");
17900                    }
17901                    // interop module default
17902                    if (comp &&
17903                        (comp.__esModule || comp[Symbol.toStringTag] === 'Module')) {
17904                        comp = comp.default;
17905                    }
17906                    if ( true && comp && !isObject(comp) && !isFunction(comp)) {
17907                        throw new Error("Invalid async component load result: ".concat(comp));
17908                    }
17909                    return comp;
17910                })));
17911    };
17912    return function () {
17913        var component = load();
17914        return {
17915            component: component,
17916            delay: delay,
17917            timeout: timeout,
17918            error: errorComponent,
17919            loading: loadingComponent
17920        };
17921    };
17922}
17923
17924function createLifeCycle(hookName) {
17925    return function (fn, target) {
17926        if (target === void 0) { target = currentInstance; }
17927        if (!target) {
17928             true &&
17929                warn$2("".concat(formatName(hookName), " is called when there is no active component instance to be ") +
17930                    "associated with. " +
17931                    "Lifecycle injection APIs can only be used during execution of setup().");
17932            return;
17933        }
17934        return injectHook(target, hookName, fn);
17935    };
17936}
17937function formatName(name) {
17938    if (name === 'beforeDestroy') {
17939        name = 'beforeUnmount';
17940    }
17941    else if (name === 'destroyed') {
17942        name = 'unmounted';
17943    }
17944    return "on".concat(name[0].toUpperCase() + name.slice(1));
17945}
17946function injectHook(instance, hookName, fn) {
17947    var options = instance.$options;
17948    options[hookName] = mergeLifecycleHook(options[hookName], fn);
17949}
17950var onBeforeMount = createLifeCycle('beforeMount');
17951var onMounted = createLifeCycle('mounted');
17952var onBeforeUpdate = createLifeCycle('beforeUpdate');
17953var onUpdated = createLifeCycle('updated');
17954var onBeforeUnmount = createLifeCycle('beforeDestroy');
17955var onUnmounted = createLifeCycle('destroyed');
17956var onActivated = createLifeCycle('activated');
17957var onDeactivated = createLifeCycle('deactivated');
17958var onServerPrefetch = createLifeCycle('serverPrefetch');
17959var onRenderTracked = createLifeCycle('renderTracked');
17960var onRenderTriggered = createLifeCycle('renderTriggered');
17961var injectErrorCapturedHook = createLifeCycle('errorCaptured');
17962function onErrorCaptured(hook, target) {
17963    if (target === void 0) { target = currentInstance; }
17964    injectErrorCapturedHook(hook, target);
17965}
17966
17967/**
17968 * Note: also update dist/vue.runtime.mjs when adding new exports to this file.
17969 */
17970var version = '2.7.15';
17971/**
17972 * @internal type is manually declared in <root>/types/v3-define-component.d.ts
17973 */
17974function defineComponent(options) {
17975    return options;
17976}
17977
17978var seenObjects = new _Set();
17979/**
17980 * Recursively traverse an object to evoke all converted
17981 * getters, so that every nested property inside the object
17982 * is collected as a "deep" dependency.
17983 */
17984function traverse(val) {
17985    _traverse(val, seenObjects);
17986    seenObjects.clear();
17987    return val;
17988}
17989function _traverse(val, seen) {
17990    var i, keys;
17991    var isA = isArray(val);
17992    if ((!isA && !isObject(val)) ||
17993        val.__v_skip /* ReactiveFlags.SKIP */ ||
17994        Object.isFrozen(val) ||
17995        val instanceof VNode) {
17996        return;
17997    }
17998    if (val.__ob__) {
17999        var depId = val.__ob__.dep.id;
18000        if (seen.has(depId)) {
18001            return;
18002        }
18003        seen.add(depId);
18004    }
18005    if (isA) {
18006        i = val.length;
18007        while (i--)
18008            _traverse(val[i], seen);
18009    }
18010    else if (isRef(val)) {
18011        _traverse(val.value, seen);
18012    }
18013    else {
18014        keys = Object.keys(val);
18015        i = keys.length;
18016        while (i--)
18017            _traverse(val[keys[i]], seen);
18018    }
18019}
18020
18021var uid$1 = 0;
18022/**
18023 * A watcher parses an expression, collects dependencies,
18024 * and fires callback when the expression value changes.
18025 * This is used for both the $watch() api and directives.
18026 * @internal
18027 */
18028var Watcher = /** @class */ (function () {
18029    function Watcher(vm, expOrFn, cb, options, isRenderWatcher) {
18030        recordEffectScope(this, 
18031        // if the active effect scope is manually created (not a component scope),
18032        // prioritize it
18033        activeEffectScope && !activeEffectScope._vm
18034            ? activeEffectScope
18035            : vm
18036                ? vm._scope
18037                : undefined);
18038        if ((this.vm = vm) && isRenderWatcher) {
18039            vm._watcher = this;
18040        }
18041        // options
18042        if (options) {
18043            this.deep = !!options.deep;
18044            this.user = !!options.user;
18045            this.lazy = !!options.lazy;
18046            this.sync = !!options.sync;
18047            this.before = options.before;
18048            if (true) {
18049                this.onTrack = options.onTrack;
18050                this.onTrigger = options.onTrigger;
18051            }
18052        }
18053        else {
18054            this.deep = this.user = this.lazy = this.sync = false;
18055        }
18056        this.cb = cb;
18057        this.id = ++uid$1; // uid for batching
18058        this.active = true;
18059        this.post = false;
18060        this.dirty = this.lazy; // for lazy watchers
18061        this.deps = [];
18062        this.newDeps = [];
18063        this.depIds = new _Set();
18064        this.newDepIds = new _Set();
18065        this.expression =  true ? expOrFn.toString() : 0;
18066        // parse expression for getter
18067        if (isFunction(expOrFn)) {
18068            this.getter = expOrFn;
18069        }
18070        else {
18071            this.getter = parsePath(expOrFn);
18072            if (!this.getter) {
18073                this.getter = noop;
18074                 true &&
18075                    warn$2("Failed watching path: \"".concat(expOrFn, "\" ") +
18076                        'Watcher only accepts simple dot-delimited paths. ' +
18077                        'For full control, use a function instead.', vm);
18078            }
18079        }
18080        this.value = this.lazy ? undefined : this.get();
18081    }
18082    /**
18083     * Evaluate the getter, and re-collect dependencies.
18084     */
18085    Watcher.prototype.get = function () {
18086        pushTarget(this);
18087        var value;
18088        var vm = this.vm;
18089        try {
18090            value = this.getter.call(vm, vm);
18091        }
18092        catch (e) {
18093            if (this.user) {
18094                handleError(e, vm, "getter for watcher \"".concat(this.expression, "\""));
18095            }
18096            else {
18097                throw e;
18098            }
18099        }
18100        finally {
18101            // "touch" every property so they are all tracked as
18102            // dependencies for deep watching
18103            if (this.deep) {
18104                traverse(value);
18105            }
18106            popTarget();
18107            this.cleanupDeps();
18108        }
18109        return value;
18110    };
18111    /**
18112     * Add a dependency to this directive.
18113     */
18114    Watcher.prototype.addDep = function (dep) {
18115        var id = dep.id;
18116        if (!this.newDepIds.has(id)) {
18117            this.newDepIds.add(id);
18118            this.newDeps.push(dep);
18119            if (!this.depIds.has(id)) {
18120                dep.addSub(this);
18121            }
18122        }
18123    };
18124    /**
18125     * Clean up for dependency collection.
18126     */
18127    Watcher.prototype.cleanupDeps = function () {
18128        var i = this.deps.length;
18129        while (i--) {
18130            var dep = this.deps[i];
18131            if (!this.newDepIds.has(dep.id)) {
18132                dep.removeSub(this);
18133            }
18134        }
18135        var tmp = this.depIds;
18136        this.depIds = this.newDepIds;
18137        this.newDepIds = tmp;
18138        this.newDepIds.clear();
18139        tmp = this.deps;
18140        this.deps = this.newDeps;
18141        this.newDeps = tmp;
18142        this.newDeps.length = 0;
18143    };
18144    /**
18145     * Subscriber interface.
18146     * Will be called when a dependency changes.
18147     */
18148    Watcher.prototype.update = function () {
18149        /* istanbul ignore else */
18150        if (this.lazy) {
18151            this.dirty = true;
18152        }
18153        else if (this.sync) {
18154            this.run();
18155        }
18156        else {
18157            queueWatcher(this);
18158        }
18159    };
18160    /**
18161     * Scheduler job interface.
18162     * Will be called by the scheduler.
18163     */
18164    Watcher.prototype.run = function () {
18165        if (this.active) {
18166            var value = this.get();
18167            if (value !== this.value ||
18168                // Deep watchers and watchers on Object/Arrays should fire even
18169                // when the value is the same, because the value may
18170                // have mutated.
18171                isObject(value) ||
18172                this.deep) {
18173                // set new value
18174                var oldValue = this.value;
18175                this.value = value;
18176                if (this.user) {
18177                    var info = "callback for watcher \"".concat(this.expression, "\"");
18178                    invokeWithErrorHandling(this.cb, this.vm, [value, oldValue], this.vm, info);
18179                }
18180                else {
18181                    this.cb.call(this.vm, value, oldValue);
18182                }
18183            }
18184        }
18185    };
18186    /**
18187     * Evaluate the value of the watcher.
18188     * This only gets called for lazy watchers.
18189     */
18190    Watcher.prototype.evaluate = function () {
18191        this.value = this.get();
18192        this.dirty = false;
18193    };
18194    /**
18195     * Depend on all deps collected by this watcher.
18196     */
18197    Watcher.prototype.depend = function () {
18198        var i = this.deps.length;
18199        while (i--) {
18200            this.deps[i].depend();
18201        }
18202    };
18203    /**
18204     * Remove self from all dependencies' subscriber list.
18205     */
18206    Watcher.prototype.teardown = function () {
18207        if (this.vm && !this.vm._isBeingDestroyed) {
18208            remove$2(this.vm._scope.effects, this);
18209        }
18210        if (this.active) {
18211            var i = this.deps.length;
18212            while (i--) {
18213                this.deps[i].removeSub(this);
18214            }
18215            this.active = false;
18216            if (this.onStop) {
18217                this.onStop();
18218            }
18219        }
18220    };
18221    return Watcher;
18222}());
18223
18224var sharedPropertyDefinition = {
18225    enumerable: true,
18226    configurable: true,
18227    get: noop,
18228    set: noop
18229};
18230function proxy(target, sourceKey, key) {
18231    sharedPropertyDefinition.get = function proxyGetter() {
18232        return this[sourceKey][key];
18233    };
18234    sharedPropertyDefinition.set = function proxySetter(val) {
18235        this[sourceKey][key] = val;
18236    };
18237    Object.defineProperty(target, key, sharedPropertyDefinition);
18238}
18239function initState(vm) {
18240    var opts = vm.$options;
18241    if (opts.props)
18242        initProps$1(vm, opts.props);
18243    // Composition API
18244    initSetup(vm);
18245    if (opts.methods)
18246        initMethods(vm, opts.methods);
18247    if (opts.data) {
18248        initData(vm);
18249    }
18250    else {
18251        var ob = observe((vm._data = {}));
18252        ob && ob.vmCount++;
18253    }
18254    if (opts.computed)
18255        initComputed$1(vm, opts.computed);
18256    if (opts.watch && opts.watch !== nativeWatch) {
18257        initWatch(vm, opts.watch);
18258    }
18259}
18260function initProps$1(vm, propsOptions) {
18261    var propsData = vm.$options.propsData || {};
18262    var props = (vm._props = shallowReactive({}));
18263    // cache prop keys so that future props updates can iterate using Array
18264    // instead of dynamic object key enumeration.
18265    var keys = (vm.$options._propKeys = []);
18266    var isRoot = !vm.$parent;
18267    // root instance props should be converted
18268    if (!isRoot) {
18269        toggleObserving(false);
18270    }
18271    var _loop_1 = function (key) {
18272        keys.push(key);
18273        var value = validateProp(key, propsOptions, propsData, vm);
18274        /* istanbul ignore else */
18275        if (true) {
18276            var hyphenatedKey = hyphenate(key);
18277            if (isReservedAttribute(hyphenatedKey) ||
18278                config.isReservedAttr(hyphenatedKey)) {
18279                warn$2("\"".concat(hyphenatedKey, "\" is a reserved attribute and cannot be used as component prop."), vm);
18280            }
18281            defineReactive(props, key, value, function () {
18282                if (!isRoot && !isUpdatingChildComponent) {
18283                    warn$2("Avoid mutating a prop directly since the value will be " +
18284                        "overwritten whenever the parent component re-renders. " +
18285                        "Instead, use a data or computed property based on the prop's " +
18286                        "value. Prop being mutated: \"".concat(key, "\""), vm);
18287                }
18288            });
18289        }
18290        else {}
18291        // static props are already proxied on the component's prototype
18292        // during Vue.extend(). We only need to proxy props defined at
18293        // instantiation here.
18294        if (!(key in vm)) {
18295            proxy(vm, "_props", key);
18296        }
18297    };
18298    for (var key in propsOptions) {
18299        _loop_1(key);
18300    }
18301    toggleObserving(true);
18302}
18303function initData(vm) {
18304    var data = vm.$options.data;
18305    data = vm._data = isFunction(data) ? getData(data, vm) : data || {};
18306    if (!isPlainObject(data)) {
18307        data = {};
18308         true &&
18309            warn$2('data functions should return an object:\n' +
18310                'https://v2.vuejs.org/v2/guide/components.html#data-Must-Be-a-Function', vm);
18311    }
18312    // proxy data on instance
18313    var keys = Object.keys(data);
18314    var props = vm.$options.props;
18315    var methods = vm.$options.methods;
18316    var i = keys.length;
18317    while (i--) {
18318        var key = keys[i];
18319        if (true) {
18320            if (methods && hasOwn(methods, key)) {
18321                warn$2("Method \"".concat(key, "\" has already been defined as a data property."), vm);
18322            }
18323        }
18324        if (props && hasOwn(props, key)) {
18325             true &&
18326                warn$2("The data property \"".concat(key, "\" is already declared as a prop. ") +
18327                    "Use prop default value instead.", vm);
18328        }
18329        else if (!isReserved(key)) {
18330            proxy(vm, "_data", key);
18331        }
18332    }
18333    // observe data
18334    var ob = observe(data);
18335    ob && ob.vmCount++;
18336}
18337function getData(data, vm) {
18338    // #7573 disable dep collection when invoking data getters
18339    pushTarget();
18340    try {
18341        return data.call(vm, vm);
18342    }
18343    catch (e) {
18344        handleError(e, vm, "data()");
18345        return {};
18346    }
18347    finally {
18348        popTarget();
18349    }
18350}
18351var computedWatcherOptions = { lazy: true };
18352function initComputed$1(vm, computed) {
18353    // $flow-disable-line
18354    var watchers = (vm._computedWatchers = Object.create(null));
18355    // computed properties are just getters during SSR
18356    var isSSR = isServerRendering();
18357    for (var key in computed) {
18358        var userDef = computed[key];
18359        var getter = isFunction(userDef) ? userDef : userDef.get;
18360        if ( true && getter == null) {
18361            warn$2("Getter is missing for computed property \"".concat(key, "\"."), vm);
18362        }
18363        if (!isSSR) {
18364            // create internal watcher for the computed property.
18365            watchers[key] = new Watcher(vm, getter || noop, noop, computedWatcherOptions);
18366        }
18367        // component-defined computed properties are already defined on the
18368        // component prototype. We only need to define computed properties defined
18369        // at instantiation here.
18370        if (!(key in vm)) {
18371            defineComputed(vm, key, userDef);
18372        }
18373        else if (true) {
18374            if (key in vm.$data) {
18375                warn$2("The computed property \"".concat(key, "\" is already defined in data."), vm);
18376            }
18377            else if (vm.$options.props && key in vm.$options.props) {
18378                warn$2("The computed property \"".concat(key, "\" is already defined as a prop."), vm);
18379            }
18380            else if (vm.$options.methods && key in vm.$options.methods) {
18381                warn$2("The computed property \"".concat(key, "\" is already defined as a method."), vm);
18382            }
18383        }
18384    }
18385}
18386function defineComputed(target, key, userDef) {
18387    var shouldCache = !isServerRendering();
18388    if (isFunction(userDef)) {
18389        sharedPropertyDefinition.get = shouldCache
18390            ? createComputedGetter(key)
18391            : createGetterInvoker(userDef);
18392        sharedPropertyDefinition.set = noop;
18393    }
18394    else {
18395        sharedPropertyDefinition.get = userDef.get
18396            ? shouldCache && userDef.cache !== false
18397                ? createComputedGetter(key)
18398                : createGetterInvoker(userDef.get)
18399            : noop;
18400        sharedPropertyDefinition.set = userDef.set || noop;
18401    }
18402    if ( true && sharedPropertyDefinition.set === noop) {
18403        sharedPropertyDefinition.set = function () {
18404            warn$2("Computed property \"".concat(key, "\" was assigned to but it has no setter."), this);
18405        };
18406    }
18407    Object.defineProperty(target, key, sharedPropertyDefinition);
18408}
18409function createComputedGetter(key) {
18410    return function computedGetter() {
18411        var watcher = this._computedWatchers && this._computedWatchers[key];
18412        if (watcher) {
18413            if (watcher.dirty) {
18414                watcher.evaluate();
18415            }
18416            if (Dep.target) {
18417                if ( true && Dep.target.onTrack) {
18418                    Dep.target.onTrack({
18419                        effect: Dep.target,
18420                        target: this,
18421                        type: "get" /* TrackOpTypes.GET */,
18422                        key: key
18423                    });
18424                }
18425                watcher.depend();
18426            }
18427            return watcher.value;
18428        }
18429    };
18430}
18431function createGetterInvoker(fn) {
18432    return function computedGetter() {
18433        return fn.call(this, this);
18434    };
18435}
18436function initMethods(vm, methods) {
18437    var props = vm.$options.props;
18438    for (var key in methods) {
18439        if (true) {
18440            if (typeof methods[key] !== 'function') {
18441                warn$2("Method \"".concat(key, "\" has type \"").concat(typeof methods[key], "\" in the component definition. ") +
18442                    "Did you reference the function correctly?", vm);
18443            }
18444            if (props && hasOwn(props, key)) {
18445                warn$2("Method \"".concat(key, "\" has already been defined as a prop."), vm);
18446            }
18447            if (key in vm && isReserved(key)) {
18448                warn$2("Method \"".concat(key, "\" conflicts with an existing Vue instance method. ") +
18449                    "Avoid defining component methods that start with _ or $.");
18450            }
18451        }
18452        vm[key] = typeof methods[key] !== 'function' ? noop : bind$1(methods[key], vm);
18453    }
18454}
18455function initWatch(vm, watch) {
18456    for (var key in watch) {
18457        var handler = watch[key];
18458        if (isArray(handler)) {
18459            for (var i = 0; i < handler.length; i++) {
18460                createWatcher(vm, key, handler[i]);
18461            }
18462        }
18463        else {
18464            createWatcher(vm, key, handler);
18465        }
18466    }
18467}
18468function createWatcher(vm, expOrFn, handler, options) {
18469    if (isPlainObject(handler)) {
18470        options = handler;
18471        handler = handler.handler;
18472    }
18473    if (typeof handler === 'string') {
18474        handler = vm[handler];
18475    }
18476    return vm.$watch(expOrFn, handler, options);
18477}
18478function stateMixin(Vue) {
18479    // flow somehow has problems with directly declared definition object
18480    // when using Object.defineProperty, so we have to procedurally build up
18481    // the object here.
18482    var dataDef = {};
18483    dataDef.get = function () {
18484        return this._data;
18485    };
18486    var propsDef = {};
18487    propsDef.get = function () {
18488        return this._props;
18489    };
18490    if (true) {
18491        dataDef.set = function () {
18492            warn$2('Avoid replacing instance root $data. ' +
18493                'Use nested data properties instead.', this);
18494        };
18495        propsDef.set = function () {
18496            warn$2("$props is readonly.", this);
18497        };
18498    }
18499    Object.defineProperty(Vue.prototype, '$data', dataDef);
18500    Object.defineProperty(Vue.prototype, '$props', propsDef);
18501    Vue.prototype.$set = set;
18502    Vue.prototype.$delete = del;
18503    Vue.prototype.$watch = function (expOrFn, cb, options) {
18504        var vm = this;
18505        if (isPlainObject(cb)) {
18506            return createWatcher(vm, expOrFn, cb, options);
18507        }
18508        options = options || {};
18509        options.user = true;
18510        var watcher = new Watcher(vm, expOrFn, cb, options);
18511        if (options.immediate) {
18512            var info = "callback for immediate watcher \"".concat(watcher.expression, "\"");
18513            pushTarget();
18514            invokeWithErrorHandling(cb, vm, [watcher.value], vm, info);
18515            popTarget();
18516        }
18517        return function unwatchFn() {
18518            watcher.teardown();
18519        };
18520    };
18521}
18522
18523function initProvide(vm) {
18524    var provideOption = vm.$options.provide;
18525    if (provideOption) {
18526        var provided = isFunction(provideOption)
18527            ? provideOption.call(vm)
18528            : provideOption;
18529        if (!isObject(provided)) {
18530            return;
18531        }
18532        var source = resolveProvided(vm);
18533        // IE9 doesn't support Object.getOwnPropertyDescriptors so we have to
18534        // iterate the keys ourselves.
18535        var keys = hasSymbol ? Reflect.ownKeys(provided) : Object.keys(provided);
18536        for (var i = 0; i < keys.length; i++) {
18537            var key = keys[i];
18538            Object.defineProperty(source, key, Object.getOwnPropertyDescriptor(provided, key));
18539        }
18540    }
18541}
18542function initInjections(vm) {
18543    var result = resolveInject(vm.$options.inject, vm);
18544    if (result) {
18545        toggleObserving(false);
18546        Object.keys(result).forEach(function (key) {
18547            /* istanbul ignore else */
18548            if (true) {
18549                defineReactive(vm, key, result[key], function () {
18550                    warn$2("Avoid mutating an injected value directly since the changes will be " +
18551                        "overwritten whenever the provided component re-renders. " +
18552                        "injection being mutated: \"".concat(key, "\""), vm);
18553                });
18554            }
18555            else {}
18556        });
18557        toggleObserving(true);
18558    }
18559}
18560function resolveInject(inject, vm) {
18561    if (inject) {
18562        // inject is :any because flow is not smart enough to figure out cached
18563        var result = Object.create(null);
18564        var keys = hasSymbol ? Reflect.ownKeys(inject) : Object.keys(inject);
18565        for (var i = 0; i < keys.length; i++) {
18566            var key = keys[i];
18567            // #6574 in case the inject object is observed...
18568            if (key === '__ob__')
18569                continue;
18570            var provideKey = inject[key].from;
18571            if (provideKey in vm._provided) {
18572                result[key] = vm._provided[provideKey];
18573            }
18574            else if ('default' in inject[key]) {
18575                var provideDefault = inject[key].default;
18576                result[key] = isFunction(provideDefault)
18577                    ? provideDefault.call(vm)
18578                    : provideDefault;
18579            }
18580            else if (true) {
18581                warn$2("Injection \"".concat(key, "\" not found"), vm);
18582            }
18583        }
18584        return result;
18585    }
18586}
18587
18588var uid = 0;
18589function initMixin$1(Vue) {
18590    Vue.prototype._init = function (options) {
18591        var vm = this;
18592        // a uid
18593        vm._uid = uid++;
18594        var startTag, endTag;
18595        /* istanbul ignore if */
18596        if ( true && config.performance && mark) {
18597            startTag = "vue-perf-start:".concat(vm._uid);
18598            endTag = "vue-perf-end:".concat(vm._uid);
18599            mark(startTag);
18600        }
18601        // a flag to mark this as a Vue instance without having to do instanceof
18602        // check
18603        vm._isVue = true;
18604        // avoid instances from being observed
18605        vm.__v_skip = true;
18606        // effect scope
18607        vm._scope = new EffectScope(true /* detached */);
18608        vm._scope._vm = true;
18609        // merge options
18610        if (options && options._isComponent) {
18611            // optimize internal component instantiation
18612            // since dynamic options merging is pretty slow, and none of the
18613            // internal component options needs special treatment.
18614            initInternalComponent(vm, options);
18615        }
18616        else {
18617            vm.$options = mergeOptions(resolveConstructorOptions(vm.constructor), options || {}, vm);
18618        }
18619        /* istanbul ignore else */
18620        if (true) {
18621            initProxy(vm);
18622        }
18623        else {}
18624        // expose real self
18625        vm._self = vm;
18626        initLifecycle(vm);
18627        initEvents(vm);
18628        initRender(vm);
18629        callHook$1(vm, 'beforeCreate', undefined, false /* setContext */);
18630        initInjections(vm); // resolve injections before data/props
18631        initState(vm);
18632        initProvide(vm); // resolve provide after data/props
18633        callHook$1(vm, 'created');
18634        /* istanbul ignore if */
18635        if ( true && config.performance && mark) {
18636            vm._name = formatComponentName(vm, false);
18637            mark(endTag);
18638            measure("vue ".concat(vm._name, " init"), startTag, endTag);
18639        }
18640        if (vm.$options.el) {
18641            vm.$mount(vm.$options.el);
18642        }
18643    };
18644}
18645function initInternalComponent(vm, options) {
18646    var opts = (vm.$options = Object.create(vm.constructor.options));
18647    // doing this because it's faster than dynamic enumeration.
18648    var parentVnode = options._parentVnode;
18649    opts.parent = options.parent;
18650    opts._parentVnode = parentVnode;
18651    var vnodeComponentOptions = parentVnode.componentOptions;
18652    opts.propsData = vnodeComponentOptions.propsData;
18653    opts._parentListeners = vnodeComponentOptions.listeners;
18654    opts._renderChildren = vnodeComponentOptions.children;
18655    opts._componentTag = vnodeComponentOptions.tag;
18656    if (options.render) {
18657        opts.render = options.render;
18658        opts.staticRenderFns = options.staticRenderFns;
18659    }
18660}
18661function resolveConstructorOptions(Ctor) {
18662    var options = Ctor.options;
18663    if (Ctor.super) {
18664        var superOptions = resolveConstructorOptions(Ctor.super);
18665        var cachedSuperOptions = Ctor.superOptions;
18666        if (superOptions !== cachedSuperOptions) {
18667            // super option changed,
18668            // need to resolve new options.
18669            Ctor.superOptions = superOptions;
18670            // check if there are any late-modified/attached options (#4976)
18671            var modifiedOptions = resolveModifiedOptions(Ctor);
18672            // update base extend options
18673            if (modifiedOptions) {
18674                extend(Ctor.extendOptions, modifiedOptions);
18675            }
18676            options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);
18677            if (options.name) {
18678                options.components[options.name] = Ctor;
18679            }
18680        }
18681    }
18682    return options;
18683}
18684function resolveModifiedOptions(Ctor) {
18685    var modified;
18686    var latest = Ctor.options;
18687    var sealed = Ctor.sealedOptions;
18688    for (var key in latest) {
18689        if (latest[key] !== sealed[key]) {
18690            if (!modified)
18691                modified = {};
18692            modified[key] = latest[key];
18693        }
18694    }
18695    return modified;
18696}
18697
18698function FunctionalRenderContext(data, props, children, parent, Ctor) {
18699    var _this = this;
18700    var options = Ctor.options;
18701    // ensure the createElement function in functional components
18702    // gets a unique context - this is necessary for correct named slot check
18703    var contextVm;
18704    if (hasOwn(parent, '_uid')) {
18705        contextVm = Object.create(parent);
18706        contextVm._original = parent;
18707    }
18708    else {
18709        // the context vm passed in is a functional context as well.
18710        // in this case we want to make sure we are able to get a hold to the
18711        // real context instance.
18712        contextVm = parent;
18713        // @ts-ignore
18714        parent = parent._original;
18715    }
18716    var isCompiled = isTrue(options._compiled);
18717    var needNormalization = !isCompiled;
18718    this.data = data;
18719    this.props = props;
18720    this.children = children;
18721    this.parent = parent;
18722    this.listeners = data.on || emptyObject;
18723    this.injections = resolveInject(options.inject, parent);
18724    this.slots = function () {
18725        if (!_this.$slots) {
18726            normalizeScopedSlots(parent, data.scopedSlots, (_this.$slots = resolveSlots(children, parent)));
18727        }
18728        return _this.$slots;
18729    };
18730    Object.defineProperty(this, 'scopedSlots', {
18731        enumerable: true,
18732        get: function () {
18733            return normalizeScopedSlots(parent, data.scopedSlots, this.slots());
18734        }
18735    });
18736    // support for compiled functional template
18737    if (isCompiled) {
18738        // exposing $options for renderStatic()
18739        this.$options = options;
18740        // pre-resolve slots for renderSlot()
18741        this.$slots = this.slots();
18742        this.$scopedSlots = normalizeScopedSlots(parent, data.scopedSlots, this.$slots);
18743    }
18744    if (options._scopeId) {
18745        this._c = function (a, b, c, d) {
18746            var vnode = createElement$1(contextVm, a, b, c, d, needNormalization);
18747            if (vnode && !isArray(vnode)) {
18748                vnode.fnScopeId = options._scopeId;
18749                vnode.fnContext = parent;
18750            }
18751            return vnode;
18752        };
18753    }
18754    else {
18755        this._c = function (a, b, c, d) {
18756            return createElement$1(contextVm, a, b, c, d, needNormalization);
18757        };
18758    }
18759}
18760installRenderHelpers(FunctionalRenderContext.prototype);
18761function createFunctionalComponent(Ctor, propsData, data, contextVm, children) {
18762    var options = Ctor.options;
18763    var props = {};
18764    var propOptions = options.props;
18765    if (isDef(propOptions)) {
18766        for (var key in propOptions) {
18767            props[key] = validateProp(key, propOptions, propsData || emptyObject);
18768        }
18769    }
18770    else {
18771        if (isDef(data.attrs))
18772            mergeProps(props, data.attrs);
18773        if (isDef(data.props))
18774            mergeProps(props, data.props);
18775    }
18776    var renderContext = new FunctionalRenderContext(data, props, children, contextVm, Ctor);
18777    var vnode = options.render.call(null, renderContext._c, renderContext);
18778    if (vnode instanceof VNode) {
18779        return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext);
18780    }
18781    else if (isArray(vnode)) {
18782        var vnodes = normalizeChildren(vnode) || [];
18783        var res = new Array(vnodes.length);
18784        for (var i = 0; i < vnodes.length; i++) {
18785            res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);
18786        }
18787        return res;
18788    }
18789}
18790function cloneAndMarkFunctionalResult(vnode, data, contextVm, options, renderContext) {
18791    // #7817 clone node before setting fnContext, otherwise if the node is reused
18792    // (e.g. it was from a cached normal slot) the fnContext causes named slots
18793    // that should not be matched to match.
18794    var clone = cloneVNode(vnode);
18795    clone.fnContext = contextVm;
18796    clone.fnOptions = options;
18797    if (true) {
18798        (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext =
18799            renderContext;
18800    }
18801    if (data.slot) {
18802        (clone.data || (clone.data = {})).slot = data.slot;
18803    }
18804    return clone;
18805}
18806function mergeProps(to, from) {
18807    for (var key in from) {
18808        to[camelize(key)] = from[key];
18809    }
18810}
18811
18812function getComponentName(options) {
18813    return options.name || options.__name || options._componentTag;
18814}
18815// inline hooks to be invoked on component VNodes during patch
18816var componentVNodeHooks = {
18817    init: function (vnode, hydrating) {
18818        if (vnode.componentInstance &&
18819            !vnode.componentInstance._isDestroyed &&
18820            vnode.data.keepAlive) {
18821            // kept-alive components, treat as a patch
18822            var mountedNode = vnode; // work around flow
18823            componentVNodeHooks.prepatch(mountedNode, mountedNode);
18824        }
18825        else {
18826            var child = (vnode.componentInstance = createComponentInstanceForVnode(vnode, activeInstance));
18827            child.$mount(hydrating ? vnode.elm : undefined, hydrating);
18828        }
18829    },
18830    prepatch: function (oldVnode, vnode) {
18831        var options = vnode.componentOptions;
18832        var child = (vnode.componentInstance = oldVnode.componentInstance);
18833        updateChildComponent(child, options.propsData, // updated props
18834        options.listeners, // updated listeners
18835        vnode, // new parent vnode
18836        options.children // new children
18837        );
18838    },
18839    insert: function (vnode) {
18840        var context = vnode.context, componentInstance = vnode.componentInstance;
18841        if (!componentInstance._isMounted) {
18842            componentInstance._isMounted = true;
18843            callHook$1(componentInstance, 'mounted');
18844        }
18845        if (vnode.data.keepAlive) {
18846            if (context._isMounted) {
18847                // vue-router#1212
18848                // During updates, a kept-alive component's child components may
18849                // change, so directly walking the tree here may call activated hooks
18850                // on incorrect children. Instead we push them into a queue which will
18851                // be processed after the whole patch process ended.
18852                queueActivatedComponent(componentInstance);
18853            }
18854            else {
18855                activateChildComponent(componentInstance, true /* direct */);
18856            }
18857        }
18858    },
18859    destroy: function (vnode) {
18860        var componentInstance = vnode.componentInstance;
18861        if (!componentInstance._isDestroyed) {
18862            if (!vnode.data.keepAlive) {
18863                componentInstance.$destroy();
18864            }
18865            else {
18866                deactivateChildComponent(componentInstance, true /* direct */);
18867            }
18868        }
18869    }
18870};
18871var hooksToMerge = Object.keys(componentVNodeHooks);
18872function createComponent(Ctor, data, context, children, tag) {
18873    if (isUndef(Ctor)) {
18874        return;
18875    }
18876    var baseCtor = context.$options._base;
18877    // plain options object: turn it into a constructor
18878    if (isObject(Ctor)) {
18879        Ctor = baseCtor.extend(Ctor);
18880    }
18881    // if at this stage it's not a constructor or an async component factory,
18882    // reject.
18883    if (typeof Ctor !== 'function') {
18884        if (true) {
18885            warn$2("Invalid Component definition: ".concat(String(Ctor)), context);
18886        }
18887        return;
18888    }
18889    // async component
18890    var asyncFactory;
18891    // @ts-expect-error
18892    if (isUndef(Ctor.cid)) {
18893        asyncFactory = Ctor;
18894        Ctor = resolveAsyncComponent(asyncFactory, baseCtor);
18895        if (Ctor === undefined) {
18896            // return a placeholder node for async component, which is rendered
18897            // as a comment node but preserves all the raw information for the node.
18898            // the information will be used for async server-rendering and hydration.
18899            return createAsyncPlaceholder(asyncFactory, data, context, children, tag);
18900        }
18901    }
18902    data = data || {};
18903    // resolve constructor options in case global mixins are applied after
18904    // component constructor creation
18905    resolveConstructorOptions(Ctor);
18906    // transform component v-model data into props & events
18907    if (isDef(data.model)) {
18908        // @ts-expect-error
18909        transformModel(Ctor.options, data);
18910    }
18911    // extract props
18912    // @ts-expect-error
18913    var propsData = extractPropsFromVNodeData(data, Ctor, tag);
18914    // functional component
18915    // @ts-expect-error
18916    if (isTrue(Ctor.options.functional)) {
18917        return createFunctionalComponent(Ctor, propsData, data, context, children);
18918    }
18919    // extract listeners, since these needs to be treated as
18920    // child component listeners instead of DOM listeners
18921    var listeners = data.on;
18922    // replace with listeners with .native modifier
18923    // so it gets processed during parent component patch.
18924    data.on = data.nativeOn;
18925    // @ts-expect-error
18926    if (isTrue(Ctor.options.abstract)) {
18927        // abstract components do not keep anything
18928        // other than props & listeners & slot
18929        // work around flow
18930        var slot = data.slot;
18931        data = {};
18932        if (slot) {
18933            data.slot = slot;
18934        }
18935    }
18936    // install component management hooks onto the placeholder node
18937    installComponentHooks(data);
18938    // return a placeholder vnode
18939    // @ts-expect-error
18940    var name = getComponentName(Ctor.options) || tag;
18941    var vnode = new VNode(
18942    // @ts-expect-error
18943    "vue-component-".concat(Ctor.cid).concat(name ? "-".concat(name) : ''), data, undefined, undefined, undefined, context, 
18944    // @ts-expect-error
18945    { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children }, asyncFactory);
18946    return vnode;
18947}
18948function createComponentInstanceForVnode(
18949// we know it's MountedComponentVNode but flow doesn't
18950vnode, 
18951// activeInstance in lifecycle state
18952parent) {
18953    var options = {
18954        _isComponent: true,
18955        _parentVnode: vnode,
18956        parent: parent
18957    };
18958    // check inline-template render functions
18959    var inlineTemplate = vnode.data.inlineTemplate;
18960    if (isDef(inlineTemplate)) {
18961        options.render = inlineTemplate.render;
18962        options.staticRenderFns = inlineTemplate.staticRenderFns;
18963    }
18964    return new vnode.componentOptions.Ctor(options);
18965}
18966function installComponentHooks(data) {
18967    var hooks = data.hook || (data.hook = {});
18968    for (var i = 0; i < hooksToMerge.length; i++) {
18969        var key = hooksToMerge[i];
18970        var existing = hooks[key];
18971        var toMerge = componentVNodeHooks[key];
18972        // @ts-expect-error
18973        if (existing !== toMerge && !(existing && existing._merged)) {
18974            hooks[key] = existing ? mergeHook(toMerge, existing) : toMerge;
18975        }
18976    }
18977}
18978function mergeHook(f1, f2) {
18979    var merged = function (a, b) {
18980        // flow complains about extra args which is why we use any
18981        f1(a, b);
18982        f2(a, b);
18983    };
18984    merged._merged = true;
18985    return merged;
18986}
18987// transform component v-model info (value and callback) into
18988// prop and event handler respectively.
18989function transformModel(options, data) {
18990    var prop = (options.model && options.model.prop) || 'value';
18991    var event = (options.model && options.model.event) || 'input';
18992    (data.attrs || (data.attrs = {}))[prop] = data.model.value;
18993    var on = data.on || (data.on = {});
18994    var existing = on[event];
18995    var callback = data.model.callback;
18996    if (isDef(existing)) {
18997        if (isArray(existing)
18998            ? existing.indexOf(callback) === -1
18999            : existing !== callback) {
19000            on[event] = [callback].concat(existing);
19001        }
19002    }
19003    else {
19004        on[event] = callback;
19005    }
19006}
19007
19008var warn$2 = noop;
19009var tip = noop;
19010var generateComponentTrace; // work around flow check
19011var formatComponentName;
19012if (true) {
19013    var hasConsole_1 = typeof console !== 'undefined';
19014    var classifyRE_1 = /(?:^|[-_])(\w)/g;
19015    var classify_1 = function (str) {
19016        return str.replace(classifyRE_1, function (c) { return c.toUpperCase(); }).replace(/[-_]/g, '');
19017    };
19018    warn$2 = function (msg, vm) {
19019        if (vm === void 0) { vm = currentInstance; }
19020        var trace = vm ? generateComponentTrace(vm) : '';
19021        if (config.warnHandler) {
19022            config.warnHandler.call(null, msg, vm, trace);
19023        }
19024        else if (hasConsole_1 && !config.silent) {
19025            console.error("[Vue warn]: ".concat(msg).concat(trace));
19026        }
19027    };
19028    tip = function (msg, vm) {
19029        if (hasConsole_1 && !config.silent) {
19030            console.warn("[Vue tip]: ".concat(msg) + (vm ? generateComponentTrace(vm) : ''));
19031        }
19032    };
19033    formatComponentName = function (vm, includeFile) {
19034        if (vm.$root === vm) {
19035            return '<Root>';
19036        }
19037        var options = isFunction(vm) && vm.cid != null
19038            ? vm.options
19039            : vm._isVue
19040                ? vm.$options || vm.constructor.options
19041                : vm;
19042        var name = getComponentName(options);
19043        var file = options.__file;
19044        if (!name && file) {
19045            var match = file.match(/([^/\\]+)\.vue$/);
19046            name = match && match[1];
19047        }
19048        return ((name ? "<".concat(classify_1(name), ">") : "<Anonymous>") +
19049            (file && includeFile !== false ? " at ".concat(file) : ''));
19050    };
19051    var repeat_1 = function (str, n) {
19052        var res = '';
19053        while (n) {
19054            if (n % 2 === 1)
19055                res += str;
19056            if (n > 1)
19057                str += str;
19058            n >>= 1;
19059        }
19060        return res;
19061    };
19062    generateComponentTrace = function (vm) {
19063        if (vm._isVue && vm.$parent) {
19064            var tree = [];
19065            var currentRecursiveSequence = 0;
19066            while (vm) {
19067                if (tree.length > 0) {
19068                    var last = tree[tree.length - 1];
19069                    if (last.constructor === vm.constructor) {
19070                        currentRecursiveSequence++;
19071                        vm = vm.$parent;
19072                        continue;
19073                    }
19074                    else if (currentRecursiveSequence > 0) {
19075                        tree[tree.length - 1] = [last, currentRecursiveSequence];
19076                        currentRecursiveSequence = 0;
19077                    }
19078                }
19079                tree.push(vm);
19080                vm = vm.$parent;
19081            }
19082            return ('\n\nfound in\n\n' +
19083                tree
19084                    .map(function (vm, i) {
19085                    return "".concat(i === 0 ? '---> ' : repeat_1(' ', 5 + i * 2)).concat(isArray(vm)
19086                        ? "".concat(formatComponentName(vm[0]), "... (").concat(vm[1], " recursive calls)")
19087                        : formatComponentName(vm));
19088                })
19089                    .join('\n'));
19090        }
19091        else {
19092            return "\n\n(found in ".concat(formatComponentName(vm), ")");
19093        }
19094    };
19095}
19096
19097/**
19098 * Option overwriting strategies are functions that handle
19099 * how to merge a parent option value and a child option
19100 * value into the final value.
19101 */
19102var strats = config.optionMergeStrategies;
19103/**
19104 * Options with restrictions
19105 */
19106if (true) {
19107    strats.el = strats.propsData = function (parent, child, vm, key) {
19108        if (!vm) {
19109            warn$2("option \"".concat(key, "\" can only be used during instance ") +
19110                'creation with the `new` keyword.');
19111        }
19112        return defaultStrat(parent, child);
19113    };
19114}
19115/**
19116 * Helper that recursively merges two data objects together.
19117 */
19118function mergeData(to, from, recursive) {
19119    if (recursive === void 0) { recursive = true; }
19120    if (!from)
19121        return to;
19122    var key, toVal, fromVal;
19123    var keys = hasSymbol
19124        ? Reflect.ownKeys(from)
19125        : Object.keys(from);
19126    for (var i = 0; i < keys.length; i++) {
19127        key = keys[i];
19128        // in case the object is already observed...
19129        if (key === '__ob__')
19130            continue;
19131        toVal = to[key];
19132        fromVal = from[key];
19133        if (!recursive || !hasOwn(to, key)) {
19134            set(to, key, fromVal);
19135        }
19136        else if (toVal !== fromVal &&
19137            isPlainObject(toVal) &&
19138            isPlainObject(fromVal)) {
19139            mergeData(toVal, fromVal);
19140        }
19141    }
19142    return to;
19143}
19144/**
19145 * Data
19146 */
19147function mergeDataOrFn(parentVal, childVal, vm) {
19148    if (!vm) {
19149        // in a Vue.extend merge, both should be functions
19150        if (!childVal) {
19151            return parentVal;
19152        }
19153        if (!parentVal) {
19154            return childVal;
19155        }
19156        // when parentVal & childVal are both present,
19157        // we need to return a function that returns the
19158        // merged result of both functions... no need to
19159        // check if parentVal is a function here because
19160        // it has to be a function to pass previous merges.
19161        return function mergedDataFn() {
19162            return mergeData(isFunction(childVal) ? childVal.call(this, this) : childVal, isFunction(parentVal) ? parentVal.call(this, this) : parentVal);
19163        };
19164    }
19165    else {
19166        return function mergedInstanceDataFn() {
19167            // instance merge
19168            var instanceData = isFunction(childVal)
19169                ? childVal.call(vm, vm)
19170                : childVal;
19171            var defaultData = isFunction(parentVal)
19172                ? parentVal.call(vm, vm)
19173                : parentVal;
19174            if (instanceData) {
19175                return mergeData(instanceData, defaultData);
19176            }
19177            else {
19178                return defaultData;
19179            }
19180        };
19181    }
19182}
19183strats.data = function (parentVal, childVal, vm) {
19184    if (!vm) {
19185        if (childVal && typeof childVal !== 'function') {
19186             true &&
19187                warn$2('The "data" option should be a function ' +
19188                    'that returns a per-instance value in component ' +
19189                    'definitions.', vm);
19190            return parentVal;
19191        }
19192        return mergeDataOrFn(parentVal, childVal);
19193    }
19194    return mergeDataOrFn(parentVal, childVal, vm);
19195};
19196/**
19197 * Hooks and props are merged as arrays.
19198 */
19199function mergeLifecycleHook(parentVal, childVal) {
19200    var res = childVal
19201        ? parentVal
19202            ? parentVal.concat(childVal)
19203            : isArray(childVal)
19204                ? childVal
19205                : [childVal]
19206        : parentVal;
19207    return res ? dedupeHooks(res) : res;
19208}
19209function dedupeHooks(hooks) {
19210    var res = [];
19211    for (var i = 0; i < hooks.length; i++) {
19212        if (res.indexOf(hooks[i]) === -1) {
19213            res.push(hooks[i]);
19214        }
19215    }
19216    return res;
19217}
19218LIFECYCLE_HOOKS.forEach(function (hook) {
19219    strats[hook] = mergeLifecycleHook;
19220});
19221/**
19222 * Assets
19223 *
19224 * When a vm is present (instance creation), we need to do
19225 * a three-way merge between constructor options, instance
19226 * options and parent options.
19227 */
19228function mergeAssets(parentVal, childVal, vm, key) {
19229    var res = Object.create(parentVal || null);
19230    if (childVal) {
19231         true && assertObjectType(key, childVal, vm);
19232        return extend(res, childVal);
19233    }
19234    else {
19235        return res;
19236    }
19237}
19238ASSET_TYPES.forEach(function (type) {
19239    strats[type + 's'] = mergeAssets;
19240});
19241/**
19242 * Watchers.
19243 *
19244 * Watchers hashes should not overwrite one
19245 * another, so we merge them as arrays.
19246 */
19247strats.watch = function (parentVal, childVal, vm, key) {
19248    // work around Firefox's Object.prototype.watch...
19249    //@ts-expect-error work around
19250    if (parentVal === nativeWatch)
19251        parentVal = undefined;
19252    //@ts-expect-error work around
19253    if (childVal === nativeWatch)
19254        childVal = undefined;
19255    /* istanbul ignore if */
19256    if (!childVal)
19257        return Object.create(parentVal || null);
19258    if (true) {
19259        assertObjectType(key, childVal, vm);
19260    }
19261    if (!parentVal)
19262        return childVal;
19263    var ret = {};
19264    extend(ret, parentVal);
19265    for (var key_1 in childVal) {
19266        var parent_1 = ret[key_1];
19267        var child = childVal[key_1];
19268        if (parent_1 && !isArray(parent_1)) {
19269            parent_1 = [parent_1];
19270        }
19271        ret[key_1] = parent_1 ? parent_1.concat(child) : isArray(child) ? child : [child];
19272    }
19273    return ret;
19274};
19275/**
19276 * Other object hashes.
19277 */
19278strats.props =
19279    strats.methods =
19280        strats.inject =
19281            strats.computed =
19282                function (parentVal, childVal, vm, key) {
19283                    if (childVal && "development" !== 'production') {
19284                        assertObjectType(key, childVal, vm);
19285                    }
19286                    if (!parentVal)
19287                        return childVal;
19288                    var ret = Object.create(null);
19289                    extend(ret, parentVal);
19290                    if (childVal)
19291                        extend(ret, childVal);
19292                    return ret;
19293                };
19294strats.provide = function (parentVal, childVal) {
19295    if (!parentVal)
19296        return childVal;
19297    return function () {
19298        var ret = Object.create(null);
19299        mergeData(ret, isFunction(parentVal) ? parentVal.call(this) : parentVal);
19300        if (childVal) {
19301            mergeData(ret, isFunction(childVal) ? childVal.call(this) : childVal, false // non-recursive
19302            );
19303        }
19304        return ret;
19305    };
19306};
19307/**
19308 * Default strategy.
19309 */
19310var defaultStrat = function (parentVal, childVal) {
19311    return childVal === undefined ? parentVal : childVal;
19312};
19313/**
19314 * Validate component names
19315 */
19316function checkComponents(options) {
19317    for (var key in options.components) {
19318        validateComponentName(key);
19319    }
19320}
19321function validateComponentName(name) {
19322    if (!new RegExp("^[a-zA-Z][\\-\\.0-9_".concat(unicodeRegExp.source, "]*$")).test(name)) {
19323        warn$2('Invalid component name: "' +
19324            name +
19325            '". Component names ' +
19326            'should conform to valid custom element name in html5 specification.');
19327    }
19328    if (isBuiltInTag(name) || config.isReservedTag(name)) {
19329        warn$2('Do not use built-in or reserved HTML elements as component ' +
19330            'id: ' +
19331            name);
19332    }
19333}
19334/**
19335 * Ensure all props option syntax are normalized into the
19336 * Object-based format.
19337 */
19338function normalizeProps(options, vm) {
19339    var props = options.props;
19340    if (!props)
19341        return;
19342    var res = {};
19343    var i, val, name;
19344    if (isArray(props)) {
19345        i = props.length;
19346        while (i--) {
19347            val = props[i];
19348            if (typeof val === 'string') {
19349                name = camelize(val);
19350                res[name] = { type: null };
19351            }
19352            else if (true) {
19353                warn$2('props must be strings when using array syntax.');
19354            }
19355        }
19356    }
19357    else if (isPlainObject(props)) {
19358        for (var key in props) {
19359            val = props[key];
19360            name = camelize(key);
19361            res[name] = isPlainObject(val) ? val : { type: val };
19362        }
19363    }
19364    else if (true) {
19365        warn$2("Invalid value for option \"props\": expected an Array or an Object, " +
19366            "but got ".concat(toRawType(props), "."), vm);
19367    }
19368    options.props = res;
19369}
19370/**
19371 * Normalize all injections into Object-based format
19372 */
19373function normalizeInject(options, vm) {
19374    var inject = options.inject;
19375    if (!inject)
19376        return;
19377    var normalized = (options.inject = {});
19378    if (isArray(inject)) {
19379        for (var i = 0; i < inject.length; i++) {
19380            normalized[inject[i]] = { from: inject[i] };
19381        }
19382    }
19383    else if (isPlainObject(inject)) {
19384        for (var key in inject) {
19385            var val = inject[key];
19386            normalized[key] = isPlainObject(val)
19387                ? extend({ from: key }, val)
19388                : { from: val };
19389        }
19390    }
19391    else if (true) {
19392        warn$2("Invalid value for option \"inject\": expected an Array or an Object, " +
19393            "but got ".concat(toRawType(inject), "."), vm);
19394    }
19395}
19396/**
19397 * Normalize raw function directives into object format.
19398 */
19399function normalizeDirectives$1(options) {
19400    var dirs = options.directives;
19401    if (dirs) {
19402        for (var key in dirs) {
19403            var def = dirs[key];
19404            if (isFunction(def)) {
19405                dirs[key] = { bind: def, update: def };
19406            }
19407        }
19408    }
19409}
19410function assertObjectType(name, value, vm) {
19411    if (!isPlainObject(value)) {
19412        warn$2("Invalid value for option \"".concat(name, "\": expected an Object, ") +
19413            "but got ".concat(toRawType(value), "."), vm);
19414    }
19415}
19416/**
19417 * Merge two option objects into a new one.
19418 * Core utility used in both instantiation and inheritance.
19419 */
19420function mergeOptions(parent, child, vm) {
19421    if (true) {
19422        checkComponents(child);
19423    }
19424    if (isFunction(child)) {
19425        // @ts-expect-error
19426        child = child.options;
19427    }
19428    normalizeProps(child, vm);
19429    normalizeInject(child, vm);
19430    normalizeDirectives$1(child);
19431    // Apply extends and mixins on the child options,
19432    // but only if it is a raw options object that isn't
19433    // the result of another mergeOptions call.
19434    // Only merged options has the _base property.
19435    if (!child._base) {
19436        if (child.extends) {
19437            parent = mergeOptions(parent, child.extends, vm);
19438        }
19439        if (child.mixins) {
19440            for (var i = 0, l = child.mixins.length; i < l; i++) {
19441                parent = mergeOptions(parent, child.mixins[i], vm);
19442            }
19443        }
19444    }
19445    var options = {};
19446    var key;
19447    for (key in parent) {
19448        mergeField(key);
19449    }
19450    for (key in child) {
19451        if (!hasOwn(parent, key)) {
19452            mergeField(key);
19453        }
19454    }
19455    function mergeField(key) {
19456        var strat = strats[key] || defaultStrat;
19457        options[key] = strat(parent[key], child[key], vm, key);
19458    }
19459    return options;
19460}
19461/**
19462 * Resolve an asset.
19463 * This function is used because child instances need access
19464 * to assets defined in its ancestor chain.
19465 */
19466function resolveAsset(options, type, id, warnMissing) {
19467    /* istanbul ignore if */
19468    if (typeof id !== 'string') {
19469        return;
19470    }
19471    var assets = options[type];
19472    // check local registration variations first
19473    if (hasOwn(assets, id))
19474        return assets[id];
19475    var camelizedId = camelize(id);
19476    if (hasOwn(assets, camelizedId))
19477        return assets[camelizedId];
19478    var PascalCaseId = capitalize(camelizedId);
19479    if (hasOwn(assets, PascalCaseId))
19480        return assets[PascalCaseId];
19481    // fallback to prototype chain
19482    var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];
19483    if ( true && warnMissing && !res) {
19484        warn$2('Failed to resolve ' + type.slice(0, -1) + ': ' + id);
19485    }
19486    return res;
19487}
19488
19489function validateProp(key, propOptions, propsData, vm) {
19490    var prop = propOptions[key];
19491    var absent = !hasOwn(propsData, key);
19492    var value = propsData[key];
19493    // boolean casting
19494    var booleanIndex = getTypeIndex(Boolean, prop.type);
19495    if (booleanIndex > -1) {
19496        if (absent && !hasOwn(prop, 'default')) {
19497            value = false;
19498        }
19499        else if (value === '' || value === hyphenate(key)) {
19500            // only cast empty string / same name to boolean if
19501            // boolean has higher priority
19502            var stringIndex = getTypeIndex(String, prop.type);
19503            if (stringIndex < 0 || booleanIndex < stringIndex) {
19504                value = true;
19505            }
19506        }
19507    }
19508    // check default value
19509    if (value === undefined) {
19510        value = getPropDefaultValue(vm, prop, key);
19511        // since the default value is a fresh copy,
19512        // make sure to observe it.
19513        var prevShouldObserve = shouldObserve;
19514        toggleObserving(true);
19515        observe(value);
19516        toggleObserving(prevShouldObserve);
19517    }
19518    if (true) {
19519        assertProp(prop, key, value, vm, absent);
19520    }
19521    return value;
19522}
19523/**
19524 * Get the default value of a prop.
19525 */
19526function getPropDefaultValue(vm, prop, key) {
19527    // no default, return undefined
19528    if (!hasOwn(prop, 'default')) {
19529        return undefined;
19530    }
19531    var def = prop.default;
19532    // warn against non-factory defaults for Object & Array
19533    if ( true && isObject(def)) {
19534        warn$2('Invalid default value for prop "' +
19535            key +
19536            '": ' +
19537            'Props with type Object/Array must use a factory function ' +
19538            'to return the default value.', vm);
19539    }
19540    // the raw prop value was also undefined from previous render,
19541    // return previous default value to avoid unnecessary watcher trigger
19542    if (vm &&
19543        vm.$options.propsData &&
19544        vm.$options.propsData[key] === undefined &&
19545        vm._props[key] !== undefined) {
19546        return vm._props[key];
19547    }
19548    // call factory function for non-Function types
19549    // a value is Function if its prototype is function even across different execution context
19550    return isFunction(def) && getType(prop.type) !== 'Function'
19551        ? def.call(vm)
19552        : def;
19553}
19554/**
19555 * Assert whether a prop is valid.
19556 */
19557function assertProp(prop, name, value, vm, absent) {
19558    if (prop.required && absent) {
19559        warn$2('Missing required prop: "' + name + '"', vm);
19560        return;
19561    }
19562    if (value == null && !prop.required) {
19563        return;
19564    }
19565    var type = prop.type;
19566    var valid = !type || type === true;
19567    var expectedTypes = [];
19568    if (type) {
19569        if (!isArray(type)) {
19570            type = [type];
19571        }
19572        for (var i = 0; i < type.length && !valid; i++) {
19573            var assertedType = assertType(value, type[i], vm);
19574            expectedTypes.push(assertedType.expectedType || '');
19575            valid = assertedType.valid;
19576        }
19577    }
19578    var haveExpectedTypes = expectedTypes.some(function (t) { return t; });
19579    if (!valid && haveExpectedTypes) {
19580        warn$2(getInvalidTypeMessage(name, value, expectedTypes), vm);
19581        return;
19582    }
19583    var validator = prop.validator;
19584    if (validator) {
19585        if (!validator(value)) {
19586            warn$2('Invalid prop: custom validator check failed for prop "' + name + '".', vm);
19587        }
19588    }
19589}
19590var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol|BigInt)$/;
19591function assertType(value, type, vm) {
19592    var valid;
19593    var expectedType = getType(type);
19594    if (simpleCheckRE.test(expectedType)) {
19595        var t = typeof value;
19596        valid = t === expectedType.toLowerCase();
19597        // for primitive wrapper objects
19598        if (!valid && t === 'object') {
19599            valid = value instanceof type;
19600        }
19601    }
19602    else if (expectedType === 'Object') {
19603        valid = isPlainObject(value);
19604    }
19605    else if (expectedType === 'Array') {
19606        valid = isArray(value);
19607    }
19608    else {
19609        try {
19610            valid = value instanceof type;
19611        }
19612        catch (e) {
19613            warn$2('Invalid prop type: "' + String(type) + '" is not a constructor', vm);
19614            valid = false;
19615        }
19616    }
19617    return {
19618        valid: valid,
19619        expectedType: expectedType
19620    };
19621}
19622var functionTypeCheckRE = /^\s*function (\w+)/;
19623/**
19624 * Use function string name to check built-in types,
19625 * because a simple equality check will fail when running
19626 * across different vms / iframes.
19627 */
19628function getType(fn) {
19629    var match = fn && fn.toString().match(functionTypeCheckRE);
19630    return match ? match[1] : '';
19631}
19632function isSameType(a, b) {
19633    return getType(a) === getType(b);
19634}
19635function getTypeIndex(type, expectedTypes) {
19636    if (!isArray(expectedTypes)) {
19637        return isSameType(expectedTypes, type) ? 0 : -1;
19638    }
19639    for (var i = 0, len = expectedTypes.length; i < len; i++) {
19640        if (isSameType(expectedTypes[i], type)) {
19641            return i;
19642        }
19643    }
19644    return -1;
19645}
19646function getInvalidTypeMessage(name, value, expectedTypes) {
19647    var message = "Invalid prop: type check failed for prop \"".concat(name, "\".") +
19648        " Expected ".concat(expectedTypes.map(capitalize).join(', '));
19649    var expectedType = expectedTypes[0];
19650    var receivedType = toRawType(value);
19651    // check if we need to specify expected value
19652    if (expectedTypes.length === 1 &&
19653        isExplicable(expectedType) &&
19654        isExplicable(typeof value) &&
19655        !isBoolean(expectedType, receivedType)) {
19656        message += " with value ".concat(styleValue(value, expectedType));
19657    }
19658    message += ", got ".concat(receivedType, " ");
19659    // check if we need to specify received value
19660    if (isExplicable(receivedType)) {
19661        message += "with value ".concat(styleValue(value, receivedType), ".");
19662    }
19663    return message;
19664}
19665function styleValue(value, type) {
19666    if (type === 'String') {
19667        return "\"".concat(value, "\"");
19668    }
19669    else if (type === 'Number') {
19670        return "".concat(Number(value));
19671    }
19672    else {
19673        return "".concat(value);
19674    }
19675}
19676var EXPLICABLE_TYPES = ['string', 'number', 'boolean'];
19677function isExplicable(value) {
19678    return EXPLICABLE_TYPES.some(function (elem) { return value.toLowerCase() === elem; });
19679}
19680function isBoolean() {
19681    var args = [];
19682    for (var _i = 0; _i < arguments.length; _i++) {
19683        args[_i] = arguments[_i];
19684    }
19685    return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; });
19686}
19687
19688function Vue(options) {
19689    if ( true && !(this instanceof Vue)) {
19690        warn$2('Vue is a constructor and should be called with the `new` keyword');
19691    }
19692    this._init(options);
19693}
19694//@ts-expect-error Vue has function type
19695initMixin$1(Vue);
19696//@ts-expect-error Vue has function type
19697stateMixin(Vue);
19698//@ts-expect-error Vue has function type
19699eventsMixin(Vue);
19700//@ts-expect-error Vue has function type
19701lifecycleMixin(Vue);
19702//@ts-expect-error Vue has function type
19703renderMixin(Vue);
19704
19705function initUse(Vue) {
19706    Vue.use = function (plugin) {
19707        var installedPlugins = this._installedPlugins || (this._installedPlugins = []);
19708        if (installedPlugins.indexOf(plugin) > -1) {
19709            return this;
19710        }
19711        // additional parameters
19712        var args = toArray(arguments, 1);
19713        args.unshift(this);
19714        if (isFunction(plugin.install)) {
19715            plugin.install.apply(plugin, args);
19716        }
19717        else if (isFunction(plugin)) {
19718            plugin.apply(null, args);
19719        }
19720        installedPlugins.push(plugin);
19721        return this;
19722    };
19723}
19724
19725function initMixin(Vue) {
19726    Vue.mixin = function (mixin) {
19727        this.options = mergeOptions(this.options, mixin);
19728        return this;
19729    };
19730}
19731
19732function initExtend(Vue) {
19733    /**
19734     * Each instance constructor, including Vue, has a unique
19735     * cid. This enables us to create wrapped "child
19736     * constructors" for prototypal inheritance and cache them.
19737     */
19738    Vue.cid = 0;
19739    var cid = 1;
19740    /**
19741     * Class inheritance
19742     */
19743    Vue.extend = function (extendOptions) {
19744        extendOptions = extendOptions || {};
19745        var Super = this;
19746        var SuperId = Super.cid;
19747        var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});
19748        if (cachedCtors[SuperId]) {
19749            return cachedCtors[SuperId];
19750        }
19751        var name = getComponentName(extendOptions) || getComponentName(Super.options);
19752        if ( true && name) {
19753            validateComponentName(name);
19754        }
19755        var Sub = function VueComponent(options) {
19756            this._init(options);
19757        };
19758        Sub.prototype = Object.create(Super.prototype);
19759        Sub.prototype.constructor = Sub;
19760        Sub.cid = cid++;
19761        Sub.options = mergeOptions(Super.options, extendOptions);
19762        Sub['super'] = Super;
19763        // For props and computed properties, we define the proxy getters on
19764        // the Vue instances at extension time, on the extended prototype. This
19765        // avoids Object.defineProperty calls for each instance created.
19766        if (Sub.options.props) {
19767            initProps(Sub);
19768        }
19769        if (Sub.options.computed) {
19770            initComputed(Sub);
19771        }
19772        // allow further extension/mixin/plugin usage
19773        Sub.extend = Super.extend;
19774        Sub.mixin = Super.mixin;
19775        Sub.use = Super.use;
19776        // create asset registers, so extended classes
19777        // can have their private assets too.
19778        ASSET_TYPES.forEach(function (type) {
19779            Sub[type] = Super[type];
19780        });
19781        // enable recursive self-lookup
19782        if (name) {
19783            Sub.options.components[name] = Sub;
19784        }
19785        // keep a reference to the super options at extension time.
19786        // later at instantiation we can check if Super's options have
19787        // been updated.
19788        Sub.superOptions = Super.options;
19789        Sub.extendOptions = extendOptions;
19790        Sub.sealedOptions = extend({}, Sub.options);
19791        // cache constructor
19792        cachedCtors[SuperId] = Sub;
19793        return Sub;
19794    };
19795}
19796function initProps(Comp) {
19797    var props = Comp.options.props;
19798    for (var key in props) {
19799        proxy(Comp.prototype, "_props", key);
19800    }
19801}
19802function initComputed(Comp) {
19803    var computed = Comp.options.computed;
19804    for (var key in computed) {
19805        defineComputed(Comp.prototype, key, computed[key]);
19806    }
19807}
19808
19809function initAssetRegisters(Vue) {
19810    /**
19811     * Create asset registration methods.
19812     */
19813    ASSET_TYPES.forEach(function (type) {
19814        // @ts-expect-error function is not exact same type
19815        Vue[type] = function (id, definition) {
19816            if (!definition) {
19817                return this.options[type + 's'][id];
19818            }
19819            else {
19820                /* istanbul ignore if */
19821                if ( true && type === 'component') {
19822                    validateComponentName(id);
19823                }
19824                if (type === 'component' && isPlainObject(definition)) {
19825                    // @ts-expect-error
19826                    definition.name = definition.name || id;
19827                    definition = this.options._base.extend(definition);
19828                }
19829                if (type === 'directive' && isFunction(definition)) {
19830                    definition = { bind: definition, update: definition };
19831                }
19832                this.options[type + 's'][id] = definition;
19833                return definition;
19834            }
19835        };
19836    });
19837}
19838
19839function _getComponentName(opts) {
19840    return opts && (getComponentName(opts.Ctor.options) || opts.tag);
19841}
19842function matches(pattern, name) {
19843    if (isArray(pattern)) {
19844        return pattern.indexOf(name) > -1;
19845    }
19846    else if (typeof pattern === 'string') {
19847        return pattern.split(',').indexOf(name) > -1;
19848    }
19849    else if (isRegExp(pattern)) {
19850        return pattern.test(name);
19851    }
19852    /* istanbul ignore next */
19853    return false;
19854}
19855function pruneCache(keepAliveInstance, filter) {
19856    var cache = keepAliveInstance.cache, keys = keepAliveInstance.keys, _vnode = keepAliveInstance._vnode;
19857    for (var key in cache) {
19858        var entry = cache[key];
19859        if (entry) {
19860            var name_1 = entry.name;
19861            if (name_1 && !filter(name_1)) {
19862                pruneCacheEntry(cache, key, keys, _vnode);
19863            }
19864        }
19865    }
19866}
19867function pruneCacheEntry(cache, key, keys, current) {
19868    var entry = cache[key];
19869    if (entry && (!current || entry.tag !== current.tag)) {
19870        // @ts-expect-error can be undefined
19871        entry.componentInstance.$destroy();
19872    }
19873    cache[key] = null;
19874    remove$2(keys, key);
19875}
19876var patternTypes = [String, RegExp, Array];
19877// TODO defineComponent
19878var KeepAlive = {
19879    name: 'keep-alive',
19880    abstract: true,
19881    props: {
19882        include: patternTypes,
19883        exclude: patternTypes,
19884        max: [String, Number]
19885    },
19886    methods: {
19887        cacheVNode: function () {
19888            var _a = this, cache = _a.cache, keys = _a.keys, vnodeToCache = _a.vnodeToCache, keyToCache = _a.keyToCache;
19889            if (vnodeToCache) {
19890                var tag = vnodeToCache.tag, componentInstance = vnodeToCache.componentInstance, componentOptions = vnodeToCache.componentOptions;
19891                cache[keyToCache] = {
19892                    name: _getComponentName(componentOptions),
19893                    tag: tag,
19894                    componentInstance: componentInstance
19895                };
19896                keys.push(keyToCache);
19897                // prune oldest entry
19898                if (this.max && keys.length > parseInt(this.max)) {
19899                    pruneCacheEntry(cache, keys[0], keys, this._vnode);
19900                }
19901                this.vnodeToCache = null;
19902            }
19903        }
19904    },
19905    created: function () {
19906        this.cache = Object.create(null);
19907        this.keys = [];
19908    },
19909    destroyed: function () {
19910        for (var key in this.cache) {
19911            pruneCacheEntry(this.cache, key, this.keys);
19912        }
19913    },
19914    mounted: function () {
19915        var _this = this;
19916        this.cacheVNode();
19917        this.$watch('include', function (val) {
19918            pruneCache(_this, function (name) { return matches(val, name); });
19919        });
19920        this.$watch('exclude', function (val) {
19921            pruneCache(_this, function (name) { return !matches(val, name); });
19922        });
19923    },
19924    updated: function () {
19925        this.cacheVNode();
19926    },
19927    render: function () {
19928        var slot = this.$slots.default;
19929        var vnode = getFirstComponentChild(slot);
19930        var componentOptions = vnode && vnode.componentOptions;
19931        if (componentOptions) {
19932            // check pattern
19933            var name_2 = _getComponentName(componentOptions);
19934            var _a = this, include = _a.include, exclude = _a.exclude;
19935            if (
19936            // not included
19937            (include && (!name_2 || !matches(include, name_2))) ||
19938                // excluded
19939                (exclude && name_2 && matches(exclude, name_2))) {
19940                return vnode;
19941            }
19942            var _b = this, cache = _b.cache, keys = _b.keys;
19943            var key = vnode.key == null
19944                ? // same constructor may get registered as different local components
19945                    // so cid alone is not enough (#3269)
19946                    componentOptions.Ctor.cid +
19947                        (componentOptions.tag ? "::".concat(componentOptions.tag) : '')
19948                : vnode.key;
19949            if (cache[key]) {
19950                vnode.componentInstance = cache[key].componentInstance;
19951                // make current key freshest
19952                remove$2(keys, key);
19953                keys.push(key);
19954            }
19955            else {
19956                // delay setting the cache until update
19957                this.vnodeToCache = vnode;
19958                this.keyToCache = key;
19959            }
19960            // @ts-expect-error can vnode.data can be undefined
19961            vnode.data.keepAlive = true;
19962        }
19963        return vnode || (slot && slot[0]);
19964    }
19965};
19966
19967var builtInComponents = {
19968    KeepAlive: KeepAlive
19969};
19970
19971function initGlobalAPI(Vue) {
19972    // config
19973    var configDef = {};
19974    configDef.get = function () { return config; };
19975    if (true) {
19976        configDef.set = function () {
19977            warn$2('Do not replace the Vue.config object, set individual fields instead.');
19978        };
19979    }
19980    Object.defineProperty(Vue, 'config', configDef);
19981    // exposed util methods.
19982    // NOTE: these are not considered part of the public API - avoid relying on
19983    // them unless you are aware of the risk.
19984    Vue.util = {
19985        warn: warn$2,
19986        extend: extend,
19987        mergeOptions: mergeOptions,
19988        defineReactive: defineReactive
19989    };
19990    Vue.set = set;
19991    Vue.delete = del;
19992    Vue.nextTick = nextTick;
19993    // 2.6 explicit observable API
19994    Vue.observable = function (obj) {
19995        observe(obj);
19996        return obj;
19997    };
19998    Vue.options = Object.create(null);
19999    ASSET_TYPES.forEach(function (type) {
20000        Vue.options[type + 's'] = Object.create(null);
20001    });
20002    // this is used to identify the "base" constructor to extend all plain-object
20003    // components with in Weex's multi-instance scenarios.
20004    Vue.options._base = Vue;
20005    extend(Vue.options.components, builtInComponents);
20006    initUse(Vue);
20007    initMixin(Vue);
20008    initExtend(Vue);
20009    initAssetRegisters(Vue);
20010}
20011
20012initGlobalAPI(Vue);
20013Object.defineProperty(Vue.prototype, '$isServer', {
20014    get: isServerRendering
20015});
20016Object.defineProperty(Vue.prototype, '$ssrContext', {
20017    get: function () {
20018        /* istanbul ignore next */
20019        return this.$vnode && this.$vnode.ssrContext;
20020    }
20021});
20022// expose FunctionalRenderContext for ssr runtime helper installation
20023Object.defineProperty(Vue, 'FunctionalRenderContext', {
20024    value: FunctionalRenderContext
20025});
20026Vue.version = version;
20027
20028// these are reserved for web because they are directly compiled away
20029// during template compilation
20030var isReservedAttr = makeMap('style,class');
20031// attributes that should be using props for binding
20032var acceptValue = makeMap('input,textarea,option,select,progress');
20033var mustUseProp = function (tag, type, attr) {
20034    return ((attr === 'value' && acceptValue(tag) && type !== 'button') ||
20035        (attr === 'selected' && tag === 'option') ||
20036        (attr === 'checked' && tag === 'input') ||
20037        (attr === 'muted' && tag === 'video'));
20038};
20039var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');
20040var isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');
20041var convertEnumeratedValue = function (key, value) {
20042    return isFalsyAttrValue(value) || value === 'false'
20043        ? 'false'
20044        : // allow arbitrary string value for contenteditable
20045            key === 'contenteditable' && isValidContentEditableValue(value)
20046                ? value
20047                : 'true';
20048};
20049var isBooleanAttr = makeMap('allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +
20050    'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +
20051    'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +
20052    'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +
20053    'required,reversed,scoped,seamless,selected,sortable,' +
20054    'truespeed,typemustmatch,visible');
20055var xlinkNS = 'http://www.w3.org/1999/xlink';
20056var isXlink = function (name) {
20057    return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink';
20058};
20059var getXlinkProp = function (name) {
20060    return isXlink(name) ? name.slice(6, name.length) : '';
20061};
20062var isFalsyAttrValue = function (val) {
20063    return val == null || val === false;
20064};
20065
20066function genClassForVnode(vnode) {
20067    var data = vnode.data;
20068    var parentNode = vnode;
20069    var childNode = vnode;
20070    while (isDef(childNode.componentInstance)) {
20071        childNode = childNode.componentInstance._vnode;
20072        if (childNode && childNode.data) {
20073            data = mergeClassData(childNode.data, data);
20074        }
20075    }
20076    // @ts-expect-error parentNode.parent not VNodeWithData
20077    while (isDef((parentNode = parentNode.parent))) {
20078        if (parentNode && parentNode.data) {
20079            data = mergeClassData(data, parentNode.data);
20080        }
20081    }
20082    return renderClass(data.staticClass, data.class);
20083}
20084function mergeClassData(child, parent) {
20085    return {
20086        staticClass: concat(child.staticClass, parent.staticClass),
20087        class: isDef(child.class) ? [child.class, parent.class] : parent.class
20088    };
20089}
20090function renderClass(staticClass, dynamicClass) {
20091    if (isDef(staticClass) || isDef(dynamicClass)) {
20092        return concat(staticClass, stringifyClass(dynamicClass));
20093    }
20094    /* istanbul ignore next */
20095    return '';
20096}
20097function concat(a, b) {
20098    return a ? (b ? a + ' ' + b : a) : b || '';
20099}
20100function stringifyClass(value) {
20101    if (Array.isArray(value)) {
20102        return stringifyArray(value);
20103    }
20104    if (isObject(value)) {
20105        return stringifyObject(value);
20106    }
20107    if (typeof value === 'string') {
20108        return value;
20109    }
20110    /* istanbul ignore next */
20111    return '';
20112}
20113function stringifyArray(value) {
20114    var res = '';
20115    var stringified;
20116    for (var i = 0, l = value.length; i < l; i++) {
20117        if (isDef((stringified = stringifyClass(value[i]))) && stringified !== '') {
20118            if (res)
20119                res += ' ';
20120            res += stringified;
20121        }
20122    }
20123    return res;
20124}
20125function stringifyObject(value) {
20126    var res = '';
20127    for (var key in value) {
20128        if (value[key]) {
20129            if (res)
20130                res += ' ';
20131            res += key;
20132        }
20133    }
20134    return res;
20135}
20136
20137var namespaceMap = {
20138    svg: 'http://www.w3.org/2000/svg',
20139    math: 'http://www.w3.org/1998/Math/MathML'
20140};
20141var isHTMLTag = makeMap('html,body,base,head,link,meta,style,title,' +
20142    'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +
20143    'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +
20144    'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +
20145    's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +
20146    'embed,object,param,source,canvas,script,noscript,del,ins,' +
20147    'caption,col,colgroup,table,thead,tbody,td,th,tr,' +
20148    'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +
20149    'output,progress,select,textarea,' +
20150    'details,dialog,menu,menuitem,summary,' +
20151    'content,element,shadow,template,blockquote,iframe,tfoot');
20152// this map is intentionally selective, only covering SVG elements that may
20153// contain child elements.
20154var isSVG = makeMap('svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +
20155    'foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +
20156    'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view', true);
20157var isPreTag = function (tag) { return tag === 'pre'; };
20158var isReservedTag = function (tag) {
20159    return isHTMLTag(tag) || isSVG(tag);
20160};
20161function getTagNamespace(tag) {
20162    if (isSVG(tag)) {
20163        return 'svg';
20164    }
20165    // basic support for MathML
20166    // note it doesn't support other MathML elements being component roots
20167    if (tag === 'math') {
20168        return 'math';
20169    }
20170}
20171var unknownElementCache = Object.create(null);
20172function isUnknownElement(tag) {
20173    /* istanbul ignore if */
20174    if (!inBrowser) {
20175        return true;
20176    }
20177    if (isReservedTag(tag)) {
20178        return false;
20179    }
20180    tag = tag.toLowerCase();
20181    /* istanbul ignore if */
20182    if (unknownElementCache[tag] != null) {
20183        return unknownElementCache[tag];
20184    }
20185    var el = document.createElement(tag);
20186    if (tag.indexOf('-') > -1) {
20187        // https://stackoverflow.com/a/28210364/1070244
20188        return (unknownElementCache[tag] =
20189            el.constructor === window.HTMLUnknownElement ||
20190                el.constructor === window.HTMLElement);
20191    }
20192    else {
20193        return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()));
20194    }
20195}
20196var isTextInputType = makeMap('text,number,password,search,email,tel,url');
20197
20198/**
20199 * Query an element selector if it's not an element already.
20200 */
20201function query(el) {
20202    if (typeof el === 'string') {
20203        var selected = document.querySelector(el);
20204        if (!selected) {
20205             true && warn$2('Cannot find element: ' + el);
20206            return document.createElement('div');
20207        }
20208        return selected;
20209    }
20210    else {
20211        return el;
20212    }
20213}
20214
20215function createElement(tagName, vnode) {
20216    var elm = document.createElement(tagName);
20217    if (tagName !== 'select') {
20218        return elm;
20219    }
20220    // false or null will remove the attribute but undefined will not
20221    if (vnode.data &&
20222        vnode.data.attrs &&
20223        vnode.data.attrs.multiple !== undefined) {
20224        elm.setAttribute('multiple', 'multiple');
20225    }
20226    return elm;
20227}
20228function createElementNS(namespace, tagName) {
20229    return document.createElementNS(namespaceMap[namespace], tagName);
20230}
20231function createTextNode(text) {
20232    return document.createTextNode(text);
20233}
20234function createComment(text) {
20235    return document.createComment(text);
20236}
20237function insertBefore(parentNode, newNode, referenceNode) {
20238    parentNode.insertBefore(newNode, referenceNode);
20239}
20240function removeChild(node, child) {
20241    node.removeChild(child);
20242}
20243function appendChild(node, child) {
20244    node.appendChild(child);
20245}
20246function parentNode(node) {
20247    return node.parentNode;
20248}
20249function nextSibling(node) {
20250    return node.nextSibling;
20251}
20252function tagName(node) {
20253    return node.tagName;
20254}
20255function setTextContent(node, text) {
20256    node.textContent = text;
20257}
20258function setStyleScope(node, scopeId) {
20259    node.setAttribute(scopeId, '');
20260}
20261
20262var nodeOps = /*#__PURE__*/Object.freeze({
20263  __proto__: null,
20264  createElement: createElement,
20265  createElementNS: createElementNS,
20266  createTextNode: createTextNode,
20267  createComment: createComment,
20268  insertBefore: insertBefore,
20269  removeChild: removeChild,
20270  appendChild: appendChild,
20271  parentNode: parentNode,
20272  nextSibling: nextSibling,
20273  tagName: tagName,
20274  setTextContent: setTextContent,
20275  setStyleScope: setStyleScope
20276});
20277
20278var ref = {
20279    create: function (_, vnode) {
20280        registerRef(vnode);
20281    },
20282    update: function (oldVnode, vnode) {
20283        if (oldVnode.data.ref !== vnode.data.ref) {
20284            registerRef(oldVnode, true);
20285            registerRef(vnode);
20286        }
20287    },
20288    destroy: function (vnode) {
20289        registerRef(vnode, true);
20290    }
20291};
20292function registerRef(vnode, isRemoval) {
20293    var ref = vnode.data.ref;
20294    if (!isDef(ref))
20295        return;
20296    var vm = vnode.context;
20297    var refValue = vnode.componentInstance || vnode.elm;
20298    var value = isRemoval ? null : refValue;
20299    var $refsValue = isRemoval ? undefined : refValue;
20300    if (isFunction(ref)) {
20301        invokeWithErrorHandling(ref, vm, [value], vm, "template ref function");
20302        return;
20303    }
20304    var isFor = vnode.data.refInFor;
20305    var _isString = typeof ref === 'string' || typeof ref === 'number';
20306    var _isRef = isRef(ref);
20307    var refs = vm.$refs;
20308    if (_isString || _isRef) {
20309        if (isFor) {
20310            var existing = _isString ? refs[ref] : ref.value;
20311            if (isRemoval) {
20312                isArray(existing) && remove$2(existing, refValue);
20313            }
20314            else {
20315                if (!isArray(existing)) {
20316                    if (_isString) {
20317                        refs[ref] = [refValue];
20318                        setSetupRef(vm, ref, refs[ref]);
20319                    }
20320                    else {
20321                        ref.value = [refValue];
20322                    }
20323                }
20324                else if (!existing.includes(refValue)) {
20325                    existing.push(refValue);
20326                }
20327            }
20328        }
20329        else if (_isString) {
20330            if (isRemoval && refs[ref] !== refValue) {
20331                return;
20332            }
20333            refs[ref] = $refsValue;
20334            setSetupRef(vm, ref, value);
20335        }
20336        else if (_isRef) {
20337            if (isRemoval && ref.value !== refValue) {
20338                return;
20339            }
20340            ref.value = value;
20341        }
20342        else if (true) {
20343            warn$2("Invalid template ref type: ".concat(typeof ref));
20344        }
20345    }
20346}
20347function setSetupRef(_a, key, val) {
20348    var _setupState = _a._setupState;
20349    if (_setupState && hasOwn(_setupState, key)) {
20350        if (isRef(_setupState[key])) {
20351            _setupState[key].value = val;
20352        }
20353        else {
20354            _setupState[key] = val;
20355        }
20356    }
20357}
20358
20359/**
20360 * Virtual DOM patching algorithm based on Snabbdom by
20361 * Simon Friis Vindum (@paldepind)
20362 * Licensed under the MIT License
20363 * https://github.com/paldepind/snabbdom/blob/master/LICENSE
20364 *
20365 * modified by Evan You (@yyx990803)
20366 *
20367 * Not type-checking this because this file is perf-critical and the cost
20368 * of making flow understand it is not worth it.
20369 */
20370var emptyNode = new VNode('', {}, []);
20371var hooks = ['create', 'activate', 'update', 'remove', 'destroy'];
20372function sameVnode(a, b) {
20373    return (a.key === b.key &&
20374        a.asyncFactory === b.asyncFactory &&
20375        ((a.tag === b.tag &&
20376            a.isComment === b.isComment &&
20377            isDef(a.data) === isDef(b.data) &&
20378            sameInputType(a, b)) ||
20379            (isTrue(a.isAsyncPlaceholder) && isUndef(b.asyncFactory.error))));
20380}
20381function sameInputType(a, b) {
20382    if (a.tag !== 'input')
20383        return true;
20384    var i;
20385    var typeA = isDef((i = a.data)) && isDef((i = i.attrs)) && i.type;
20386    var typeB = isDef((i = b.data)) && isDef((i = i.attrs)) && i.type;
20387    return typeA === typeB || (isTextInputType(typeA) && isTextInputType(typeB));
20388}
20389function createKeyToOldIdx(children, beginIdx, endIdx) {
20390    var i, key;
20391    var map = {};
20392    for (i = beginIdx; i <= endIdx; ++i) {
20393        key = children[i].key;
20394        if (isDef(key))
20395            map[key] = i;
20396    }
20397    return map;
20398}
20399function createPatchFunction(backend) {
20400    var i, j;
20401    var cbs = {};
20402    var modules = backend.modules, nodeOps = backend.nodeOps;
20403    for (i = 0; i < hooks.length; ++i) {
20404        cbs[hooks[i]] = [];
20405        for (j = 0; j < modules.length; ++j) {
20406            if (isDef(modules[j][hooks[i]])) {
20407                cbs[hooks[i]].push(modules[j][hooks[i]]);
20408            }
20409        }
20410    }
20411    function emptyNodeAt(elm) {
20412        return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm);
20413    }
20414    function createRmCb(childElm, listeners) {
20415        function remove() {
20416            if (--remove.listeners === 0) {
20417                removeNode(childElm);
20418            }
20419        }
20420        remove.listeners = listeners;
20421        return remove;
20422    }
20423    function removeNode(el) {
20424        var parent = nodeOps.parentNode(el);
20425        // element may have already been removed due to v-html / v-text
20426        if (isDef(parent)) {
20427            nodeOps.removeChild(parent, el);
20428        }
20429    }
20430    function isUnknownElement(vnode, inVPre) {
20431        return (!inVPre &&
20432            !vnode.ns &&
20433            !(config.ignoredElements.length &&
20434                config.ignoredElements.some(function (ignore) {
20435                    return isRegExp(ignore)
20436                        ? ignore.test(vnode.tag)
20437                        : ignore === vnode.tag;
20438                })) &&
20439            config.isUnknownElement(vnode.tag));
20440    }
20441    var creatingElmInVPre = 0;
20442    function createElm(vnode, insertedVnodeQueue, parentElm, refElm, nested, ownerArray, index) {
20443        if (isDef(vnode.elm) && isDef(ownerArray)) {
20444            // This vnode was used in a previous render!
20445            // now it's used as a new node, overwriting its elm would cause
20446            // potential patch errors down the road when it's used as an insertion
20447            // reference node. Instead, we clone the node on-demand before creating
20448            // associated DOM element for it.
20449            vnode = ownerArray[index] = cloneVNode(vnode);
20450        }
20451        vnode.isRootInsert = !nested; // for transition enter check
20452        if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {
20453            return;
20454        }
20455        var data = vnode.data;
20456        var children = vnode.children;
20457        var tag = vnode.tag;
20458        if (isDef(tag)) {
20459            if (true) {
20460                if (data && data.pre) {
20461                    creatingElmInVPre++;
20462                }
20463                if (isUnknownElement(vnode, creatingElmInVPre)) {
20464                    warn$2('Unknown custom element: <' +
20465                        tag +
20466                        '> - did you ' +
20467                        'register the component correctly? For recursive components, ' +
20468                        'make sure to provide the "name" option.', vnode.context);
20469                }
20470            }
20471            vnode.elm = vnode.ns
20472                ? nodeOps.createElementNS(vnode.ns, tag)
20473                : nodeOps.createElement(tag, vnode);
20474            setScope(vnode);
20475            createChildren(vnode, children, insertedVnodeQueue);
20476            if (isDef(data)) {
20477                invokeCreateHooks(vnode, insertedVnodeQueue);
20478            }
20479            insert(parentElm, vnode.elm, refElm);
20480            if ( true && data && data.pre) {
20481                creatingElmInVPre--;
20482            }
20483        }
20484        else if (isTrue(vnode.isComment)) {
20485            vnode.elm = nodeOps.createComment(vnode.text);
20486            insert(parentElm, vnode.elm, refElm);
20487        }
20488        else {
20489            vnode.elm = nodeOps.createTextNode(vnode.text);
20490            insert(parentElm, vnode.elm, refElm);
20491        }
20492    }
20493    function createComponent(vnode, insertedVnodeQueue, parentElm, refElm) {
20494        var i = vnode.data;
20495        if (isDef(i)) {
20496            var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;
20497            if (isDef((i = i.hook)) && isDef((i = i.init))) {
20498                i(vnode, false /* hydrating */);
20499            }
20500            // after calling the init hook, if the vnode is a child component
20501            // it should've created a child instance and mounted it. the child
20502            // component also has set the placeholder vnode's elm.
20503            // in that case we can just return the element and be done.
20504            if (isDef(vnode.componentInstance)) {
20505                initComponent(vnode, insertedVnodeQueue);
20506                insert(parentElm, vnode.elm, refElm);
20507                if (isTrue(isReactivated)) {
20508                    reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);
20509                }
20510                return true;
20511            }
20512        }
20513    }
20514    function initComponent(vnode, insertedVnodeQueue) {
20515        if (isDef(vnode.data.pendingInsert)) {
20516            insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);
20517            vnode.data.pendingInsert = null;
20518        }
20519        vnode.elm = vnode.componentInstance.$el;
20520        if (isPatchable(vnode)) {
20521            invokeCreateHooks(vnode, insertedVnodeQueue);
20522            setScope(vnode);
20523        }
20524        else {
20525            // empty component root.
20526            // skip all element-related modules except for ref (#3455)
20527            registerRef(vnode);
20528            // make sure to invoke the insert hook
20529            insertedVnodeQueue.push(vnode);
20530        }
20531    }
20532    function reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm) {
20533        var i;
20534        // hack for #4339: a reactivated component with inner transition
20535        // does not trigger because the inner node's created hooks are not called
20536        // again. It's not ideal to involve module-specific logic in here but
20537        // there doesn't seem to be a better way to do it.
20538        var innerNode = vnode;
20539        while (innerNode.componentInstance) {
20540            innerNode = innerNode.componentInstance._vnode;
20541            if (isDef((i = innerNode.data)) && isDef((i = i.transition))) {
20542                for (i = 0; i < cbs.activate.length; ++i) {
20543                    cbs.activate[i](emptyNode, innerNode);
20544                }
20545                insertedVnodeQueue.push(innerNode);
20546                break;
20547            }
20548        }
20549        // unlike a newly created component,
20550        // a reactivated keep-alive component doesn't insert itself
20551        insert(parentElm, vnode.elm, refElm);
20552    }
20553    function insert(parent, elm, ref) {
20554        if (isDef(parent)) {
20555            if (isDef(ref)) {
20556                if (nodeOps.parentNode(ref) === parent) {
20557                    nodeOps.insertBefore(parent, elm, ref);
20558                }
20559            }
20560            else {
20561                nodeOps.appendChild(parent, elm);
20562            }
20563        }
20564    }
20565    function createChildren(vnode, children, insertedVnodeQueue) {
20566        if (isArray(children)) {
20567            if (true) {
20568                checkDuplicateKeys(children);
20569            }
20570            for (var i_1 = 0; i_1 < children.length; ++i_1) {
20571                createElm(children[i_1], insertedVnodeQueue, vnode.elm, null, true, children, i_1);
20572            }
20573        }
20574        else if (isPrimitive(vnode.text)) {
20575            nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));
20576        }
20577    }
20578    function isPatchable(vnode) {
20579        while (vnode.componentInstance) {
20580            vnode = vnode.componentInstance._vnode;
20581        }
20582        return isDef(vnode.tag);
20583    }
20584    function invokeCreateHooks(vnode, insertedVnodeQueue) {
20585        for (var i_2 = 0; i_2 < cbs.create.length; ++i_2) {
20586            cbs.create[i_2](emptyNode, vnode);
20587        }
20588        i = vnode.data.hook; // Reuse variable
20589        if (isDef(i)) {
20590            if (isDef(i.create))
20591                i.create(emptyNode, vnode);
20592            if (isDef(i.insert))
20593                insertedVnodeQueue.push(vnode);
20594        }
20595    }
20596    // set scope id attribute for scoped CSS.
20597    // this is implemented as a special case to avoid the overhead
20598    // of going through the normal attribute patching process.
20599    function setScope(vnode) {
20600        var i;
20601        if (isDef((i = vnode.fnScopeId))) {
20602            nodeOps.setStyleScope(vnode.elm, i);
20603        }
20604        else {
20605            var ancestor = vnode;
20606            while (ancestor) {
20607                if (isDef((i = ancestor.context)) && isDef((i = i.$options._scopeId))) {
20608                    nodeOps.setStyleScope(vnode.elm, i);
20609                }
20610                ancestor = ancestor.parent;
20611            }
20612        }
20613        // for slot content they should also get the scopeId from the host instance.
20614        if (isDef((i = activeInstance)) &&
20615            i !== vnode.context &&
20616            i !== vnode.fnContext &&
20617            isDef((i = i.$options._scopeId))) {
20618            nodeOps.setStyleScope(vnode.elm, i);
20619        }
20620    }
20621    function addVnodes(parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {
20622        for (; startIdx <= endIdx; ++startIdx) {
20623            createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);
20624        }
20625    }
20626    function invokeDestroyHook(vnode) {
20627        var i, j;
20628        var data = vnode.data;
20629        if (isDef(data)) {
20630            if (isDef((i = data.hook)) && isDef((i = i.destroy)))
20631                i(vnode);
20632            for (i = 0; i < cbs.destroy.length; ++i)
20633                cbs.destroy[i](vnode);
20634        }
20635        if (isDef((i = vnode.children))) {
20636            for (j = 0; j < vnode.children.length; ++j) {
20637                invokeDestroyHook(vnode.children[j]);
20638            }
20639        }
20640    }
20641    function removeVnodes(vnodes, startIdx, endIdx) {
20642        for (; startIdx <= endIdx; ++startIdx) {
20643            var ch = vnodes[startIdx];
20644            if (isDef(ch)) {
20645                if (isDef(ch.tag)) {
20646                    removeAndInvokeRemoveHook(ch);
20647                    invokeDestroyHook(ch);
20648                }
20649                else {
20650                    // Text node
20651                    removeNode(ch.elm);
20652                }
20653            }
20654        }
20655    }
20656    function removeAndInvokeRemoveHook(vnode, rm) {
20657        if (isDef(rm) || isDef(vnode.data)) {
20658            var i_3;
20659            var listeners = cbs.remove.length + 1;
20660            if (isDef(rm)) {
20661                // we have a recursively passed down rm callback
20662                // increase the listeners count
20663                rm.listeners += listeners;
20664            }
20665            else {
20666                // directly removing
20667                rm = createRmCb(vnode.elm, listeners);
20668            }
20669            // recursively invoke hooks on child component root node
20670            if (isDef((i_3 = vnode.componentInstance)) &&
20671                isDef((i_3 = i_3._vnode)) &&
20672                isDef(i_3.data)) {
20673                removeAndInvokeRemoveHook(i_3, rm);
20674            }
20675            for (i_3 = 0; i_3 < cbs.remove.length; ++i_3) {
20676                cbs.remove[i_3](vnode, rm);
20677            }
20678            if (isDef((i_3 = vnode.data.hook)) && isDef((i_3 = i_3.remove))) {
20679                i_3(vnode, rm);
20680            }
20681            else {
20682                rm();
20683            }
20684        }
20685        else {
20686            removeNode(vnode.elm);
20687        }
20688    }
20689    function updateChildren(parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {
20690        var oldStartIdx = 0;
20691        var newStartIdx = 0;
20692        var oldEndIdx = oldCh.length - 1;
20693        var oldStartVnode = oldCh[0];
20694        var oldEndVnode = oldCh[oldEndIdx];
20695        var newEndIdx = newCh.length - 1;
20696        var newStartVnode = newCh[0];
20697        var newEndVnode = newCh[newEndIdx];
20698        var oldKeyToIdx, idxInOld, vnodeToMove, refElm;
20699        // removeOnly is a special flag used only by <transition-group>
20700        // to ensure removed elements stay in correct relative positions
20701        // during leaving transitions
20702        var canMove = !removeOnly;
20703        if (true) {
20704            checkDuplicateKeys(newCh);
20705        }
20706        while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {
20707            if (isUndef(oldStartVnode)) {
20708                oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left
20709            }
20710            else if (isUndef(oldEndVnode)) {
20711                oldEndVnode = oldCh[--oldEndIdx];
20712            }
20713            else if (sameVnode(oldStartVnode, newStartVnode)) {
20714                patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
20715                oldStartVnode = oldCh[++oldStartIdx];
20716                newStartVnode = newCh[++newStartIdx];
20717            }
20718            else if (sameVnode(oldEndVnode, newEndVnode)) {
20719                patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);
20720                oldEndVnode = oldCh[--oldEndIdx];
20721                newEndVnode = newCh[--newEndIdx];
20722            }
20723            else if (sameVnode(oldStartVnode, newEndVnode)) {
20724                // Vnode moved right
20725                patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);
20726                canMove &&
20727                    nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));
20728                oldStartVnode = oldCh[++oldStartIdx];
20729                newEndVnode = newCh[--newEndIdx];
20730            }
20731            else if (sameVnode(oldEndVnode, newStartVnode)) {
20732                // Vnode moved left
20733                patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
20734                canMove &&
20735                    nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);
20736                oldEndVnode = oldCh[--oldEndIdx];
20737                newStartVnode = newCh[++newStartIdx];
20738            }
20739            else {
20740                if (isUndef(oldKeyToIdx))
20741                    oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx);
20742                idxInOld = isDef(newStartVnode.key)
20743                    ? oldKeyToIdx[newStartVnode.key]
20744                    : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);
20745                if (isUndef(idxInOld)) {
20746                    // New element
20747                    createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
20748                }
20749                else {
20750                    vnodeToMove = oldCh[idxInOld];
20751                    if (sameVnode(vnodeToMove, newStartVnode)) {
20752                        patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
20753                        oldCh[idxInOld] = undefined;
20754                        canMove &&
20755                            nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);
20756                    }
20757                    else {
20758                        // same key but different element. treat as new element
20759                        createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
20760                    }
20761                }
20762                newStartVnode = newCh[++newStartIdx];
20763            }
20764        }
20765        if (oldStartIdx > oldEndIdx) {
20766            refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;
20767            addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);
20768        }
20769        else if (newStartIdx > newEndIdx) {
20770            removeVnodes(oldCh, oldStartIdx, oldEndIdx);
20771        }
20772    }
20773    function checkDuplicateKeys(children) {
20774        var seenKeys = {};
20775        for (var i_4 = 0; i_4 < children.length; i_4++) {
20776            var vnode = children[i_4];
20777            var key = vnode.key;
20778            if (isDef(key)) {
20779                if (seenKeys[key]) {
20780                    warn$2("Duplicate keys detected: '".concat(key, "'. This may cause an update error."), vnode.context);
20781                }
20782                else {
20783                    seenKeys[key] = true;
20784                }
20785            }
20786        }
20787    }
20788    function findIdxInOld(node, oldCh, start, end) {
20789        for (var i_5 = start; i_5 < end; i_5++) {
20790            var c = oldCh[i_5];
20791            if (isDef(c) && sameVnode(node, c))
20792                return i_5;
20793        }
20794    }
20795    function patchVnode(oldVnode, vnode, insertedVnodeQueue, ownerArray, index, removeOnly) {
20796        if (oldVnode === vnode) {
20797            return;
20798        }
20799        if (isDef(vnode.elm) && isDef(ownerArray)) {
20800            // clone reused vnode
20801            vnode = ownerArray[index] = cloneVNode(vnode);
20802        }
20803        var elm = (vnode.elm = oldVnode.elm);
20804        if (isTrue(oldVnode.isAsyncPlaceholder)) {
20805            if (isDef(vnode.asyncFactory.resolved)) {
20806                hydrate(oldVnode.elm, vnode, insertedVnodeQueue);
20807            }
20808            else {
20809                vnode.isAsyncPlaceholder = true;
20810            }
20811            return;
20812        }
20813        // reuse element for static trees.
20814        // note we only do this if the vnode is cloned -
20815        // if the new node is not cloned it means the render functions have been
20816        // reset by the hot-reload-api and we need to do a proper re-render.
20817        if (isTrue(vnode.isStatic) &&
20818            isTrue(oldVnode.isStatic) &&
20819            vnode.key === oldVnode.key &&
20820            (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))) {
20821            vnode.componentInstance = oldVnode.componentInstance;
20822            return;
20823        }
20824        var i;
20825        var data = vnode.data;
20826        if (isDef(data) && isDef((i = data.hook)) && isDef((i = i.prepatch))) {
20827            i(oldVnode, vnode);
20828        }
20829        var oldCh = oldVnode.children;
20830        var ch = vnode.children;
20831        if (isDef(data) && isPatchable(vnode)) {
20832            for (i = 0; i < cbs.update.length; ++i)
20833                cbs.update[i](oldVnode, vnode);
20834            if (isDef((i = data.hook)) && isDef((i = i.update)))
20835                i(oldVnode, vnode);
20836        }
20837        if (isUndef(vnode.text)) {
20838            if (isDef(oldCh) && isDef(ch)) {
20839                if (oldCh !== ch)
20840                    updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly);
20841            }
20842            else if (isDef(ch)) {
20843                if (true) {
20844                    checkDuplicateKeys(ch);
20845                }
20846                if (isDef(oldVnode.text))
20847                    nodeOps.setTextContent(elm, '');
20848                addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);
20849            }
20850            else if (isDef(oldCh)) {
20851                removeVnodes(oldCh, 0, oldCh.length - 1);
20852            }
20853            else if (isDef(oldVnode.text)) {
20854                nodeOps.setTextContent(elm, '');
20855            }
20856        }
20857        else if (oldVnode.text !== vnode.text) {
20858            nodeOps.setTextContent(elm, vnode.text);
20859        }
20860        if (isDef(data)) {
20861            if (isDef((i = data.hook)) && isDef((i = i.postpatch)))
20862                i(oldVnode, vnode);
20863        }
20864    }
20865    function invokeInsertHook(vnode, queue, initial) {
20866        // delay insert hooks for component root nodes, invoke them after the
20867        // element is really inserted
20868        if (isTrue(initial) && isDef(vnode.parent)) {
20869            vnode.parent.data.pendingInsert = queue;
20870        }
20871        else {
20872            for (var i_6 = 0; i_6 < queue.length; ++i_6) {
20873                queue[i_6].data.hook.insert(queue[i_6]);
20874            }
20875        }
20876    }
20877    var hydrationBailed = false;
20878    // list of modules that can skip create hook during hydration because they
20879    // are already rendered on the client or has no need for initialization
20880    // Note: style is excluded because it relies on initial clone for future
20881    // deep updates (#7063).
20882    var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');
20883    // Note: this is a browser-only function so we can assume elms are DOM nodes.
20884    function hydrate(elm, vnode, insertedVnodeQueue, inVPre) {
20885        var i;
20886        var tag = vnode.tag, data = vnode.data, children = vnode.children;
20887        inVPre = inVPre || (data && data.pre);
20888        vnode.elm = elm;
20889        if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {
20890            vnode.isAsyncPlaceholder = true;
20891            return true;
20892        }
20893        // assert node match
20894        if (true) {
20895            if (!assertNodeMatch(elm, vnode, inVPre)) {
20896                return false;
20897            }
20898        }
20899        if (isDef(data)) {
20900            if (isDef((i = data.hook)) && isDef((i = i.init)))
20901                i(vnode, true /* hydrating */);
20902            if (isDef((i = vnode.componentInstance))) {
20903                // child component. it should have hydrated its own tree.
20904                initComponent(vnode, insertedVnodeQueue);
20905                return true;
20906            }
20907        }
20908        if (isDef(tag)) {
20909            if (isDef(children)) {
20910                // empty element, allow client to pick up and populate children
20911                if (!elm.hasChildNodes()) {
20912                    createChildren(vnode, children, insertedVnodeQueue);
20913                }
20914                else {
20915                    // v-html and domProps: innerHTML
20916                    if (isDef((i = data)) &&
20917                        isDef((i = i.domProps)) &&
20918                        isDef((i = i.innerHTML))) {
20919                        if (i !== elm.innerHTML) {
20920                            /* istanbul ignore if */
20921                            if ( true &&
20922                                typeof console !== 'undefined' &&
20923                                !hydrationBailed) {
20924                                hydrationBailed = true;
20925                                console.warn('Parent: ', elm);
20926                                console.warn('server innerHTML: ', i);
20927                                console.warn('client innerHTML: ', elm.innerHTML);
20928                            }
20929                            return false;
20930                        }
20931                    }
20932                    else {
20933                        // iterate and compare children lists
20934                        var childrenMatch = true;
20935                        var childNode = elm.firstChild;
20936                        for (var i_7 = 0; i_7 < children.length; i_7++) {
20937                            if (!childNode ||
20938                                !hydrate(childNode, children[i_7], insertedVnodeQueue, inVPre)) {
20939                                childrenMatch = false;
20940                                break;
20941                            }
20942                            childNode = childNode.nextSibling;
20943                        }
20944                        // if childNode is not null, it means the actual childNodes list is
20945                        // longer than the virtual children list.
20946                        if (!childrenMatch || childNode) {
20947                            /* istanbul ignore if */
20948                            if ( true &&
20949                                typeof console !== 'undefined' &&
20950                                !hydrationBailed) {
20951                                hydrationBailed = true;
20952                                console.warn('Parent: ', elm);
20953                                console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);
20954                            }
20955                            return false;
20956                        }
20957                    }
20958                }
20959            }
20960            if (isDef(data)) {
20961                var fullInvoke = false;
20962                for (var key in data) {
20963                    if (!isRenderedModule(key)) {
20964                        fullInvoke = true;
20965                        invokeCreateHooks(vnode, insertedVnodeQueue);
20966                        break;
20967                    }
20968                }
20969                if (!fullInvoke && data['class']) {
20970                    // ensure collecting deps for deep class bindings for future updates
20971                    traverse(data['class']);
20972                }
20973            }
20974        }
20975        else if (elm.data !== vnode.text) {
20976            elm.data = vnode.text;
20977        }
20978        return true;
20979    }
20980    function assertNodeMatch(node, vnode, inVPre) {
20981        if (isDef(vnode.tag)) {
20982            return (vnode.tag.indexOf('vue-component') === 0 ||
20983                (!isUnknownElement(vnode, inVPre) &&
20984                    vnode.tag.toLowerCase() ===
20985                        (node.tagName && node.tagName.toLowerCase())));
20986        }
20987        else {
20988            return node.nodeType === (vnode.isComment ? 8 : 3);
20989        }
20990    }
20991    return function patch(oldVnode, vnode, hydrating, removeOnly) {
20992        if (isUndef(vnode)) {
20993            if (isDef(oldVnode))
20994                invokeDestroyHook(oldVnode);
20995            return;
20996        }
20997        var isInitialPatch = false;
20998        var insertedVnodeQueue = [];
20999        if (isUndef(oldVnode)) {
21000            // empty mount (likely as component), create new root element
21001            isInitialPatch = true;
21002            createElm(vnode, insertedVnodeQueue);
21003        }
21004        else {
21005            var isRealElement = isDef(oldVnode.nodeType);
21006            if (!isRealElement && sameVnode(oldVnode, vnode)) {
21007                // patch existing root node
21008                patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);
21009            }
21010            else {
21011                if (isRealElement) {
21012                    // mounting to a real element
21013                    // check if this is server-rendered content and if we can perform
21014                    // a successful hydration.
21015                    if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {
21016                        oldVnode.removeAttribute(SSR_ATTR);
21017                        hydrating = true;
21018                    }
21019                    if (isTrue(hydrating)) {
21020                        if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {
21021                            invokeInsertHook(vnode, insertedVnodeQueue, true);
21022                            return oldVnode;
21023                        }
21024                        else if (true) {
21025                            warn$2('The client-side rendered virtual DOM tree is not matching ' +
21026                                'server-rendered content. This is likely caused by incorrect ' +
21027                                'HTML markup, for example nesting block-level elements inside ' +
21028                                '<p>, or missing <tbody>. Bailing hydration and performing ' +
21029                                'full client-side render.');
21030                        }
21031                    }
21032                    // either not server-rendered, or hydration failed.
21033                    // create an empty node and replace it
21034                    oldVnode = emptyNodeAt(oldVnode);
21035                }
21036                // replacing existing element
21037                var oldElm = oldVnode.elm;
21038                var parentElm = nodeOps.parentNode(oldElm);
21039                // create new node
21040                createElm(vnode, insertedVnodeQueue, 
21041                // extremely rare edge case: do not insert if old element is in a
21042                // leaving transition. Only happens when combining transition +
21043                // keep-alive + HOCs. (#4590)
21044                oldElm._leaveCb ? null : parentElm, nodeOps.nextSibling(oldElm));
21045                // update parent placeholder node element, recursively
21046                if (isDef(vnode.parent)) {
21047                    var ancestor = vnode.parent;
21048                    var patchable = isPatchable(vnode);
21049                    while (ancestor) {
21050                        for (var i_8 = 0; i_8 < cbs.destroy.length; ++i_8) {
21051                            cbs.destroy[i_8](ancestor);
21052                        }
21053                        ancestor.elm = vnode.elm;
21054                        if (patchable) {
21055                            for (var i_9 = 0; i_9 < cbs.create.length; ++i_9) {
21056                                cbs.create[i_9](emptyNode, ancestor);
21057                            }
21058                            // #6513
21059                            // invoke insert hooks that may have been merged by create hooks.
21060                            // e.g. for directives that uses the "inserted" hook.
21061                            var insert_1 = ancestor.data.hook.insert;
21062                            if (insert_1.merged) {
21063                                // start at index 1 to avoid re-invoking component mounted hook
21064                                // clone insert hooks to avoid being mutated during iteration.
21065                                // e.g. for customed directives under transition group.
21066                                var cloned = insert_1.fns.slice(1);
21067                                for (var i_10 = 0; i_10 < cloned.length; i_10++) {
21068                                    cloned[i_10]();
21069                                }
21070                            }
21071                        }
21072                        else {
21073                            registerRef(ancestor);
21074                        }
21075                        ancestor = ancestor.parent;
21076                    }
21077                }
21078                // destroy old node
21079                if (isDef(parentElm)) {
21080                    removeVnodes([oldVnode], 0, 0);
21081                }
21082                else if (isDef(oldVnode.tag)) {
21083                    invokeDestroyHook(oldVnode);
21084                }
21085            }
21086        }
21087        invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);
21088        return vnode.elm;
21089    };
21090}
21091
21092var directives$1 = {
21093    create: updateDirectives,
21094    update: updateDirectives,
21095    destroy: function unbindDirectives(vnode) {
21096        // @ts-expect-error emptyNode is not VNodeWithData
21097        updateDirectives(vnode, emptyNode);
21098    }
21099};
21100function updateDirectives(oldVnode, vnode) {
21101    if (oldVnode.data.directives || vnode.data.directives) {
21102        _update(oldVnode, vnode);
21103    }
21104}
21105function _update(oldVnode, vnode) {
21106    var isCreate = oldVnode === emptyNode;
21107    var isDestroy = vnode === emptyNode;
21108    var oldDirs = normalizeDirectives(oldVnode.data.directives, oldVnode.context);
21109    var newDirs = normalizeDirectives(vnode.data.directives, vnode.context);
21110    var dirsWithInsert = [];
21111    var dirsWithPostpatch = [];
21112    var key, oldDir, dir;
21113    for (key in newDirs) {
21114        oldDir = oldDirs[key];
21115        dir = newDirs[key];
21116        if (!oldDir) {
21117            // new directive, bind
21118            callHook(dir, 'bind', vnode, oldVnode);
21119            if (dir.def && dir.def.inserted) {
21120                dirsWithInsert.push(dir);
21121            }
21122        }
21123        else {
21124            // existing directive, update
21125            dir.oldValue = oldDir.value;
21126            dir.oldArg = oldDir.arg;
21127            callHook(dir, 'update', vnode, oldVnode);
21128            if (dir.def && dir.def.componentUpdated) {
21129                dirsWithPostpatch.push(dir);
21130            }
21131        }
21132    }
21133    if (dirsWithInsert.length) {
21134        var callInsert = function () {
21135            for (var i = 0; i < dirsWithInsert.length; i++) {
21136                callHook(dirsWithInsert[i], 'inserted', vnode, oldVnode);
21137            }
21138        };
21139        if (isCreate) {
21140            mergeVNodeHook(vnode, 'insert', callInsert);
21141        }
21142        else {
21143            callInsert();
21144        }
21145    }
21146    if (dirsWithPostpatch.length) {
21147        mergeVNodeHook(vnode, 'postpatch', function () {
21148            for (var i = 0; i < dirsWithPostpatch.length; i++) {
21149                callHook(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);
21150            }
21151        });
21152    }
21153    if (!isCreate) {
21154        for (key in oldDirs) {
21155            if (!newDirs[key]) {
21156                // no longer present, unbind
21157                callHook(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);
21158            }
21159        }
21160    }
21161}
21162var emptyModifiers = Object.create(null);
21163function normalizeDirectives(dirs, vm) {
21164    var res = Object.create(null);
21165    if (!dirs) {
21166        // $flow-disable-line
21167        return res;
21168    }
21169    var i, dir;
21170    for (i = 0; i < dirs.length; i++) {
21171        dir = dirs[i];
21172        if (!dir.modifiers) {
21173            // $flow-disable-line
21174            dir.modifiers = emptyModifiers;
21175        }
21176        res[getRawDirName(dir)] = dir;
21177        if (vm._setupState && vm._setupState.__sfc) {
21178            var setupDef = dir.def || resolveAsset(vm, '_setupState', 'v-' + dir.name);
21179            if (typeof setupDef === 'function') {
21180                dir.def = {
21181                    bind: setupDef,
21182                    update: setupDef,
21183                };
21184            }
21185            else {
21186                dir.def = setupDef;
21187            }
21188        }
21189        dir.def = dir.def || resolveAsset(vm.$options, 'directives', dir.name, true);
21190    }
21191    // $flow-disable-line
21192    return res;
21193}
21194function getRawDirName(dir) {
21195    return (dir.rawName || "".concat(dir.name, ".").concat(Object.keys(dir.modifiers || {}).join('.')));
21196}
21197function callHook(dir, hook, vnode, oldVnode, isDestroy) {
21198    var fn = dir.def && dir.def[hook];
21199    if (fn) {
21200        try {
21201            fn(vnode.elm, dir, vnode, oldVnode, isDestroy);
21202        }
21203        catch (e) {
21204            handleError(e, vnode.context, "directive ".concat(dir.name, " ").concat(hook, " hook"));
21205        }
21206    }
21207}
21208
21209var baseModules = [ref, directives$1];
21210
21211function updateAttrs(oldVnode, vnode) {
21212    var opts = vnode.componentOptions;
21213    if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {
21214        return;
21215    }
21216    if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {
21217        return;
21218    }
21219    var key, cur, old;
21220    var elm = vnode.elm;
21221    var oldAttrs = oldVnode.data.attrs || {};
21222    var attrs = vnode.data.attrs || {};
21223    // clone observed objects, as the user probably wants to mutate it
21224    if (isDef(attrs.__ob__) || isTrue(attrs._v_attr_proxy)) {
21225        attrs = vnode.data.attrs = extend({}, attrs);
21226    }
21227    for (key in attrs) {
21228        cur = attrs[key];
21229        old = oldAttrs[key];
21230        if (old !== cur) {
21231            setAttr(elm, key, cur, vnode.data.pre);
21232        }
21233    }
21234    // #4391: in IE9, setting type can reset value for input[type=radio]
21235    // #6666: IE/Edge forces progress value down to 1 before setting a max
21236    /* istanbul ignore if */
21237    if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {
21238        setAttr(elm, 'value', attrs.value);
21239    }
21240    for (key in oldAttrs) {
21241        if (isUndef(attrs[key])) {
21242            if (isXlink(key)) {
21243                elm.removeAttributeNS(xlinkNS, getXlinkProp(key));
21244            }
21245            else if (!isEnumeratedAttr(key)) {
21246                elm.removeAttribute(key);
21247            }
21248        }
21249    }
21250}
21251function setAttr(el, key, value, isInPre) {
21252    if (isInPre || el.tagName.indexOf('-') > -1) {
21253        baseSetAttr(el, key, value);
21254    }
21255    else if (isBooleanAttr(key)) {
21256        // set attribute for blank value
21257        // e.g. <option disabled>Select one</option>
21258        if (isFalsyAttrValue(value)) {
21259            el.removeAttribute(key);
21260        }
21261        else {
21262            // technically allowfullscreen is a boolean attribute for <iframe>,
21263            // but Flash expects a value of "true" when used on <embed> tag
21264            value = key === 'allowfullscreen' && el.tagName === 'EMBED' ? 'true' : key;
21265            el.setAttribute(key, value);
21266        }
21267    }
21268    else if (isEnumeratedAttr(key)) {
21269        el.setAttribute(key, convertEnumeratedValue(key, value));
21270    }
21271    else if (isXlink(key)) {
21272        if (isFalsyAttrValue(value)) {
21273            el.removeAttributeNS(xlinkNS, getXlinkProp(key));
21274        }
21275        else {
21276            el.setAttributeNS(xlinkNS, key, value);
21277        }
21278    }
21279    else {
21280        baseSetAttr(el, key, value);
21281    }
21282}
21283function baseSetAttr(el, key, value) {
21284    if (isFalsyAttrValue(value)) {
21285        el.removeAttribute(key);
21286    }
21287    else {
21288        // #7138: IE10 & 11 fires input event when setting placeholder on
21289        // <textarea>... block the first input event and remove the blocker
21290        // immediately.
21291        /* istanbul ignore if */
21292        if (isIE &&
21293            !isIE9 &&
21294            el.tagName === 'TEXTAREA' &&
21295            key === 'placeholder' &&
21296            value !== '' &&
21297            !el.__ieph) {
21298            var blocker_1 = function (e) {
21299                e.stopImmediatePropagation();
21300                el.removeEventListener('input', blocker_1);
21301            };
21302            el.addEventListener('input', blocker_1);
21303            // $flow-disable-line
21304            el.__ieph = true; /* IE placeholder patched */
21305        }
21306        el.setAttribute(key, value);
21307    }
21308}
21309var attrs = {
21310    create: updateAttrs,
21311    update: updateAttrs
21312};
21313
21314function updateClass(oldVnode, vnode) {
21315    var el = vnode.elm;
21316    var data = vnode.data;
21317    var oldData = oldVnode.data;
21318    if (isUndef(data.staticClass) &&
21319        isUndef(data.class) &&
21320        (isUndef(oldData) ||
21321            (isUndef(oldData.staticClass) && isUndef(oldData.class)))) {
21322        return;
21323    }
21324    var cls = genClassForVnode(vnode);
21325    // handle transition classes
21326    var transitionClass = el._transitionClasses;
21327    if (isDef(transitionClass)) {
21328        cls = concat(cls, stringifyClass(transitionClass));
21329    }
21330    // set the class
21331    if (cls !== el._prevClass) {
21332        el.setAttribute('class', cls);
21333        el._prevClass = cls;
21334    }
21335}
21336var klass$1 = {
21337    create: updateClass,
21338    update: updateClass
21339};
21340
21341var validDivisionCharRE = /[\w).+\-_$\]]/;
21342function parseFilters(exp) {
21343    var inSingle = false;
21344    var inDouble = false;
21345    var inTemplateString = false;
21346    var inRegex = false;
21347    var curly = 0;
21348    var square = 0;
21349    var paren = 0;
21350    var lastFilterIndex = 0;
21351    var c, prev, i, expression, filters;
21352    for (i = 0; i < exp.length; i++) {
21353        prev = c;
21354        c = exp.charCodeAt(i);
21355        if (inSingle) {
21356            if (c === 0x27 && prev !== 0x5c)
21357                inSingle = false;
21358        }
21359        else if (inDouble) {
21360            if (c === 0x22 && prev !== 0x5c)
21361                inDouble = false;
21362        }
21363        else if (inTemplateString) {
21364            if (c === 0x60 && prev !== 0x5c)
21365                inTemplateString = false;
21366        }
21367        else if (inRegex) {
21368            if (c === 0x2f && prev !== 0x5c)
21369                inRegex = false;
21370        }
21371        else if (c === 0x7c && // pipe
21372            exp.charCodeAt(i + 1) !== 0x7c &&
21373            exp.charCodeAt(i - 1) !== 0x7c &&
21374            !curly &&
21375            !square &&
21376            !paren) {
21377            if (expression === undefined) {
21378                // first filter, end of expression
21379                lastFilterIndex = i + 1;
21380                expression = exp.slice(0, i).trim();
21381            }
21382            else {
21383                pushFilter();
21384            }
21385        }
21386        else {
21387            switch (c) {
21388                case 0x22:
21389                    inDouble = true;
21390                    break; // "
21391                case 0x27:
21392                    inSingle = true;
21393                    break; // '
21394                case 0x60:
21395                    inTemplateString = true;
21396                    break; // `
21397                case 0x28:
21398                    paren++;
21399                    break; // (
21400                case 0x29:
21401                    paren--;
21402                    break; // )
21403                case 0x5b:
21404                    square++;
21405                    break; // [
21406                case 0x5d:
21407                    square--;
21408                    break; // ]
21409                case 0x7b:
21410                    curly++;
21411                    break; // {
21412                case 0x7d:
21413                    curly--;
21414                    break; // }
21415            }
21416            if (c === 0x2f) {
21417                // /
21418                var j = i - 1;
21419                var p 
21420                // find first non-whitespace prev char
21421                = void 0;
21422                // find first non-whitespace prev char
21423                for (; j >= 0; j--) {
21424                    p = exp.charAt(j);
21425                    if (p !== ' ')
21426                        break;
21427                }
21428                if (!p || !validDivisionCharRE.test(p)) {
21429                    inRegex = true;
21430                }
21431            }
21432        }
21433    }
21434    if (expression === undefined) {
21435        expression = exp.slice(0, i).trim();
21436    }
21437    else if (lastFilterIndex !== 0) {
21438        pushFilter();
21439    }
21440    function pushFilter() {
21441        (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());
21442        lastFilterIndex = i + 1;
21443    }
21444    if (filters) {
21445        for (i = 0; i < filters.length; i++) {
21446            expression = wrapFilter(expression, filters[i]);
21447        }
21448    }
21449    return expression;
21450}
21451function wrapFilter(exp, filter) {
21452    var i = filter.indexOf('(');
21453    if (i < 0) {
21454        // _f: resolveFilter
21455        return "_f(\"".concat(filter, "\")(").concat(exp, ")");
21456    }
21457    else {
21458        var name_1 = filter.slice(0, i);
21459        var args = filter.slice(i + 1);
21460        return "_f(\"".concat(name_1, "\")(").concat(exp).concat(args !== ')' ? ',' + args : args);
21461    }
21462}
21463
21464/* eslint-disable no-unused-vars */
21465function baseWarn(msg, range) {
21466    console.error("[Vue compiler]: ".concat(msg));
21467}
21468/* eslint-enable no-unused-vars */
21469function pluckModuleFunction(modules, key) {
21470    return modules ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; }) : [];
21471}
21472function addProp(el, name, value, range, dynamic) {
21473    (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));
21474    el.plain = false;
21475}
21476function addAttr(el, name, value, range, dynamic) {
21477    var attrs = dynamic
21478        ? el.dynamicAttrs || (el.dynamicAttrs = [])
21479        : el.attrs || (el.attrs = []);
21480    attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));
21481    el.plain = false;
21482}
21483// add a raw attr (use this in preTransforms)
21484function addRawAttr(el, name, value, range) {
21485    el.attrsMap[name] = value;
21486    el.attrsList.push(rangeSetItem({ name: name, value: value }, range));
21487}
21488function addDirective(el, name, rawName, value, arg, isDynamicArg, modifiers, range) {
21489    (el.directives || (el.directives = [])).push(rangeSetItem({
21490        name: name,
21491        rawName: rawName,
21492        value: value,
21493        arg: arg,
21494        isDynamicArg: isDynamicArg,
21495        modifiers: modifiers
21496    }, range));
21497    el.plain = false;
21498}
21499function prependModifierMarker(symbol, name, dynamic) {
21500    return dynamic ? "_p(".concat(name, ",\"").concat(symbol, "\")") : symbol + name; // mark the event as captured
21501}
21502function addHandler(el, name, value, modifiers, important, warn, range, dynamic) {
21503    modifiers = modifiers || emptyObject;
21504    // warn prevent and passive modifier
21505    /* istanbul ignore if */
21506    if ( true && warn && modifiers.prevent && modifiers.passive) {
21507        warn("passive and prevent can't be used together. " +
21508            "Passive handler can't prevent default event.", range);
21509    }
21510    // normalize click.right and click.middle since they don't actually fire
21511    // this is technically browser-specific, but at least for now browsers are
21512    // the only target envs that have right/middle clicks.
21513    if (modifiers.right) {
21514        if (dynamic) {
21515            name = "(".concat(name, ")==='click'?'contextmenu':(").concat(name, ")");
21516        }
21517        else if (name === 'click') {
21518            name = 'contextmenu';
21519            delete modifiers.right;
21520        }
21521    }
21522    else if (modifiers.middle) {
21523        if (dynamic) {
21524            name = "(".concat(name, ")==='click'?'mouseup':(").concat(name, ")");
21525        }
21526        else if (name === 'click') {
21527            name = 'mouseup';
21528        }
21529    }
21530    // check capture modifier
21531    if (modifiers.capture) {
21532        delete modifiers.capture;
21533        name = prependModifierMarker('!', name, dynamic);
21534    }
21535    if (modifiers.once) {
21536        delete modifiers.once;
21537        name = prependModifierMarker('~', name, dynamic);
21538    }
21539    /* istanbul ignore if */
21540    if (modifiers.passive) {
21541        delete modifiers.passive;
21542        name = prependModifierMarker('&', name, dynamic);
21543    }
21544    var events;
21545    if (modifiers.native) {
21546        delete modifiers.native;
21547        events = el.nativeEvents || (el.nativeEvents = {});
21548    }
21549    else {
21550        events = el.events || (el.events = {});
21551    }
21552    var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range);
21553    if (modifiers !== emptyObject) {
21554        newHandler.modifiers = modifiers;
21555    }
21556    var handlers = events[name];
21557    /* istanbul ignore if */
21558    if (Array.isArray(handlers)) {
21559        important ? handlers.unshift(newHandler) : handlers.push(newHandler);
21560    }
21561    else if (handlers) {
21562        events[name] = important ? [newHandler, handlers] : [handlers, newHandler];
21563    }
21564    else {
21565        events[name] = newHandler;
21566    }
21567    el.plain = false;
21568}
21569function getRawBindingAttr(el, name) {
21570    return (el.rawAttrsMap[':' + name] ||
21571        el.rawAttrsMap['v-bind:' + name] ||
21572        el.rawAttrsMap[name]);
21573}
21574function getBindingAttr(el, name, getStatic) {
21575    var dynamicValue = getAndRemoveAttr(el, ':' + name) || getAndRemoveAttr(el, 'v-bind:' + name);
21576    if (dynamicValue != null) {
21577        return parseFilters(dynamicValue);
21578    }
21579    else if (getStatic !== false) {
21580        var staticValue = getAndRemoveAttr(el, name);
21581        if (staticValue != null) {
21582            return JSON.stringify(staticValue);
21583        }
21584    }
21585}
21586// note: this only removes the attr from the Array (attrsList) so that it
21587// doesn't get processed by processAttrs.
21588// By default it does NOT remove it from the map (attrsMap) because the map is
21589// needed during codegen.
21590function getAndRemoveAttr(el, name, removeFromMap) {
21591    var val;
21592    if ((val = el.attrsMap[name]) != null) {
21593        var list = el.attrsList;
21594        for (var i = 0, l = list.length; i < l; i++) {
21595            if (list[i].name === name) {
21596                list.splice(i, 1);
21597                break;
21598            }
21599        }
21600    }
21601    if (removeFromMap) {
21602        delete el.attrsMap[name];
21603    }
21604    return val;
21605}
21606function getAndRemoveAttrByRegex(el, name) {
21607    var list = el.attrsList;
21608    for (var i = 0, l = list.length; i < l; i++) {
21609        var attr = list[i];
21610        if (name.test(attr.name)) {
21611            list.splice(i, 1);
21612            return attr;
21613        }
21614    }
21615}
21616function rangeSetItem(item, range) {
21617    if (range) {
21618        if (range.start != null) {
21619            item.start = range.start;
21620        }
21621        if (range.end != null) {
21622            item.end = range.end;
21623        }
21624    }
21625    return item;
21626}
21627
21628/**
21629 * Cross-platform code generation for component v-model
21630 */
21631function genComponentModel(el, value, modifiers) {
21632    var _a = modifiers || {}, number = _a.number, trim = _a.trim;
21633    var baseValueExpression = '$$v';
21634    var valueExpression = baseValueExpression;
21635    if (trim) {
21636        valueExpression =
21637            "(typeof ".concat(baseValueExpression, " === 'string'") +
21638                "? ".concat(baseValueExpression, ".trim()") +
21639                ": ".concat(baseValueExpression, ")");
21640    }
21641    if (number) {
21642        valueExpression = "_n(".concat(valueExpression, ")");
21643    }
21644    var assignment = genAssignmentCode(value, valueExpression);
21645    el.model = {
21646        value: "(".concat(value, ")"),
21647        expression: JSON.stringify(value),
21648        callback: "function (".concat(baseValueExpression, ") {").concat(assignment, "}")
21649    };
21650}
21651/**
21652 * Cross-platform codegen helper for generating v-model value assignment code.
21653 */
21654function genAssignmentCode(value, assignment) {
21655    var res = parseModel(value);
21656    if (res.key === null) {
21657        return "".concat(value, "=").concat(assignment);
21658    }
21659    else {
21660        return "$set(".concat(res.exp, ", ").concat(res.key, ", ").concat(assignment, ")");
21661    }
21662}
21663/**
21664 * Parse a v-model expression into a base path and a final key segment.
21665 * Handles both dot-path and possible square brackets.
21666 *
21667 * Possible cases:
21668 *
21669 * - test
21670 * - test[key]
21671 * - test[test1[key]]
21672 * - test["a"][key]
21673 * - xxx.test[a[a].test1[key]]
21674 * - test.xxx.a["asa"][test1[key]]
21675 *
21676 */
21677var len, str, chr, index, expressionPos, expressionEndPos;
21678function parseModel(val) {
21679    // Fix https://github.com/vuejs/vue/pull/7730
21680    // allow v-model="obj.val " (trailing whitespace)
21681    val = val.trim();
21682    len = val.length;
21683    if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) {
21684        index = val.lastIndexOf('.');
21685        if (index > -1) {
21686            return {
21687                exp: val.slice(0, index),
21688                key: '"' + val.slice(index + 1) + '"'
21689            };
21690        }
21691        else {
21692            return {
21693                exp: val,
21694                key: null
21695            };
21696        }
21697    }
21698    str = val;
21699    index = expressionPos = expressionEndPos = 0;
21700    while (!eof()) {
21701        chr = next();
21702        /* istanbul ignore if */
21703        if (isStringStart(chr)) {
21704            parseString(chr);
21705        }
21706        else if (chr === 0x5b) {
21707            parseBracket(chr);
21708        }
21709    }
21710    return {
21711        exp: val.slice(0, expressionPos),
21712        key: val.slice(expressionPos + 1, expressionEndPos)
21713    };
21714}
21715function next() {
21716    return str.charCodeAt(++index);
21717}
21718function eof() {
21719    return index >= len;
21720}
21721function isStringStart(chr) {
21722    return chr === 0x22 || chr === 0x27;
21723}
21724function parseBracket(chr) {
21725    var inBracket = 1;
21726    expressionPos = index;
21727    while (!eof()) {
21728        chr = next();
21729        if (isStringStart(chr)) {
21730            parseString(chr);
21731            continue;
21732        }
21733        if (chr === 0x5b)
21734            inBracket++;
21735        if (chr === 0x5d)
21736            inBracket--;
21737        if (inBracket === 0) {
21738            expressionEndPos = index;
21739            break;
21740        }
21741    }
21742}
21743function parseString(chr) {
21744    var stringQuote = chr;
21745    while (!eof()) {
21746        chr = next();
21747        if (chr === stringQuote) {
21748            break;
21749        }
21750    }
21751}
21752
21753var warn$1;
21754// in some cases, the event used has to be determined at runtime
21755// so we used some reserved tokens during compile.
21756var RANGE_TOKEN = '__r';
21757var CHECKBOX_RADIO_TOKEN = '__c';
21758function model$1(el, dir, _warn) {
21759    warn$1 = _warn;
21760    var value = dir.value;
21761    var modifiers = dir.modifiers;
21762    var tag = el.tag;
21763    var type = el.attrsMap.type;
21764    if (true) {
21765        // inputs with type="file" are read only and setting the input's
21766        // value will throw an error.
21767        if (tag === 'input' && type === 'file') {
21768            warn$1("<".concat(el.tag, " v-model=\"").concat(value, "\" type=\"file\">:\n") +
21769                "File inputs are read only. Use a v-on:change listener instead.", el.rawAttrsMap['v-model']);
21770        }
21771    }
21772    if (el.component) {
21773        genComponentModel(el, value, modifiers);
21774        // component v-model doesn't need extra runtime
21775        return false;
21776    }
21777    else if (tag === 'select') {
21778        genSelect(el, value, modifiers);
21779    }
21780    else if (tag === 'input' && type === 'checkbox') {
21781        genCheckboxModel(el, value, modifiers);
21782    }
21783    else if (tag === 'input' && type === 'radio') {
21784        genRadioModel(el, value, modifiers);
21785    }
21786    else if (tag === 'input' || tag === 'textarea') {
21787        genDefaultModel(el, value, modifiers);
21788    }
21789    else if (!config.isReservedTag(tag)) {
21790        genComponentModel(el, value, modifiers);
21791        // component v-model doesn't need extra runtime
21792        return false;
21793    }
21794    else if (true) {
21795        warn$1("<".concat(el.tag, " v-model=\"").concat(value, "\">: ") +
21796            "v-model is not supported on this element type. " +
21797            "If you are working with contenteditable, it's recommended to " +
21798            'wrap a library dedicated for that purpose inside a custom component.', el.rawAttrsMap['v-model']);
21799    }
21800    // ensure runtime directive metadata
21801    return true;
21802}
21803function genCheckboxModel(el, value, modifiers) {
21804    var number = modifiers && modifiers.number;
21805    var valueBinding = getBindingAttr(el, 'value') || 'null';
21806    var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';
21807    var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';
21808    addProp(el, 'checked', "Array.isArray(".concat(value, ")") +
21809        "?_i(".concat(value, ",").concat(valueBinding, ")>-1") +
21810        (trueValueBinding === 'true'
21811            ? ":(".concat(value, ")")
21812            : ":_q(".concat(value, ",").concat(trueValueBinding, ")")));
21813    addHandler(el, 'change', "var $$a=".concat(value, ",") +
21814        '$$el=$event.target,' +
21815        "$$c=$$el.checked?(".concat(trueValueBinding, "):(").concat(falseValueBinding, ");") +
21816        'if(Array.isArray($$a)){' +
21817        "var $$v=".concat(number ? '_n(' + valueBinding + ')' : valueBinding, ",") +
21818        '$$i=_i($$a,$$v);' +
21819        "if($$el.checked){$$i<0&&(".concat(genAssignmentCode(value, '$$a.concat([$$v])'), ")}") +
21820        "else{$$i>-1&&(".concat(genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))'), ")}") +
21821        "}else{".concat(genAssignmentCode(value, '$$c'), "}"), null, true);
21822}
21823function genRadioModel(el, value, modifiers) {
21824    var number = modifiers && modifiers.number;
21825    var valueBinding = getBindingAttr(el, 'value') || 'null';
21826    valueBinding = number ? "_n(".concat(valueBinding, ")") : valueBinding;
21827    addProp(el, 'checked', "_q(".concat(value, ",").concat(valueBinding, ")"));
21828    addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);
21829}
21830function genSelect(el, value, modifiers) {
21831    var number = modifiers && modifiers.number;
21832    var selectedVal = "Array.prototype.filter" +
21833        ".call($event.target.options,function(o){return o.selected})" +
21834        ".map(function(o){var val = \"_value\" in o ? o._value : o.value;" +
21835        "return ".concat(number ? '_n(val)' : 'val', "})");
21836    var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';
21837    var code = "var $$selectedVal = ".concat(selectedVal, ";");
21838    code = "".concat(code, " ").concat(genAssignmentCode(value, assignment));
21839    addHandler(el, 'change', code, null, true);
21840}
21841function genDefaultModel(el, value, modifiers) {
21842    var type = el.attrsMap.type;
21843    // warn if v-bind:value conflicts with v-model
21844    // except for inputs with v-bind:type
21845    if (true) {
21846        var value_1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];
21847        var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];
21848        if (value_1 && !typeBinding) {
21849            var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';
21850            warn$1("".concat(binding, "=\"").concat(value_1, "\" conflicts with v-model on the same element ") +
21851                'because the latter already expands to a value binding internally', el.rawAttrsMap[binding]);
21852        }
21853    }
21854    var _a = modifiers || {}, lazy = _a.lazy, number = _a.number, trim = _a.trim;
21855    var needCompositionGuard = !lazy && type !== 'range';
21856    var event = lazy ? 'change' : type === 'range' ? RANGE_TOKEN : 'input';
21857    var valueExpression = '$event.target.value';
21858    if (trim) {
21859        valueExpression = "$event.target.value.trim()";
21860    }
21861    if (number) {
21862        valueExpression = "_n(".concat(valueExpression, ")");
21863    }
21864    var code = genAssignmentCode(value, valueExpression);
21865    if (needCompositionGuard) {
21866        code = "if($event.target.composing)return;".concat(code);
21867    }
21868    addProp(el, 'value', "(".concat(value, ")"));
21869    addHandler(el, event, code, null, true);
21870    if (trim || number) {
21871        addHandler(el, 'blur', '$forceUpdate()');
21872    }
21873}
21874
21875// normalize v-model event tokens that can only be determined at runtime.
21876// it's important to place the event as the first in the array because
21877// the whole point is ensuring the v-model callback gets called before
21878// user-attached handlers.
21879function normalizeEvents(on) {
21880    /* istanbul ignore if */
21881    if (isDef(on[RANGE_TOKEN])) {
21882        // IE input[type=range] only supports `change` event
21883        var event_1 = isIE ? 'change' : 'input';
21884        on[event_1] = [].concat(on[RANGE_TOKEN], on[event_1] || []);
21885        delete on[RANGE_TOKEN];
21886    }
21887    // This was originally intended to fix #4521 but no longer necessary
21888    // after 2.5. Keeping it for backwards compat with generated code from < 2.4
21889    /* istanbul ignore if */
21890    if (isDef(on[CHECKBOX_RADIO_TOKEN])) {
21891        on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);
21892        delete on[CHECKBOX_RADIO_TOKEN];
21893    }
21894}
21895var target;
21896function createOnceHandler(event, handler, capture) {
21897    var _target = target; // save current target element in closure
21898    return function onceHandler() {
21899        var res = handler.apply(null, arguments);
21900        if (res !== null) {
21901            remove(event, onceHandler, capture, _target);
21902        }
21903    };
21904}
21905// #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp
21906// implementation and does not fire microtasks in between event propagation, so
21907// safe to exclude.
21908var useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53);
21909function add(name, handler, capture, passive) {
21910    // async edge case #6566: inner click event triggers patch, event handler
21911    // attached to outer element during patch, and triggered again. This
21912    // happens because browsers fire microtask ticks between event propagation.
21913    // the solution is simple: we save the timestamp when a handler is attached,
21914    // and the handler would only fire if the event passed to it was fired
21915    // AFTER it was attached.
21916    if (useMicrotaskFix) {
21917        var attachedTimestamp_1 = currentFlushTimestamp;
21918        var original_1 = handler;
21919        //@ts-expect-error
21920        handler = original_1._wrapper = function (e) {
21921            if (
21922            // no bubbling, should always fire.
21923            // this is just a safety net in case event.timeStamp is unreliable in
21924            // certain weird environments...
21925            e.target === e.currentTarget ||
21926                // event is fired after handler attachment
21927                e.timeStamp >= attachedTimestamp_1 ||
21928                // bail for environments that have buggy event.timeStamp implementations
21929                // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState
21930                // #9681 QtWebEngine event.timeStamp is negative value
21931                e.timeStamp <= 0 ||
21932                // #9448 bail if event is fired in another document in a multi-page
21933                // electron/nw.js app, since event.timeStamp will be using a different
21934                // starting reference
21935                e.target.ownerDocument !== document) {
21936                return original_1.apply(this, arguments);
21937            }
21938        };
21939    }
21940    target.addEventListener(name, handler, supportsPassive ? { capture: capture, passive: passive } : capture);
21941}
21942function remove(name, handler, capture, _target) {
21943    (_target || target).removeEventListener(name, 
21944    //@ts-expect-error
21945    handler._wrapper || handler, capture);
21946}
21947function updateDOMListeners(oldVnode, vnode) {
21948    if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {
21949        return;
21950    }
21951    var on = vnode.data.on || {};
21952    var oldOn = oldVnode.data.on || {};
21953    // vnode is empty when removing all listeners,
21954    // and use old vnode dom element
21955    target = vnode.elm || oldVnode.elm;
21956    normalizeEvents(on);
21957    updateListeners(on, oldOn, add, remove, createOnceHandler, vnode.context);
21958    target = undefined;
21959}
21960var events = {
21961    create: updateDOMListeners,
21962    update: updateDOMListeners,
21963    // @ts-expect-error emptyNode has actually data
21964    destroy: function (vnode) { return updateDOMListeners(vnode, emptyNode); }
21965};
21966
21967var svgContainer;
21968function updateDOMProps(oldVnode, vnode) {
21969    if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {
21970        return;
21971    }
21972    var key, cur;
21973    var elm = vnode.elm;
21974    var oldProps = oldVnode.data.domProps || {};
21975    var props = vnode.data.domProps || {};
21976    // clone observed objects, as the user probably wants to mutate it
21977    if (isDef(props.__ob__) || isTrue(props._v_attr_proxy)) {
21978        props = vnode.data.domProps = extend({}, props);
21979    }
21980    for (key in oldProps) {
21981        if (!(key in props)) {
21982            elm[key] = '';
21983        }
21984    }
21985    for (key in props) {
21986        cur = props[key];
21987        // ignore children if the node has textContent or innerHTML,
21988        // as these will throw away existing DOM nodes and cause removal errors
21989        // on subsequent patches (#3360)
21990        if (key === 'textContent' || key === 'innerHTML') {
21991            if (vnode.children)
21992                vnode.children.length = 0;
21993            if (cur === oldProps[key])
21994                continue;
21995            // #6601 work around Chrome version <= 55 bug where single textNode
21996            // replaced by innerHTML/textContent retains its parentNode property
21997            if (elm.childNodes.length === 1) {
21998                elm.removeChild(elm.childNodes[0]);
21999            }
22000        }
22001        if (key === 'value' && elm.tagName !== 'PROGRESS') {
22002            // store value as _value as well since
22003            // non-string values will be stringified
22004            elm._value = cur;
22005            // avoid resetting cursor position when value is the same
22006            var strCur = isUndef(cur) ? '' : String(cur);
22007            if (shouldUpdateValue(elm, strCur)) {
22008                elm.value = strCur;
22009            }
22010        }
22011        else if (key === 'innerHTML' &&
22012            isSVG(elm.tagName) &&
22013            isUndef(elm.innerHTML)) {
22014            // IE doesn't support innerHTML for SVG elements
22015            svgContainer = svgContainer || document.createElement('div');
22016            svgContainer.innerHTML = "<svg>".concat(cur, "</svg>");
22017            var svg = svgContainer.firstChild;
22018            while (elm.firstChild) {
22019                elm.removeChild(elm.firstChild);
22020            }
22021            while (svg.firstChild) {
22022                elm.appendChild(svg.firstChild);
22023            }
22024        }
22025        else if (
22026        // skip the update if old and new VDOM state is the same.
22027        // `value` is handled separately because the DOM value may be temporarily
22028        // out of sync with VDOM state due to focus, composition and modifiers.
22029        // This  #4521 by skipping the unnecessary `checked` update.
22030        cur !== oldProps[key]) {
22031            // some property updates can throw
22032            // e.g. `value` on <progress> w/ non-finite value
22033            try {
22034                elm[key] = cur;
22035            }
22036            catch (e) { }
22037        }
22038    }
22039}
22040function shouldUpdateValue(elm, checkVal) {
22041    return (
22042    //@ts-expect-error
22043    !elm.composing &&
22044        (elm.tagName === 'OPTION' ||
22045            isNotInFocusAndDirty(elm, checkVal) ||
22046            isDirtyWithModifiers(elm, checkVal)));
22047}
22048function isNotInFocusAndDirty(elm, checkVal) {
22049    // return true when textbox (.number and .trim) loses focus and its value is
22050    // not equal to the updated value
22051    var notInFocus = true;
22052    // #6157
22053    // work around IE bug when accessing document.activeElement in an iframe
22054    try {
22055        notInFocus = document.activeElement !== elm;
22056    }
22057    catch (e) { }
22058    return notInFocus && elm.value !== checkVal;
22059}
22060function isDirtyWithModifiers(elm, newVal) {
22061    var value = elm.value;
22062    var modifiers = elm._vModifiers; // injected by v-model runtime
22063    if (isDef(modifiers)) {
22064        if (modifiers.number) {
22065            return toNumber(value) !== toNumber(newVal);
22066        }
22067        if (modifiers.trim) {
22068            return value.trim() !== newVal.trim();
22069        }
22070    }
22071    return value !== newVal;
22072}
22073var domProps = {
22074    create: updateDOMProps,
22075    update: updateDOMProps
22076};
22077
22078var parseStyleText = cached(function (cssText) {
22079    var res = {};
22080    var listDelimiter = /;(?![^(]*\))/g;
22081    var propertyDelimiter = /:(.+)/;
22082    cssText.split(listDelimiter).forEach(function (item) {
22083        if (item) {
22084            var tmp = item.split(propertyDelimiter);
22085            tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());
22086        }
22087    });
22088    return res;
22089});
22090// merge static and dynamic style data on the same vnode
22091function normalizeStyleData(data) {
22092    var style = normalizeStyleBinding(data.style);
22093    // static style is pre-processed into an object during compilation
22094    // and is always a fresh object, so it's safe to merge into it
22095    return data.staticStyle ? extend(data.staticStyle, style) : style;
22096}
22097// normalize possible array / string values into Object
22098function normalizeStyleBinding(bindingStyle) {
22099    if (Array.isArray(bindingStyle)) {
22100        return toObject(bindingStyle);
22101    }
22102    if (typeof bindingStyle === 'string') {
22103        return parseStyleText(bindingStyle);
22104    }
22105    return bindingStyle;
22106}
22107/**
22108 * parent component style should be after child's
22109 * so that parent component's style could override it
22110 */
22111function getStyle(vnode, checkChild) {
22112    var res = {};
22113    var styleData;
22114    if (checkChild) {
22115        var childNode = vnode;
22116        while (childNode.componentInstance) {
22117            childNode = childNode.componentInstance._vnode;
22118            if (childNode &&
22119                childNode.data &&
22120                (styleData = normalizeStyleData(childNode.data))) {
22121                extend(res, styleData);
22122            }
22123        }
22124    }
22125    if ((styleData = normalizeStyleData(vnode.data))) {
22126        extend(res, styleData);
22127    }
22128    var parentNode = vnode;
22129    // @ts-expect-error parentNode.parent not VNodeWithData
22130    while ((parentNode = parentNode.parent)) {
22131        if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {
22132            extend(res, styleData);
22133        }
22134    }
22135    return res;
22136}
22137
22138var cssVarRE = /^--/;
22139var importantRE = /\s*!important$/;
22140var setProp = function (el, name, val) {
22141    /* istanbul ignore if */
22142    if (cssVarRE.test(name)) {
22143        el.style.setProperty(name, val);
22144    }
22145    else if (importantRE.test(val)) {
22146        el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');
22147    }
22148    else {
22149        var normalizedName = normalize(name);
22150        if (Array.isArray(val)) {
22151            // Support values array created by autoprefixer, e.g.
22152            // {display: ["-webkit-box", "-ms-flexbox", "flex"]}
22153            // Set them one by one, and the browser will only set those it can recognize
22154            for (var i = 0, len = val.length; i < len; i++) {
22155                el.style[normalizedName] = val[i];
22156            }
22157        }
22158        else {
22159            el.style[normalizedName] = val;
22160        }
22161    }
22162};
22163var vendorNames = ['Webkit', 'Moz', 'ms'];
22164var emptyStyle;
22165var normalize = cached(function (prop) {
22166    emptyStyle = emptyStyle || document.createElement('div').style;
22167    prop = camelize(prop);
22168    if (prop !== 'filter' && prop in emptyStyle) {
22169        return prop;
22170    }
22171    var capName = prop.charAt(0).toUpperCase() + prop.slice(1);
22172    for (var i = 0; i < vendorNames.length; i++) {
22173        var name_1 = vendorNames[i] + capName;
22174        if (name_1 in emptyStyle) {
22175            return name_1;
22176        }
22177    }
22178});
22179function updateStyle(oldVnode, vnode) {
22180    var data = vnode.data;
22181    var oldData = oldVnode.data;
22182    if (isUndef(data.staticStyle) &&
22183        isUndef(data.style) &&
22184        isUndef(oldData.staticStyle) &&
22185        isUndef(oldData.style)) {
22186        return;
22187    }
22188    var cur, name;
22189    var el = vnode.elm;
22190    var oldStaticStyle = oldData.staticStyle;
22191    var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};
22192    // if static style exists, stylebinding already merged into it when doing normalizeStyleData
22193    var oldStyle = oldStaticStyle || oldStyleBinding;
22194    var style = normalizeStyleBinding(vnode.data.style) || {};
22195    // store normalized style under a different key for next diff
22196    // make sure to clone it if it's reactive, since the user likely wants
22197    // to mutate it.
22198    vnode.data.normalizedStyle = isDef(style.__ob__) ? extend({}, style) : style;
22199    var newStyle = getStyle(vnode, true);
22200    for (name in oldStyle) {
22201        if (isUndef(newStyle[name])) {
22202            setProp(el, name, '');
22203        }
22204    }
22205    for (name in newStyle) {
22206        cur = newStyle[name];
22207        if (cur !== oldStyle[name]) {
22208            // ie9 setting to null has no effect, must use empty string
22209            setProp(el, name, cur == null ? '' : cur);
22210        }
22211    }
22212}
22213var style$1 = {
22214    create: updateStyle,
22215    update: updateStyle
22216};
22217
22218var whitespaceRE$1 = /\s+/;
22219/**
22220 * Add class with compatibility for SVG since classList is not supported on
22221 * SVG elements in IE
22222 */
22223function addClass(el, cls) {
22224    /* istanbul ignore if */
22225    if (!cls || !(cls = cls.trim())) {
22226        return;
22227    }
22228    /* istanbul ignore else */
22229    if (el.classList) {
22230        if (cls.indexOf(' ') > -1) {
22231            cls.split(whitespaceRE$1).forEach(function (c) { return el.classList.add(c); });
22232        }
22233        else {
22234            el.classList.add(cls);
22235        }
22236    }
22237    else {
22238        var cur = " ".concat(el.getAttribute('class') || '', " ");
22239        if (cur.indexOf(' ' + cls + ' ') < 0) {
22240            el.setAttribute('class', (cur + cls).trim());
22241        }
22242    }
22243}
22244/**
22245 * Remove class with compatibility for SVG since classList is not supported on
22246 * SVG elements in IE
22247 */
22248function removeClass(el, cls) {
22249    /* istanbul ignore if */
22250    if (!cls || !(cls = cls.trim())) {
22251        return;
22252    }
22253    /* istanbul ignore else */
22254    if (el.classList) {
22255        if (cls.indexOf(' ') > -1) {
22256            cls.split(whitespaceRE$1).forEach(function (c) { return el.classList.remove(c); });
22257        }
22258        else {
22259            el.classList.remove(cls);
22260        }
22261        if (!el.classList.length) {
22262            el.removeAttribute('class');
22263        }
22264    }
22265    else {
22266        var cur = " ".concat(el.getAttribute('class') || '', " ");
22267        var tar = ' ' + cls + ' ';
22268        while (cur.indexOf(tar) >= 0) {
22269            cur = cur.replace(tar, ' ');
22270        }
22271        cur = cur.trim();
22272        if (cur) {
22273            el.setAttribute('class', cur);
22274        }
22275        else {
22276            el.removeAttribute('class');
22277        }
22278    }
22279}
22280
22281function resolveTransition(def) {
22282    if (!def) {
22283        return;
22284    }
22285    /* istanbul ignore else */
22286    if (typeof def === 'object') {
22287        var res = {};
22288        if (def.css !== false) {
22289            extend(res, autoCssTransition(def.name || 'v'));
22290        }
22291        extend(res, def);
22292        return res;
22293    }
22294    else if (typeof def === 'string') {
22295        return autoCssTransition(def);
22296    }
22297}
22298var autoCssTransition = cached(function (name) {
22299    return {
22300        enterClass: "".concat(name, "-enter"),
22301        enterToClass: "".concat(name, "-enter-to"),
22302        enterActiveClass: "".concat(name, "-enter-active"),
22303        leaveClass: "".concat(name, "-leave"),
22304        leaveToClass: "".concat(name, "-leave-to"),
22305        leaveActiveClass: "".concat(name, "-leave-active")
22306    };
22307});
22308var hasTransition = inBrowser && !isIE9;
22309var TRANSITION = 'transition';
22310var ANIMATION = 'animation';
22311// Transition property/event sniffing
22312var transitionProp = 'transition';
22313var transitionEndEvent = 'transitionend';
22314var animationProp = 'animation';
22315var animationEndEvent = 'animationend';
22316if (hasTransition) {
22317    /* istanbul ignore if */
22318    if (window.ontransitionend === undefined &&
22319        window.onwebkittransitionend !== undefined) {
22320        transitionProp = 'WebkitTransition';
22321        transitionEndEvent = 'webkitTransitionEnd';
22322    }
22323    if (window.onanimationend === undefined &&
22324        window.onwebkitanimationend !== undefined) {
22325        animationProp = 'WebkitAnimation';
22326        animationEndEvent = 'webkitAnimationEnd';
22327    }
22328}
22329// binding to window is necessary to make hot reload work in IE in strict mode
22330var raf = inBrowser
22331    ? window.requestAnimationFrame
22332        ? window.requestAnimationFrame.bind(window)
22333        : setTimeout
22334    : /* istanbul ignore next */ function (/* istanbul ignore next */ fn) { return fn(); };
22335function nextFrame(fn) {
22336    raf(function () {
22337        // @ts-expect-error
22338        raf(fn);
22339    });
22340}
22341function addTransitionClass(el, cls) {
22342    var transitionClasses = el._transitionClasses || (el._transitionClasses = []);
22343    if (transitionClasses.indexOf(cls) < 0) {
22344        transitionClasses.push(cls);
22345        addClass(el, cls);
22346    }
22347}
22348function removeTransitionClass(el, cls) {
22349    if (el._transitionClasses) {
22350        remove$2(el._transitionClasses, cls);
22351    }
22352    removeClass(el, cls);
22353}
22354function whenTransitionEnds(el, expectedType, cb) {
22355    var _a = getTransitionInfo(el, expectedType), type = _a.type, timeout = _a.timeout, propCount = _a.propCount;
22356    if (!type)
22357        return cb();
22358    var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;
22359    var ended = 0;
22360    var end = function () {
22361        el.removeEventListener(event, onEnd);
22362        cb();
22363    };
22364    var onEnd = function (e) {
22365        if (e.target === el) {
22366            if (++ended >= propCount) {
22367                end();
22368            }
22369        }
22370    };
22371    setTimeout(function () {
22372        if (ended < propCount) {
22373            end();
22374        }
22375    }, timeout + 1);
22376    el.addEventListener(event, onEnd);
22377}
22378var transformRE = /\b(transform|all)(,|$)/;
22379function getTransitionInfo(el, expectedType) {
22380    var styles = window.getComputedStyle(el);
22381    // JSDOM may return undefined for transition properties
22382    var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');
22383    var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');
22384    var transitionTimeout = getTimeout(transitionDelays, transitionDurations);
22385    var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');
22386    var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');
22387    var animationTimeout = getTimeout(animationDelays, animationDurations);
22388    var type;
22389    var timeout = 0;
22390    var propCount = 0;
22391    /* istanbul ignore if */
22392    if (expectedType === TRANSITION) {
22393        if (transitionTimeout > 0) {
22394            type = TRANSITION;
22395            timeout = transitionTimeout;
22396            propCount = transitionDurations.length;
22397        }
22398    }
22399    else if (expectedType === ANIMATION) {
22400        if (animationTimeout > 0) {
22401            type = ANIMATION;
22402            timeout = animationTimeout;
22403            propCount = animationDurations.length;
22404        }
22405    }
22406    else {
22407        timeout = Math.max(transitionTimeout, animationTimeout);
22408        type =
22409            timeout > 0
22410                ? transitionTimeout > animationTimeout
22411                    ? TRANSITION
22412                    : ANIMATION
22413                : null;
22414        propCount = type
22415            ? type === TRANSITION
22416                ? transitionDurations.length
22417                : animationDurations.length
22418            : 0;
22419    }
22420    var hasTransform = type === TRANSITION && transformRE.test(styles[transitionProp + 'Property']);
22421    return {
22422        type: type,
22423        timeout: timeout,
22424        propCount: propCount,
22425        hasTransform: hasTransform
22426    };
22427}
22428function getTimeout(delays, durations) {
22429    /* istanbul ignore next */
22430    while (delays.length < durations.length) {
22431        delays = delays.concat(delays);
22432    }
22433    return Math.max.apply(null, durations.map(function (d, i) {
22434        return toMs(d) + toMs(delays[i]);
22435    }));
22436}
22437// Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers
22438// in a locale-dependent way, using a comma instead of a dot.
22439// If comma is not replaced with a dot, the input will be rounded down (i.e. acting
22440// as a floor function) causing unexpected behaviors
22441function toMs(s) {
22442    return Number(s.slice(0, -1).replace(',', '.')) * 1000;
22443}
22444
22445function enter(vnode, toggleDisplay) {
22446    var el = vnode.elm;
22447    // call leave callback now
22448    if (isDef(el._leaveCb)) {
22449        el._leaveCb.cancelled = true;
22450        el._leaveCb();
22451    }
22452    var data = resolveTransition(vnode.data.transition);
22453    if (isUndef(data)) {
22454        return;
22455    }
22456    /* istanbul ignore if */
22457    if (isDef(el._enterCb) || el.nodeType !== 1) {
22458        return;
22459    }
22460    var css = data.css, type = data.type, enterClass = data.enterClass, enterToClass = data.enterToClass, enterActiveClass = data.enterActiveClass, appearClass = data.appearClass, appearToClass = data.appearToClass, appearActiveClass = data.appearActiveClass, beforeEnter = data.beforeEnter, enter = data.enter, afterEnter = data.afterEnter, enterCancelled = data.enterCancelled, beforeAppear = data.beforeAppear, appear = data.appear, afterAppear = data.afterAppear, appearCancelled = data.appearCancelled, duration = data.duration;
22461    // activeInstance will always be the <transition> component managing this
22462    // transition. One edge case to check is when the <transition> is placed
22463    // as the root node of a child component. In that case we need to check
22464    // <transition>'s parent for appear check.
22465    var context = activeInstance;
22466    var transitionNode = activeInstance.$vnode;
22467    while (transitionNode && transitionNode.parent) {
22468        context = transitionNode.context;
22469        transitionNode = transitionNode.parent;
22470    }
22471    var isAppear = !context._isMounted || !vnode.isRootInsert;
22472    if (isAppear && !appear && appear !== '') {
22473        return;
22474    }
22475    var startClass = isAppear && appearClass ? appearClass : enterClass;
22476    var activeClass = isAppear && appearActiveClass ? appearActiveClass : enterActiveClass;
22477    var toClass = isAppear && appearToClass ? appearToClass : enterToClass;
22478    var beforeEnterHook = isAppear ? beforeAppear || beforeEnter : beforeEnter;
22479    var enterHook = isAppear ? (isFunction(appear) ? appear : enter) : enter;
22480    var afterEnterHook = isAppear ? afterAppear || afterEnter : afterEnter;
22481    var enterCancelledHook = isAppear
22482        ? appearCancelled || enterCancelled
22483        : enterCancelled;
22484    var explicitEnterDuration = toNumber(isObject(duration) ? duration.enter : duration);
22485    if ( true && explicitEnterDuration != null) {
22486        checkDuration(explicitEnterDuration, 'enter', vnode);
22487    }
22488    var expectsCSS = css !== false && !isIE9;
22489    var userWantsControl = getHookArgumentsLength(enterHook);
22490    var cb = (el._enterCb = once(function () {
22491        if (expectsCSS) {
22492            removeTransitionClass(el, toClass);
22493            removeTransitionClass(el, activeClass);
22494        }
22495        // @ts-expect-error
22496        if (cb.cancelled) {
22497            if (expectsCSS) {
22498                removeTransitionClass(el, startClass);
22499            }
22500            enterCancelledHook && enterCancelledHook(el);
22501        }
22502        else {
22503            afterEnterHook && afterEnterHook(el);
22504        }
22505        el._enterCb = null;
22506    }));
22507    if (!vnode.data.show) {
22508        // remove pending leave element on enter by injecting an insert hook
22509        mergeVNodeHook(vnode, 'insert', function () {
22510            var parent = el.parentNode;
22511            var pendingNode = parent && parent._pending && parent._pending[vnode.key];
22512            if (pendingNode &&
22513                pendingNode.tag === vnode.tag &&
22514                pendingNode.elm._leaveCb) {
22515                pendingNode.elm._leaveCb();
22516            }
22517            enterHook && enterHook(el, cb);
22518        });
22519    }
22520    // start enter transition
22521    beforeEnterHook && beforeEnterHook(el);
22522    if (expectsCSS) {
22523        addTransitionClass(el, startClass);
22524        addTransitionClass(el, activeClass);
22525        nextFrame(function () {
22526            removeTransitionClass(el, startClass);
22527            // @ts-expect-error
22528            if (!cb.cancelled) {
22529                addTransitionClass(el, toClass);
22530                if (!userWantsControl) {
22531                    if (isValidDuration(explicitEnterDuration)) {
22532                        setTimeout(cb, explicitEnterDuration);
22533                    }
22534                    else {
22535                        whenTransitionEnds(el, type, cb);
22536                    }
22537                }
22538            }
22539        });
22540    }
22541    if (vnode.data.show) {
22542        toggleDisplay && toggleDisplay();
22543        enterHook && enterHook(el, cb);
22544    }
22545    if (!expectsCSS && !userWantsControl) {
22546        cb();
22547    }
22548}
22549function leave(vnode, rm) {
22550    var el = vnode.elm;
22551    // call enter callback now
22552    if (isDef(el._enterCb)) {
22553        el._enterCb.cancelled = true;
22554        el._enterCb();
22555    }
22556    var data = resolveTransition(vnode.data.transition);
22557    if (isUndef(data) || el.nodeType !== 1) {
22558        return rm();
22559    }
22560    /* istanbul ignore if */
22561    if (isDef(el._leaveCb)) {
22562        return;
22563    }
22564    var css = data.css, type = data.type, leaveClass = data.leaveClass, leaveToClass = data.leaveToClass, leaveActiveClass = data.leaveActiveClass, beforeLeave = data.beforeLeave, leave = data.leave, afterLeave = data.afterLeave, leaveCancelled = data.leaveCancelled, delayLeave = data.delayLeave, duration = data.duration;
22565    var expectsCSS = css !== false && !isIE9;
22566    var userWantsControl = getHookArgumentsLength(leave);
22567    var explicitLeaveDuration = toNumber(isObject(duration) ? duration.leave : duration);
22568    if ( true && isDef(explicitLeaveDuration)) {
22569        checkDuration(explicitLeaveDuration, 'leave', vnode);
22570    }
22571    var cb = (el._leaveCb = once(function () {
22572        if (el.parentNode && el.parentNode._pending) {
22573            el.parentNode._pending[vnode.key] = null;
22574        }
22575        if (expectsCSS) {
22576            removeTransitionClass(el, leaveToClass);
22577            removeTransitionClass(el, leaveActiveClass);
22578        }
22579        // @ts-expect-error
22580        if (cb.cancelled) {
22581            if (expectsCSS) {
22582                removeTransitionClass(el, leaveClass);
22583            }
22584            leaveCancelled && leaveCancelled(el);
22585        }
22586        else {
22587            rm();
22588            afterLeave && afterLeave(el);
22589        }
22590        el._leaveCb = null;
22591    }));
22592    if (delayLeave) {
22593        delayLeave(performLeave);
22594    }
22595    else {
22596        performLeave();
22597    }
22598    function performLeave() {
22599        // the delayed leave may have already been cancelled
22600        // @ts-expect-error
22601        if (cb.cancelled) {
22602            return;
22603        }
22604        // record leaving element
22605        if (!vnode.data.show && el.parentNode) {
22606            (el.parentNode._pending || (el.parentNode._pending = {}))[vnode.key] =
22607                vnode;
22608        }
22609        beforeLeave && beforeLeave(el);
22610        if (expectsCSS) {
22611            addTransitionClass(el, leaveClass);
22612            addTransitionClass(el, leaveActiveClass);
22613            nextFrame(function () {
22614                removeTransitionClass(el, leaveClass);
22615                // @ts-expect-error
22616                if (!cb.cancelled) {
22617                    addTransitionClass(el, leaveToClass);
22618                    if (!userWantsControl) {
22619                        if (isValidDuration(explicitLeaveDuration)) {
22620                            setTimeout(cb, explicitLeaveDuration);
22621                        }
22622                        else {
22623                            whenTransitionEnds(el, type, cb);
22624                        }
22625                    }
22626                }
22627            });
22628        }
22629        leave && leave(el, cb);
22630        if (!expectsCSS && !userWantsControl) {
22631            cb();
22632        }
22633    }
22634}
22635// only used in dev mode
22636function checkDuration(val, name, vnode) {
22637    if (typeof val !== 'number') {
22638        warn$2("<transition> explicit ".concat(name, " duration is not a valid number - ") +
22639            "got ".concat(JSON.stringify(val), "."), vnode.context);
22640    }
22641    else if (isNaN(val)) {
22642        warn$2("<transition> explicit ".concat(name, " duration is NaN - ") +
22643            'the duration expression might be incorrect.', vnode.context);
22644    }
22645}
22646function isValidDuration(val) {
22647    return typeof val === 'number' && !isNaN(val);
22648}
22649/**
22650 * Normalize a transition hook's argument length. The hook may be:
22651 * - a merged hook (invoker) with the original in .fns
22652 * - a wrapped component method (check ._length)
22653 * - a plain function (.length)
22654 */
22655function getHookArgumentsLength(fn) {
22656    if (isUndef(fn)) {
22657        return false;
22658    }
22659    // @ts-expect-error
22660    var invokerFns = fn.fns;
22661    if (isDef(invokerFns)) {
22662        // invoker
22663        return getHookArgumentsLength(Array.isArray(invokerFns) ? invokerFns[0] : invokerFns);
22664    }
22665    else {
22666        // @ts-expect-error
22667        return (fn._length || fn.length) > 1;
22668    }
22669}
22670function _enter(_, vnode) {
22671    if (vnode.data.show !== true) {
22672        enter(vnode);
22673    }
22674}
22675var transition = inBrowser
22676    ? {
22677        create: _enter,
22678        activate: _enter,
22679        remove: function (vnode, rm) {
22680            /* istanbul ignore else */
22681            if (vnode.data.show !== true) {
22682                // @ts-expect-error
22683                leave(vnode, rm);
22684            }
22685            else {
22686                rm();
22687            }
22688        }
22689    }
22690    : {};
22691
22692var platformModules = [attrs, klass$1, events, domProps, style$1, transition];
22693
22694// the directive module should be applied last, after all
22695// built-in modules have been applied.
22696var modules$1 = platformModules.concat(baseModules);
22697var patch = createPatchFunction({ nodeOps: nodeOps, modules: modules$1 });
22698
22699/**
22700 * Not type checking this file because flow doesn't like attaching
22701 * properties to Elements.
22702 */
22703/* istanbul ignore if */
22704if (isIE9) {
22705    // http://www.matts411.com/post/internet-explorer-9-oninput/
22706    document.addEventListener('selectionchange', function () {
22707        var el = document.activeElement;
22708        // @ts-expect-error
22709        if (el && el.vmodel) {
22710            trigger(el, 'input');
22711        }
22712    });
22713}
22714var directive = {
22715    inserted: function (el, binding, vnode, oldVnode) {
22716        if (vnode.tag === 'select') {
22717            // #6903
22718            if (oldVnode.elm && !oldVnode.elm._vOptions) {
22719                mergeVNodeHook(vnode, 'postpatch', function () {
22720                    directive.componentUpdated(el, binding, vnode);
22721                });
22722            }
22723            else {
22724                setSelected(el, binding, vnode.context);
22725            }
22726            el._vOptions = [].map.call(el.options, getValue);
22727        }
22728        else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {
22729            el._vModifiers = binding.modifiers;
22730            if (!binding.modifiers.lazy) {
22731                el.addEventListener('compositionstart', onCompositionStart);
22732                el.addEventListener('compositionend', onCompositionEnd);
22733                // Safari < 10.2 & UIWebView doesn't fire compositionend when
22734                // switching focus before confirming composition choice
22735                // this also fixes the issue where some browsers e.g. iOS Chrome
22736                // fires "change" instead of "input" on autocomplete.
22737                el.addEventListener('change', onCompositionEnd);
22738                /* istanbul ignore if */
22739                if (isIE9) {
22740                    el.vmodel = true;
22741                }
22742            }
22743        }
22744    },
22745    componentUpdated: function (el, binding, vnode) {
22746        if (vnode.tag === 'select') {
22747            setSelected(el, binding, vnode.context);
22748            // in case the options rendered by v-for have changed,
22749            // it's possible that the value is out-of-sync with the rendered options.
22750            // detect such cases and filter out values that no longer has a matching
22751            // option in the DOM.
22752            var prevOptions_1 = el._vOptions;
22753            var curOptions_1 = (el._vOptions = [].map.call(el.options, getValue));
22754            if (curOptions_1.some(function (o, i) { return !looseEqual(o, prevOptions_1[i]); })) {
22755                // trigger change event if
22756                // no matching option found for at least one value
22757                var needReset = el.multiple
22758                    ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions_1); })
22759                    : binding.value !== binding.oldValue &&
22760                        hasNoMatchingOption(binding.value, curOptions_1);
22761                if (needReset) {
22762                    trigger(el, 'change');
22763                }
22764            }
22765        }
22766    }
22767};
22768function setSelected(el, binding, vm) {
22769    actuallySetSelected(el, binding, vm);
22770    /* istanbul ignore if */
22771    if (isIE || isEdge) {
22772        setTimeout(function () {
22773            actuallySetSelected(el, binding, vm);
22774        }, 0);
22775    }
22776}
22777function actuallySetSelected(el, binding, vm) {
22778    var value = binding.value;
22779    var isMultiple = el.multiple;
22780    if (isMultiple && !Array.isArray(value)) {
22781         true &&
22782            warn$2("<select multiple v-model=\"".concat(binding.expression, "\"> ") +
22783                "expects an Array value for its binding, but got ".concat(Object.prototype.toString
22784                    .call(value)
22785                    .slice(8, -1)), vm);
22786        return;
22787    }
22788    var selected, option;
22789    for (var i = 0, l = el.options.length; i < l; i++) {
22790        option = el.options[i];
22791        if (isMultiple) {
22792            selected = looseIndexOf(value, getValue(option)) > -1;
22793            if (option.selected !== selected) {
22794                option.selected = selected;
22795            }
22796        }
22797        else {
22798            if (looseEqual(getValue(option), value)) {
22799                if (el.selectedIndex !== i) {
22800                    el.selectedIndex = i;
22801                }
22802                return;
22803            }
22804        }
22805    }
22806    if (!isMultiple) {
22807        el.selectedIndex = -1;
22808    }
22809}
22810function hasNoMatchingOption(value, options) {
22811    return options.every(function (o) { return !looseEqual(o, value); });
22812}
22813function getValue(option) {
22814    return '_value' in option ? option._value : option.value;
22815}
22816function onCompositionStart(e) {
22817    e.target.composing = true;
22818}
22819function onCompositionEnd(e) {
22820    // prevent triggering an input event for no reason
22821    if (!e.target.composing)
22822        return;
22823    e.target.composing = false;
22824    trigger(e.target, 'input');
22825}
22826function trigger(el, type) {
22827    var e = document.createEvent('HTMLEvents');
22828    e.initEvent(type, true, true);
22829    el.dispatchEvent(e);
22830}
22831
22832// recursively search for possible transition defined inside the component root
22833function locateNode(vnode) {
22834    // @ts-expect-error
22835    return vnode.componentInstance && (!vnode.data || !vnode.data.transition)
22836        ? locateNode(vnode.componentInstance._vnode)
22837        : vnode;
22838}
22839var show = {
22840    bind: function (el, _a, vnode) {
22841        var value = _a.value;
22842        vnode = locateNode(vnode);
22843        var transition = vnode.data && vnode.data.transition;
22844        var originalDisplay = (el.__vOriginalDisplay =
22845            el.style.display === 'none' ? '' : el.style.display);
22846        if (value && transition) {
22847            vnode.data.show = true;
22848            enter(vnode, function () {
22849                el.style.display = originalDisplay;
22850            });
22851        }
22852        else {
22853            el.style.display = value ? originalDisplay : 'none';
22854        }
22855    },
22856    update: function (el, _a, vnode) {
22857        var value = _a.value, oldValue = _a.oldValue;
22858        /* istanbul ignore if */
22859        if (!value === !oldValue)
22860            return;
22861        vnode = locateNode(vnode);
22862        var transition = vnode.data && vnode.data.transition;
22863        if (transition) {
22864            vnode.data.show = true;
22865            if (value) {
22866                enter(vnode, function () {
22867                    el.style.display = el.__vOriginalDisplay;
22868                });
22869            }
22870            else {
22871                leave(vnode, function () {
22872                    el.style.display = 'none';
22873                });
22874            }
22875        }
22876        else {
22877            el.style.display = value ? el.__vOriginalDisplay : 'none';
22878        }
22879    },
22880    unbind: function (el, binding, vnode, oldVnode, isDestroy) {
22881        if (!isDestroy) {
22882            el.style.display = el.__vOriginalDisplay;
22883        }
22884    }
22885};
22886
22887var platformDirectives = {
22888    model: directive,
22889    show: show
22890};
22891
22892// Provides transition support for a single element/component.
22893var transitionProps = {
22894    name: String,
22895    appear: Boolean,
22896    css: Boolean,
22897    mode: String,
22898    type: String,
22899    enterClass: String,
22900    leaveClass: String,
22901    enterToClass: String,
22902    leaveToClass: String,
22903    enterActiveClass: String,
22904    leaveActiveClass: String,
22905    appearClass: String,
22906    appearActiveClass: String,
22907    appearToClass: String,
22908    duration: [Number, String, Object]
22909};
22910// in case the child is also an abstract component, e.g. <keep-alive>
22911// we want to recursively retrieve the real component to be rendered
22912function getRealChild(vnode) {
22913    var compOptions = vnode && vnode.componentOptions;
22914    if (compOptions && compOptions.Ctor.options.abstract) {
22915        return getRealChild(getFirstComponentChild(compOptions.children));
22916    }
22917    else {
22918        return vnode;
22919    }
22920}
22921function extractTransitionData(comp) {
22922    var data = {};
22923    var options = comp.$options;
22924    // props
22925    for (var key in options.propsData) {
22926        data[key] = comp[key];
22927    }
22928    // events.
22929    // extract listeners and pass them directly to the transition methods
22930    var listeners = options._parentListeners;
22931    for (var key in listeners) {
22932        data[camelize(key)] = listeners[key];
22933    }
22934    return data;
22935}
22936function placeholder(h, rawChild) {
22937    // @ts-expect-error
22938    if (/\d-keep-alive$/.test(rawChild.tag)) {
22939        return h('keep-alive', {
22940            props: rawChild.componentOptions.propsData
22941        });
22942    }
22943}
22944function hasParentTransition(vnode) {
22945    while ((vnode = vnode.parent)) {
22946        if (vnode.data.transition) {
22947            return true;
22948        }
22949    }
22950}
22951function isSameChild(child, oldChild) {
22952    return oldChild.key === child.key && oldChild.tag === child.tag;
22953}
22954var isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); };
22955var isVShowDirective = function (d) { return d.name === 'show'; };
22956var Transition = {
22957    name: 'transition',
22958    props: transitionProps,
22959    abstract: true,
22960    render: function (h) {
22961        var _this = this;
22962        var children = this.$slots.default;
22963        if (!children) {
22964            return;
22965        }
22966        // filter out text nodes (possible whitespaces)
22967        children = children.filter(isNotTextNode);
22968        /* istanbul ignore if */
22969        if (!children.length) {
22970            return;
22971        }
22972        // warn multiple elements
22973        if ( true && children.length > 1) {
22974            warn$2('<transition> can only be used on a single element. Use ' +
22975                '<transition-group> for lists.', this.$parent);
22976        }
22977        var mode = this.mode;
22978        // warn invalid mode
22979        if ( true && mode && mode !== 'in-out' && mode !== 'out-in') {
22980            warn$2('invalid <transition> mode: ' + mode, this.$parent);
22981        }
22982        var rawChild = children[0];
22983        // if this is a component root node and the component's
22984        // parent container node also has transition, skip.
22985        if (hasParentTransition(this.$vnode)) {
22986            return rawChild;
22987        }
22988        // apply transition data to child
22989        // use getRealChild() to ignore abstract components e.g. keep-alive
22990        var child = getRealChild(rawChild);
22991        /* istanbul ignore if */
22992        if (!child) {
22993            return rawChild;
22994        }
22995        if (this._leaving) {
22996            return placeholder(h, rawChild);
22997        }
22998        // ensure a key that is unique to the vnode type and to this transition
22999        // component instance. This key will be used to remove pending leaving nodes
23000        // during entering.
23001        var id = "__transition-".concat(this._uid, "-");
23002        child.key =
23003            child.key == null
23004                ? child.isComment
23005                    ? id + 'comment'
23006                    : id + child.tag
23007                : isPrimitive(child.key)
23008                    ? String(child.key).indexOf(id) === 0
23009                        ? child.key
23010                        : id + child.key
23011                    : child.key;
23012        var data = ((child.data || (child.data = {})).transition =
23013            extractTransitionData(this));
23014        var oldRawChild = this._vnode;
23015        var oldChild = getRealChild(oldRawChild);
23016        // mark v-show
23017        // so that the transition module can hand over the control to the directive
23018        if (child.data.directives && child.data.directives.some(isVShowDirective)) {
23019            child.data.show = true;
23020        }
23021        if (oldChild &&
23022            oldChild.data &&
23023            !isSameChild(child, oldChild) &&
23024            !isAsyncPlaceholder(oldChild) &&
23025            // #6687 component root is a comment node
23026            !(oldChild.componentInstance &&
23027                oldChild.componentInstance._vnode.isComment)) {
23028            // replace old child transition data with fresh one
23029            // important for dynamic transitions!
23030            var oldData = (oldChild.data.transition = extend({}, data));
23031            // handle transition mode
23032            if (mode === 'out-in') {
23033                // return placeholder node and queue update when leave finishes
23034                this._leaving = true;
23035                mergeVNodeHook(oldData, 'afterLeave', function () {
23036                    _this._leaving = false;
23037                    _this.$forceUpdate();
23038                });
23039                return placeholder(h, rawChild);
23040            }
23041            else if (mode === 'in-out') {
23042                if (isAsyncPlaceholder(child)) {
23043                    return oldRawChild;
23044                }
23045                var delayedLeave_1;
23046                var performLeave = function () {
23047                    delayedLeave_1();
23048                };
23049                mergeVNodeHook(data, 'afterEnter', performLeave);
23050                mergeVNodeHook(data, 'enterCancelled', performLeave);
23051                mergeVNodeHook(oldData, 'delayLeave', function (leave) {
23052                    delayedLeave_1 = leave;
23053                });
23054            }
23055        }
23056        return rawChild;
23057    }
23058};
23059
23060// Provides transition support for list items.
23061var props = extend({
23062    tag: String,
23063    moveClass: String
23064}, transitionProps);
23065delete props.mode;
23066var TransitionGroup = {
23067    props: props,
23068    beforeMount: function () {
23069        var _this = this;
23070        var update = this._update;
23071        this._update = function (vnode, hydrating) {
23072            var restoreActiveInstance = setActiveInstance(_this);
23073            // force removing pass
23074            _this.__patch__(_this._vnode, _this.kept, false, // hydrating
23075            true // removeOnly (!important, avoids unnecessary moves)
23076            );
23077            _this._vnode = _this.kept;
23078            restoreActiveInstance();
23079            update.call(_this, vnode, hydrating);
23080        };
23081    },
23082    render: function (h) {
23083        var tag = this.tag || this.$vnode.data.tag || 'span';
23084        var map = Object.create(null);
23085        var prevChildren = (this.prevChildren = this.children);
23086        var rawChildren = this.$slots.default || [];
23087        var children = (this.children = []);
23088        var transitionData = extractTransitionData(this);
23089        for (var i = 0; i < rawChildren.length; i++) {
23090            var c = rawChildren[i];
23091            if (c.tag) {
23092                if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {
23093                    children.push(c);
23094                    map[c.key] = c;
23095                    (c.data || (c.data = {})).transition = transitionData;
23096                }
23097                else if (true) {
23098                    var opts = c.componentOptions;
23099                    var name_1 = opts
23100                        ? getComponentName(opts.Ctor.options) || opts.tag || ''
23101                        : c.tag;
23102                    warn$2("<transition-group> children must be keyed: <".concat(name_1, ">"));
23103                }
23104            }
23105        }
23106        if (prevChildren) {
23107            var kept = [];
23108            var removed = [];
23109            for (var i = 0; i < prevChildren.length; i++) {
23110                var c = prevChildren[i];
23111                c.data.transition = transitionData;
23112                // @ts-expect-error .getBoundingClientRect is not typed in Node
23113                c.data.pos = c.elm.getBoundingClientRect();
23114                if (map[c.key]) {
23115                    kept.push(c);
23116                }
23117                else {
23118                    removed.push(c);
23119                }
23120            }
23121            this.kept = h(tag, null, kept);
23122            this.removed = removed;
23123        }
23124        return h(tag, null, children);
23125    },
23126    updated: function () {
23127        var children = this.prevChildren;
23128        var moveClass = this.moveClass || (this.name || 'v') + '-move';
23129        if (!children.length || !this.hasMove(children[0].elm, moveClass)) {
23130            return;
23131        }
23132        // we divide the work into three loops to avoid mixing DOM reads and writes
23133        // in each iteration - which helps prevent layout thrashing.
23134        children.forEach(callPendingCbs);
23135        children.forEach(recordPosition);
23136        children.forEach(applyTranslation);
23137        // force reflow to put everything in position
23138        // assign to this to avoid being removed in tree-shaking
23139        // $flow-disable-line
23140        this._reflow = document.body.offsetHeight;
23141        children.forEach(function (c) {
23142            if (c.data.moved) {
23143                var el_1 = c.elm;
23144                var s = el_1.style;
23145                addTransitionClass(el_1, moveClass);
23146                s.transform = s.WebkitTransform = s.transitionDuration = '';
23147                el_1.addEventListener(transitionEndEvent, (el_1._moveCb = function cb(e) {
23148                    if (e && e.target !== el_1) {
23149                        return;
23150                    }
23151                    if (!e || /transform$/.test(e.propertyName)) {
23152                        el_1.removeEventListener(transitionEndEvent, cb);
23153                        el_1._moveCb = null;
23154                        removeTransitionClass(el_1, moveClass);
23155                    }
23156                }));
23157            }
23158        });
23159    },
23160    methods: {
23161        hasMove: function (el, moveClass) {
23162            /* istanbul ignore if */
23163            if (!hasTransition) {
23164                return false;
23165            }
23166            /* istanbul ignore if */
23167            if (this._hasMove) {
23168                return this._hasMove;
23169            }
23170            // Detect whether an element with the move class applied has
23171            // CSS transitions. Since the element may be inside an entering
23172            // transition at this very moment, we make a clone of it and remove
23173            // all other transition classes applied to ensure only the move class
23174            // is applied.
23175            var clone = el.cloneNode();
23176            if (el._transitionClasses) {
23177                el._transitionClasses.forEach(function (cls) {
23178                    removeClass(clone, cls);
23179                });
23180            }
23181            addClass(clone, moveClass);
23182            clone.style.display = 'none';
23183            this.$el.appendChild(clone);
23184            var info = getTransitionInfo(clone);
23185            this.$el.removeChild(clone);
23186            return (this._hasMove = info.hasTransform);
23187        }
23188    }
23189};
23190function callPendingCbs(c) {
23191    /* istanbul ignore if */
23192    if (c.elm._moveCb) {
23193        c.elm._moveCb();
23194    }
23195    /* istanbul ignore if */
23196    if (c.elm._enterCb) {
23197        c.elm._enterCb();
23198    }
23199}
23200function recordPosition(c) {
23201    c.data.newPos = c.elm.getBoundingClientRect();
23202}
23203function applyTranslation(c) {
23204    var oldPos = c.data.pos;
23205    var newPos = c.data.newPos;
23206    var dx = oldPos.left - newPos.left;
23207    var dy = oldPos.top - newPos.top;
23208    if (dx || dy) {
23209        c.data.moved = true;
23210        var s = c.elm.style;
23211        s.transform = s.WebkitTransform = "translate(".concat(dx, "px,").concat(dy, "px)");
23212        s.transitionDuration = '0s';
23213    }
23214}
23215
23216var platformComponents = {
23217    Transition: Transition,
23218    TransitionGroup: TransitionGroup
23219};
23220
23221// install platform specific utils
23222Vue.config.mustUseProp = mustUseProp;
23223Vue.config.isReservedTag = isReservedTag;
23224Vue.config.isReservedAttr = isReservedAttr;
23225Vue.config.getTagNamespace = getTagNamespace;
23226Vue.config.isUnknownElement = isUnknownElement;
23227// install platform runtime directives & components
23228extend(Vue.options.directives, platformDirectives);
23229extend(Vue.options.components, platformComponents);
23230// install platform patch function
23231Vue.prototype.__patch__ = inBrowser ? patch : noop;
23232// public mount method
23233Vue.prototype.$mount = function (el, hydrating) {
23234    el = el && inBrowser ? query(el) : undefined;
23235    return mountComponent(this, el, hydrating);
23236};
23237// devtools global hook
23238/* istanbul ignore next */
23239if (inBrowser) {
23240    setTimeout(function () {
23241        if (config.devtools) {
23242            if (devtools) {
23243                devtools.emit('init', Vue);
23244            }
23245            else if (true) {
23246                // @ts-expect-error
23247                console[console.info ? 'info' : 'log']('Download the Vue Devtools extension for a better development experience:\n' +
23248                    'https://github.com/vuejs/vue-devtools');
23249            }
23250        }
23251        if ( true &&
23252            config.productionTip !== false &&
23253            typeof console !== 'undefined') {
23254            // @ts-expect-error
23255            console[console.info ? 'info' : 'log']("You are running Vue in development mode.\n" +
23256                "Make sure to turn on production mode when deploying for production.\n" +
23257                "See more tips at https://vuejs.org/guide/deployment.html");
23258        }
23259    }, 0);
23260}
23261
23262var defaultTagRE = /\{\{((?:.|\r?\n)+?)\}\}/g;
23263var regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g;
23264var buildRegex = cached(function (delimiters) {
23265    var open = delimiters[0].replace(regexEscapeRE, '\\$&');
23266    var close = delimiters[1].replace(regexEscapeRE, '\\$&');
23267    return new RegExp(open + '((?:.|\\n)+?)' + close, 'g');
23268});
23269function parseText(text, delimiters) {
23270    //@ts-expect-error
23271    var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;
23272    if (!tagRE.test(text)) {
23273        return;
23274    }
23275    var tokens = [];
23276    var rawTokens = [];
23277    var lastIndex = (tagRE.lastIndex = 0);
23278    var match, index, tokenValue;
23279    while ((match = tagRE.exec(text))) {
23280        index = match.index;
23281        // push text token
23282        if (index > lastIndex) {
23283            rawTokens.push((tokenValue = text.slice(lastIndex, index)));
23284            tokens.push(JSON.stringify(tokenValue));
23285        }
23286        // tag token
23287        var exp = parseFilters(match[1].trim());
23288        tokens.push("_s(".concat(exp, ")"));
23289        rawTokens.push({ '@binding': exp });
23290        lastIndex = index + match[0].length;
23291    }
23292    if (lastIndex < text.length) {
23293        rawTokens.push((tokenValue = text.slice(lastIndex)));
23294        tokens.push(JSON.stringify(tokenValue));
23295    }
23296    return {
23297        expression: tokens.join('+'),
23298        tokens: rawTokens
23299    };
23300}
23301
23302function transformNode$1(el, options) {
23303    var warn = options.warn || baseWarn;
23304    var staticClass = getAndRemoveAttr(el, 'class');
23305    if ( true && staticClass) {
23306        var res = parseText(staticClass, options.delimiters);
23307        if (res) {
23308            warn("class=\"".concat(staticClass, "\": ") +
23309                'Interpolation inside attributes has been removed. ' +
23310                'Use v-bind or the colon shorthand instead. For example, ' +
23311                'instead of <div class="{{ val }}">, use <div :class="val">.', el.rawAttrsMap['class']);
23312        }
23313    }
23314    if (staticClass) {
23315        el.staticClass = JSON.stringify(staticClass.replace(/\s+/g, ' ').trim());
23316    }
23317    var classBinding = getBindingAttr(el, 'class', false /* getStatic */);
23318    if (classBinding) {
23319        el.classBinding = classBinding;
23320    }
23321}
23322function genData$2(el) {
23323    var data = '';
23324    if (el.staticClass) {
23325        data += "staticClass:".concat(el.staticClass, ",");
23326    }
23327    if (el.classBinding) {
23328        data += "class:".concat(el.classBinding, ",");
23329    }
23330    return data;
23331}
23332var klass = {
23333    staticKeys: ['staticClass'],
23334    transformNode: transformNode$1,
23335    genData: genData$2
23336};
23337
23338function transformNode(el, options) {
23339    var warn = options.warn || baseWarn;
23340    var staticStyle = getAndRemoveAttr(el, 'style');
23341    if (staticStyle) {
23342        /* istanbul ignore if */
23343        if (true) {
23344            var res = parseText(staticStyle, options.delimiters);
23345            if (res) {
23346                warn("style=\"".concat(staticStyle, "\": ") +
23347                    'Interpolation inside attributes has been removed. ' +
23348                    'Use v-bind or the colon shorthand instead. For example, ' +
23349                    'instead of <div style="{{ val }}">, use <div :style="val">.', el.rawAttrsMap['style']);
23350            }
23351        }
23352        el.staticStyle = JSON.stringify(parseStyleText(staticStyle));
23353    }
23354    var styleBinding = getBindingAttr(el, 'style', false /* getStatic */);
23355    if (styleBinding) {
23356        el.styleBinding = styleBinding;
23357    }
23358}
23359function genData$1(el) {
23360    var data = '';
23361    if (el.staticStyle) {
23362        data += "staticStyle:".concat(el.staticStyle, ",");
23363    }
23364    if (el.styleBinding) {
23365        data += "style:(".concat(el.styleBinding, "),");
23366    }
23367    return data;
23368}
23369var style = {
23370    staticKeys: ['staticStyle'],
23371    transformNode: transformNode,
23372    genData: genData$1
23373};
23374
23375var decoder;
23376var he = {
23377    decode: function (html) {
23378        decoder = decoder || document.createElement('div');
23379        decoder.innerHTML = html;
23380        return decoder.textContent;
23381    }
23382};
23383
23384var isUnaryTag = makeMap('area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +
23385    'link,meta,param,source,track,wbr');
23386// Elements that you can, intentionally, leave open
23387// (and which close themselves)
23388var canBeLeftOpenTag = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source');
23389// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3
23390// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content
23391var isNonPhrasingTag = makeMap('address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +
23392    'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +
23393    'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +
23394    'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +
23395    'title,tr,track');
23396
23397/**
23398 * Not type-checking this file because it's mostly vendor code.
23399 */
23400// Regular Expressions for parsing tags and attributes
23401var attribute = /^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/;
23402var dynamicArgAttribute = /^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/;
23403var ncname = "[a-zA-Z_][\\-\\.0-9_a-zA-Z".concat(unicodeRegExp.source, "]*");
23404var qnameCapture = "((?:".concat(ncname, "\\:)?").concat(ncname, ")");
23405var startTagOpen = new RegExp("^<".concat(qnameCapture));
23406var startTagClose = /^\s*(\/?)>/;
23407var endTag = new RegExp("^<\\/".concat(qnameCapture, "[^>]*>"));
23408var doctype = /^<!DOCTYPE [^>]+>/i;
23409// #7298: escape - to avoid being passed as HTML comment when inlined in page
23410var comment = /^<!\--/;
23411var conditionalComment = /^<!\[/;
23412// Special Elements (can contain anything)
23413var isPlainTextElement = makeMap('script,style,textarea', true);
23414var reCache = {};
23415var decodingMap = {
23416    '&lt;': '<',
23417    '&gt;': '>',
23418    '&quot;': '"',
23419    '&amp;': '&',
23420    '&#10;': '\n',
23421    '&#9;': '\t',
23422    '&#39;': "'"
23423};
23424var encodedAttr = /&(?:lt|gt|quot|amp|#39);/g;
23425var encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g;
23426// #5992
23427var isIgnoreNewlineTag = makeMap('pre,textarea', true);
23428var shouldIgnoreFirstNewline = function (tag, html) {
23429    return tag && isIgnoreNewlineTag(tag) && html[0] === '\n';
23430};
23431function decodeAttr(value, shouldDecodeNewlines) {
23432    var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;
23433    return value.replace(re, function (match) { return decodingMap[match]; });
23434}
23435function parseHTML(html, options) {
23436    var stack = [];
23437    var expectHTML = options.expectHTML;
23438    var isUnaryTag = options.isUnaryTag || no;
23439    var canBeLeftOpenTag = options.canBeLeftOpenTag || no;
23440    var index = 0;
23441    var last, lastTag;
23442    var _loop_1 = function () {
23443        last = html;
23444        // Make sure we're not in a plaintext content element like script/style
23445        if (!lastTag || !isPlainTextElement(lastTag)) {
23446            var textEnd = html.indexOf('<');
23447            if (textEnd === 0) {
23448                // Comment:
23449                if (comment.test(html)) {
23450                    var commentEnd = html.indexOf('-->');
23451                    if (commentEnd >= 0) {
23452                        if (options.shouldKeepComment && options.comment) {
23453                            options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3);
23454                        }
23455                        advance(commentEnd + 3);
23456                        return "continue";
23457                    }
23458                }
23459                // https://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment
23460                if (conditionalComment.test(html)) {
23461                    var conditionalEnd = html.indexOf(']>');
23462                    if (conditionalEnd >= 0) {
23463                        advance(conditionalEnd + 2);
23464                        return "continue";
23465                    }
23466                }
23467                // Doctype:
23468                var doctypeMatch = html.match(doctype);
23469                if (doctypeMatch) {
23470                    advance(doctypeMatch[0].length);
23471                    return "continue";
23472                }
23473                // End tag:
23474                var endTagMatch = html.match(endTag);
23475                if (endTagMatch) {
23476                    var curIndex = index;
23477                    advance(endTagMatch[0].length);
23478                    parseEndTag(endTagMatch[1], curIndex, index);
23479                    return "continue";
23480                }
23481                // Start tag:
23482                var startTagMatch = parseStartTag();
23483                if (startTagMatch) {
23484                    handleStartTag(startTagMatch);
23485                    if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {
23486                        advance(1);
23487                    }
23488                    return "continue";
23489                }
23490            }
23491            var text = void 0, rest = void 0, next = void 0;
23492            if (textEnd >= 0) {
23493                rest = html.slice(textEnd);
23494                while (!endTag.test(rest) &&
23495                    !startTagOpen.test(rest) &&
23496                    !comment.test(rest) &&
23497                    !conditionalComment.test(rest)) {
23498                    // < in plain text, be forgiving and treat it as text
23499                    next = rest.indexOf('<', 1);
23500                    if (next < 0)
23501                        break;
23502                    textEnd += next;
23503                    rest = html.slice(textEnd);
23504                }
23505                text = html.substring(0, textEnd);
23506            }
23507            if (textEnd < 0) {
23508                text = html;
23509            }
23510            if (text) {
23511                advance(text.length);
23512            }
23513            if (options.chars && text) {
23514                options.chars(text, index - text.length, index);
23515            }
23516        }
23517        else {
23518            var endTagLength_1 = 0;
23519            var stackedTag_1 = lastTag.toLowerCase();
23520            var reStackedTag = reCache[stackedTag_1] ||
23521                (reCache[stackedTag_1] = new RegExp('([\\s\\S]*?)(</' + stackedTag_1 + '[^>]*>)', 'i'));
23522            var rest = html.replace(reStackedTag, function (all, text, endTag) {
23523                endTagLength_1 = endTag.length;
23524                if (!isPlainTextElement(stackedTag_1) && stackedTag_1 !== 'noscript') {
23525                    text = text
23526                        .replace(/<!\--([\s\S]*?)-->/g, '$1') // #7298
23527                        .replace(/<!\[CDATA\[([\s\S]*?)]]>/g, '$1');
23528                }
23529                if (shouldIgnoreFirstNewline(stackedTag_1, text)) {
23530                    text = text.slice(1);
23531                }
23532                if (options.chars) {
23533                    options.chars(text);
23534                }
23535                return '';
23536            });
23537            index += html.length - rest.length;
23538            html = rest;
23539            parseEndTag(stackedTag_1, index - endTagLength_1, index);
23540        }
23541        if (html === last) {
23542            options.chars && options.chars(html);
23543            if ( true && !stack.length && options.warn) {
23544                options.warn("Mal-formatted tag at end of template: \"".concat(html, "\""), {
23545                    start: index + html.length
23546                });
23547            }
23548            return "break";
23549        }
23550    };
23551    while (html) {
23552        var state_1 = _loop_1();
23553        if (state_1 === "break")
23554            break;
23555    }
23556    // Clean up any remaining tags
23557    parseEndTag();
23558    function advance(n) {
23559        index += n;
23560        html = html.substring(n);
23561    }
23562    function parseStartTag() {
23563        var start = html.match(startTagOpen);
23564        if (start) {
23565            var match = {
23566                tagName: start[1],
23567                attrs: [],
23568                start: index
23569            };
23570            advance(start[0].length);
23571            var end = void 0, attr = void 0;
23572            while (!(end = html.match(startTagClose)) &&
23573                (attr = html.match(dynamicArgAttribute) || html.match(attribute))) {
23574                attr.start = index;
23575                advance(attr[0].length);
23576                attr.end = index;
23577                match.attrs.push(attr);
23578            }
23579            if (end) {
23580                match.unarySlash = end[1];
23581                advance(end[0].length);
23582                match.end = index;
23583                return match;
23584            }
23585        }
23586    }
23587    function handleStartTag(match) {
23588        var tagName = match.tagName;
23589        var unarySlash = match.unarySlash;
23590        if (expectHTML) {
23591            if (lastTag === 'p' && isNonPhrasingTag(tagName)) {
23592                parseEndTag(lastTag);
23593            }
23594            if (canBeLeftOpenTag(tagName) && lastTag === tagName) {
23595                parseEndTag(tagName);
23596            }
23597        }
23598        var unary = isUnaryTag(tagName) || !!unarySlash;
23599        var l = match.attrs.length;
23600        var attrs = new Array(l);
23601        for (var i = 0; i < l; i++) {
23602            var args = match.attrs[i];
23603            var value = args[3] || args[4] || args[5] || '';
23604            var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'
23605                ? options.shouldDecodeNewlinesForHref
23606                : options.shouldDecodeNewlines;
23607            attrs[i] = {
23608                name: args[1],
23609                value: decodeAttr(value, shouldDecodeNewlines)
23610            };
23611            if ( true && options.outputSourceRange) {
23612                attrs[i].start = args.start + args[0].match(/^\s*/).length;
23613                attrs[i].end = args.end;
23614            }
23615        }
23616        if (!unary) {
23617            stack.push({
23618                tag: tagName,
23619                lowerCasedTag: tagName.toLowerCase(),
23620                attrs: attrs,
23621                start: match.start,
23622                end: match.end
23623            });
23624            lastTag = tagName;
23625        }
23626        if (options.start) {
23627            options.start(tagName, attrs, unary, match.start, match.end);
23628        }
23629    }
23630    function parseEndTag(tagName, start, end) {
23631        var pos, lowerCasedTagName;
23632        if (start == null)
23633            start = index;
23634        if (end == null)
23635            end = index;
23636        // Find the closest opened tag of the same type
23637        if (tagName) {
23638            lowerCasedTagName = tagName.toLowerCase();
23639            for (pos = stack.length - 1; pos >= 0; pos--) {
23640                if (stack[pos].lowerCasedTag === lowerCasedTagName) {
23641                    break;
23642                }
23643            }
23644        }
23645        else {
23646            // If no tag name is provided, clean shop
23647            pos = 0;
23648        }
23649        if (pos >= 0) {
23650            // Close all the open elements, up the stack
23651            for (var i = stack.length - 1; i >= pos; i--) {
23652                if ( true && (i > pos || !tagName) && options.warn) {
23653                    options.warn("tag <".concat(stack[i].tag, "> has no matching end tag."), {
23654                        start: stack[i].start,
23655                        end: stack[i].end
23656                    });
23657                }
23658                if (options.end) {
23659                    options.end(stack[i].tag, start, end);
23660                }
23661            }
23662            // Remove the open elements from the stack
23663            stack.length = pos;
23664            lastTag = pos && stack[pos - 1].tag;
23665        }
23666        else if (lowerCasedTagName === 'br') {
23667            if (options.start) {
23668                options.start(tagName, [], true, start, end);
23669            }
23670        }
23671        else if (lowerCasedTagName === 'p') {
23672            if (options.start) {
23673                options.start(tagName, [], false, start, end);
23674            }
23675            if (options.end) {
23676                options.end(tagName, start, end);
23677            }
23678        }
23679    }
23680}
23681
23682var onRE = /^@|^v-on:/;
23683var dirRE = /^v-|^@|^:|^#/;
23684var forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/;
23685var forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/;
23686var stripParensRE = /^\(|\)$/g;
23687var dynamicArgRE = /^\[.*\]$/;
23688var argRE = /:(.*)$/;
23689var bindRE = /^:|^\.|^v-bind:/;
23690var modifierRE = /\.[^.\]]+(?=[^\]]*$)/g;
23691var slotRE = /^v-slot(:|$)|^#/;
23692var lineBreakRE = /[\r\n]/;
23693var whitespaceRE = /[ \f\t\r\n]+/g;
23694var invalidAttributeRE = /[\s"'<>\/=]/;
23695var decodeHTMLCached = cached(he.decode);
23696var emptySlotScopeToken = "_empty_";
23697// configurable state
23698var warn;
23699var delimiters;
23700var transforms;
23701var preTransforms;
23702var postTransforms;
23703var platformIsPreTag;
23704var platformMustUseProp;
23705var platformGetTagNamespace;
23706var maybeComponent;
23707function createASTElement(tag, attrs, parent) {
23708    return {
23709        type: 1,
23710        tag: tag,
23711        attrsList: attrs,
23712        attrsMap: makeAttrsMap(attrs),
23713        rawAttrsMap: {},
23714        parent: parent,
23715        children: []
23716    };
23717}
23718/**
23719 * Convert HTML string to AST.
23720 */
23721function parse(template, options) {
23722    warn = options.warn || baseWarn;
23723    platformIsPreTag = options.isPreTag || no;
23724    platformMustUseProp = options.mustUseProp || no;
23725    platformGetTagNamespace = options.getTagNamespace || no;
23726    var isReservedTag = options.isReservedTag || no;
23727    maybeComponent = function (el) {
23728        return !!(el.component ||
23729            el.attrsMap[':is'] ||
23730            el.attrsMap['v-bind:is'] ||
23731            !(el.attrsMap.is ? isReservedTag(el.attrsMap.is) : isReservedTag(el.tag)));
23732    };
23733    transforms = pluckModuleFunction(options.modules, 'transformNode');
23734    preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');
23735    postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');
23736    delimiters = options.delimiters;
23737    var stack = [];
23738    var preserveWhitespace = options.preserveWhitespace !== false;
23739    var whitespaceOption = options.whitespace;
23740    var root;
23741    var currentParent;
23742    var inVPre = false;
23743    var inPre = false;
23744    var warned = false;
23745    function warnOnce(msg, range) {
23746        if (!warned) {
23747            warned = true;
23748            warn(msg, range);
23749        }
23750    }
23751    function closeElement(element) {
23752        trimEndingWhitespace(element);
23753        if (!inVPre && !element.processed) {
23754            element = processElement(element, options);
23755        }
23756        // tree management
23757        if (!stack.length && element !== root) {
23758            // allow root elements with v-if, v-else-if and v-else
23759            if (root.if && (element.elseif || element.else)) {
23760                if (true) {
23761                    checkRootConstraints(element);
23762                }
23763                addIfCondition(root, {
23764                    exp: element.elseif,
23765                    block: element
23766                });
23767            }
23768            else if (true) {
23769                warnOnce("Component template should contain exactly one root element. " +
23770                    "If you are using v-if on multiple elements, " +
23771                    "use v-else-if to chain them instead.", { start: element.start });
23772            }
23773        }
23774        if (currentParent && !element.forbidden) {
23775            if (element.elseif || element.else) {
23776                processIfConditions(element, currentParent);
23777            }
23778            else {
23779                if (element.slotScope) {
23780                    // scoped slot
23781                    // keep it in the children list so that v-else(-if) conditions can
23782                    // find it as the prev node.
23783                    var name_1 = element.slotTarget || '"default"';
23784                    (currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name_1] = element;
23785                }
23786                currentParent.children.push(element);
23787                element.parent = currentParent;
23788            }
23789        }
23790        // final children cleanup
23791        // filter out scoped slots
23792        element.children = element.children.filter(function (c) { return !c.slotScope; });
23793        // remove trailing whitespace node again
23794        trimEndingWhitespace(element);
23795        // check pre state
23796        if (element.pre) {
23797            inVPre = false;
23798        }
23799        if (platformIsPreTag(element.tag)) {
23800            inPre = false;
23801        }
23802        // apply post-transforms
23803        for (var i = 0; i < postTransforms.length; i++) {
23804            postTransforms[i](element, options);
23805        }
23806    }
23807    function trimEndingWhitespace(el) {
23808        // remove trailing whitespace node
23809        if (!inPre) {
23810            var lastNode = void 0;
23811            while ((lastNode = el.children[el.children.length - 1]) &&
23812                lastNode.type === 3 &&
23813                lastNode.text === ' ') {
23814                el.children.pop();
23815            }
23816        }
23817    }
23818    function checkRootConstraints(el) {
23819        if (el.tag === 'slot' || el.tag === 'template') {
23820            warnOnce("Cannot use <".concat(el.tag, "> as component root element because it may ") +
23821                'contain multiple nodes.', { start: el.start });
23822        }
23823        if (el.attrsMap.hasOwnProperty('v-for')) {
23824            warnOnce('Cannot use v-for on stateful component root element because ' +
23825                'it renders multiple elements.', el.rawAttrsMap['v-for']);
23826        }
23827    }
23828    parseHTML(template, {
23829        warn: warn,
23830        expectHTML: options.expectHTML,
23831        isUnaryTag: options.isUnaryTag,
23832        canBeLeftOpenTag: options.canBeLeftOpenTag,
23833        shouldDecodeNewlines: options.shouldDecodeNewlines,
23834        shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,
23835        shouldKeepComment: options.comments,
23836        outputSourceRange: options.outputSourceRange,
23837        start: function (tag, attrs, unary, start, end) {
23838            // check namespace.
23839            // inherit parent ns if there is one
23840            var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);
23841            // handle IE svg bug
23842            /* istanbul ignore if */
23843            if (isIE && ns === 'svg') {
23844                attrs = guardIESVGBug(attrs);
23845            }
23846            var element = createASTElement(tag, attrs, currentParent);
23847            if (ns) {
23848                element.ns = ns;
23849            }
23850            if (true) {
23851                if (options.outputSourceRange) {
23852                    element.start = start;
23853                    element.end = end;
23854                    element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) {
23855                        cumulated[attr.name] = attr;
23856                        return cumulated;
23857                    }, {});
23858                }
23859                attrs.forEach(function (attr) {
23860                    if (invalidAttributeRE.test(attr.name)) {
23861                        warn("Invalid dynamic argument expression: attribute names cannot contain " +
23862                            "spaces, quotes, <, >, / or =.", options.outputSourceRange
23863                            ? {
23864                                start: attr.start + attr.name.indexOf("["),
23865                                end: attr.start + attr.name.length
23866                            }
23867                            : undefined);
23868                    }
23869                });
23870            }
23871            if (isForbiddenTag(element) && !isServerRendering()) {
23872                element.forbidden = true;
23873                 true &&
23874                    warn('Templates should only be responsible for mapping the state to the ' +
23875                        'UI. Avoid placing tags with side-effects in your templates, such as ' +
23876                        "<".concat(tag, ">") +
23877                        ', as they will not be parsed.', { start: element.start });
23878            }
23879            // apply pre-transforms
23880            for (var i = 0; i < preTransforms.length; i++) {
23881                element = preTransforms[i](element, options) || element;
23882            }
23883            if (!inVPre) {
23884                processPre(element);
23885                if (element.pre) {
23886                    inVPre = true;
23887                }
23888            }
23889            if (platformIsPreTag(element.tag)) {
23890                inPre = true;
23891            }
23892            if (inVPre) {
23893                processRawAttrs(element);
23894            }
23895            else if (!element.processed) {
23896                // structural directives
23897                processFor(element);
23898                processIf(element);
23899                processOnce(element);
23900            }
23901            if (!root) {
23902                root = element;
23903                if (true) {
23904                    checkRootConstraints(root);
23905                }
23906            }
23907            if (!unary) {
23908                currentParent = element;
23909                stack.push(element);
23910            }
23911            else {
23912                closeElement(element);
23913            }
23914        },
23915        end: function (tag, start, end) {
23916            var element = stack[stack.length - 1];
23917            // pop stack
23918            stack.length -= 1;
23919            currentParent = stack[stack.length - 1];
23920            if ( true && options.outputSourceRange) {
23921                element.end = end;
23922            }
23923            closeElement(element);
23924        },
23925        chars: function (text, start, end) {
23926            if (!currentParent) {
23927                if (true) {
23928                    if (text === template) {
23929                        warnOnce('Component template requires a root element, rather than just text.', { start: start });
23930                    }
23931                    else if ((text = text.trim())) {
23932                        warnOnce("text \"".concat(text, "\" outside root element will be ignored."), {
23933                            start: start
23934                        });
23935                    }
23936                }
23937                return;
23938            }
23939            // IE textarea placeholder bug
23940            /* istanbul ignore if */
23941            if (isIE &&
23942                currentParent.tag === 'textarea' &&
23943                currentParent.attrsMap.placeholder === text) {
23944                return;
23945            }
23946            var children = currentParent.children;
23947            if (inPre || text.trim()) {
23948                text = isTextTag(currentParent)
23949                    ? text
23950                    : decodeHTMLCached(text);
23951            }
23952            else if (!children.length) {
23953                // remove the whitespace-only node right after an opening tag
23954                text = '';
23955            }
23956            else if (whitespaceOption) {
23957                if (whitespaceOption === 'condense') {
23958                    // in condense mode, remove the whitespace node if it contains
23959                    // line break, otherwise condense to a single space
23960                    text = lineBreakRE.test(text) ? '' : ' ';
23961                }
23962                else {
23963                    text = ' ';
23964                }
23965            }
23966            else {
23967                text = preserveWhitespace ? ' ' : '';
23968            }
23969            if (text) {
23970                if (!inPre && whitespaceOption === 'condense') {
23971                    // condense consecutive whitespaces into single space
23972                    text = text.replace(whitespaceRE, ' ');
23973                }
23974                var res = void 0;
23975                var child = void 0;
23976                if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {
23977                    child = {
23978                        type: 2,
23979                        expression: res.expression,
23980                        tokens: res.tokens,
23981                        text: text
23982                    };
23983                }
23984                else if (text !== ' ' ||
23985                    !children.length ||
23986                    children[children.length - 1].text !== ' ') {
23987                    child = {
23988                        type: 3,
23989                        text: text
23990                    };
23991                }
23992                if (child) {
23993                    if ( true && options.outputSourceRange) {
23994                        child.start = start;
23995                        child.end = end;
23996                    }
23997                    children.push(child);
23998                }
23999            }
24000        },
24001        comment: function (text, start, end) {
24002            // adding anything as a sibling to the root node is forbidden
24003            // comments should still be allowed, but ignored
24004            if (currentParent) {
24005                var child = {
24006                    type: 3,
24007                    text: text,
24008                    isComment: true
24009                };
24010                if ( true && options.outputSourceRange) {
24011                    child.start = start;
24012                    child.end = end;
24013                }
24014                currentParent.children.push(child);
24015            }
24016        }
24017    });
24018    return root;
24019}
24020function processPre(el) {
24021    if (getAndRemoveAttr(el, 'v-pre') != null) {
24022        el.pre = true;
24023    }
24024}
24025function processRawAttrs(el) {
24026    var list = el.attrsList;
24027    var len = list.length;
24028    if (len) {
24029        var attrs = (el.attrs = new Array(len));
24030        for (var i = 0; i < len; i++) {
24031            attrs[i] = {
24032                name: list[i].name,
24033                value: JSON.stringify(list[i].value)
24034            };
24035            if (list[i].start != null) {
24036                attrs[i].start = list[i].start;
24037                attrs[i].end = list[i].end;
24038            }
24039        }
24040    }
24041    else if (!el.pre) {
24042        // non root node in pre blocks with no attributes
24043        el.plain = true;
24044    }
24045}
24046function processElement(element, options) {
24047    processKey(element);
24048    // determine whether this is a plain element after
24049    // removing structural attributes
24050    element.plain =
24051        !element.key && !element.scopedSlots && !element.attrsList.length;
24052    processRef(element);
24053    processSlotContent(element);
24054    processSlotOutlet(element);
24055    processComponent(element);
24056    for (var i = 0; i < transforms.length; i++) {
24057        element = transforms[i](element, options) || element;
24058    }
24059    processAttrs(element);
24060    return element;
24061}
24062function processKey(el) {
24063    var exp = getBindingAttr(el, 'key');
24064    if (exp) {
24065        if (true) {
24066            if (el.tag === 'template') {
24067                warn("<template> cannot be keyed. Place the key on real elements instead.", getRawBindingAttr(el, 'key'));
24068            }
24069            if (el.for) {
24070                var iterator = el.iterator2 || el.iterator1;
24071                var parent_1 = el.parent;
24072                if (iterator &&
24073                    iterator === exp &&
24074                    parent_1 &&
24075                    parent_1.tag === 'transition-group') {
24076                    warn("Do not use v-for index as key on <transition-group> children, " +
24077                        "this is the same as not using keys.", getRawBindingAttr(el, 'key'), true /* tip */);
24078                }
24079            }
24080        }
24081        el.key = exp;
24082    }
24083}
24084function processRef(el) {
24085    var ref = getBindingAttr(el, 'ref');
24086    if (ref) {
24087        el.ref = ref;
24088        el.refInFor = checkInFor(el);
24089    }
24090}
24091function processFor(el) {
24092    var exp;
24093    if ((exp = getAndRemoveAttr(el, 'v-for'))) {
24094        var res = parseFor(exp);
24095        if (res) {
24096            extend(el, res);
24097        }
24098        else if (true) {
24099            warn("Invalid v-for expression: ".concat(exp), el.rawAttrsMap['v-for']);
24100        }
24101    }
24102}
24103function parseFor(exp) {
24104    var inMatch = exp.match(forAliasRE);
24105    if (!inMatch)
24106        return;
24107    var res = {};
24108    res.for = inMatch[2].trim();
24109    var alias = inMatch[1].trim().replace(stripParensRE, '');
24110    var iteratorMatch = alias.match(forIteratorRE);
24111    if (iteratorMatch) {
24112        res.alias = alias.replace(forIteratorRE, '').trim();
24113        res.iterator1 = iteratorMatch[1].trim();
24114        if (iteratorMatch[2]) {
24115            res.iterator2 = iteratorMatch[2].trim();
24116        }
24117    }
24118    else {
24119        res.alias = alias;
24120    }
24121    return res;
24122}
24123function processIf(el) {
24124    var exp = getAndRemoveAttr(el, 'v-if');
24125    if (exp) {
24126        el.if = exp;
24127        addIfCondition(el, {
24128            exp: exp,
24129            block: el
24130        });
24131    }
24132    else {
24133        if (getAndRemoveAttr(el, 'v-else') != null) {
24134            el.else = true;
24135        }
24136        var elseif = getAndRemoveAttr(el, 'v-else-if');
24137        if (elseif) {
24138            el.elseif = elseif;
24139        }
24140    }
24141}
24142function processIfConditions(el, parent) {
24143    var prev = findPrevElement(parent.children);
24144    if (prev && prev.if) {
24145        addIfCondition(prev, {
24146            exp: el.elseif,
24147            block: el
24148        });
24149    }
24150    else if (true) {
24151        warn("v-".concat(el.elseif ? 'else-if="' + el.elseif + '"' : 'else', " ") +
24152            "used on element <".concat(el.tag, "> without corresponding v-if."), el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']);
24153    }
24154}
24155function findPrevElement(children) {
24156    var i = children.length;
24157    while (i--) {
24158        if (children[i].type === 1) {
24159            return children[i];
24160        }
24161        else {
24162            if ( true && children[i].text !== ' ') {
24163                warn("text \"".concat(children[i].text.trim(), "\" between v-if and v-else(-if) ") +
24164                    "will be ignored.", children[i]);
24165            }
24166            children.pop();
24167        }
24168    }
24169}
24170function addIfCondition(el, condition) {
24171    if (!el.ifConditions) {
24172        el.ifConditions = [];
24173    }
24174    el.ifConditions.push(condition);
24175}
24176function processOnce(el) {
24177    var once = getAndRemoveAttr(el, 'v-once');
24178    if (once != null) {
24179        el.once = true;
24180    }
24181}
24182// handle content being passed to a component as slot,
24183// e.g. <template slot="xxx">, <div slot-scope="xxx">
24184function processSlotContent(el) {
24185    var slotScope;
24186    if (el.tag === 'template') {
24187        slotScope = getAndRemoveAttr(el, 'scope');
24188        /* istanbul ignore if */
24189        if ( true && slotScope) {
24190            warn("the \"scope\" attribute for scoped slots have been deprecated and " +
24191                "replaced by \"slot-scope\" since 2.5. The new \"slot-scope\" attribute " +
24192                "can also be used on plain elements in addition to <template> to " +
24193                "denote scoped slots.", el.rawAttrsMap['scope'], true);
24194        }
24195        el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');
24196    }
24197    else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {
24198        /* istanbul ignore if */
24199        if ( true && el.attrsMap['v-for']) {
24200            warn("Ambiguous combined usage of slot-scope and v-for on <".concat(el.tag, "> ") +
24201                "(v-for takes higher priority). Use a wrapper <template> for the " +
24202                "scoped slot to make it clearer.", el.rawAttrsMap['slot-scope'], true);
24203        }
24204        el.slotScope = slotScope;
24205    }
24206    // slot="xxx"
24207    var slotTarget = getBindingAttr(el, 'slot');
24208    if (slotTarget) {
24209        el.slotTarget = slotTarget === '""' ? '"default"' : slotTarget;
24210        el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']);
24211        // preserve slot as an attribute for native shadow DOM compat
24212        // only for non-scoped slots.
24213        if (el.tag !== 'template' && !el.slotScope) {
24214            addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'));
24215        }
24216    }
24217    // 2.6 v-slot syntax
24218    {
24219        if (el.tag === 'template') {
24220            // v-slot on <template>
24221            var slotBinding = getAndRemoveAttrByRegex(el, slotRE);
24222            if (slotBinding) {
24223                if (true) {
24224                    if (el.slotTarget || el.slotScope) {
24225                        warn("Unexpected mixed usage of different slot syntaxes.", el);
24226                    }
24227                    if (el.parent && !maybeComponent(el.parent)) {
24228                        warn("<template v-slot> can only appear at the root level inside " +
24229                            "the receiving component", el);
24230                    }
24231                }
24232                var _a = getSlotName(slotBinding), name_2 = _a.name, dynamic = _a.dynamic;
24233                el.slotTarget = name_2;
24234                el.slotTargetDynamic = dynamic;
24235                el.slotScope = slotBinding.value || emptySlotScopeToken; // force it into a scoped slot for perf
24236            }
24237        }
24238        else {
24239            // v-slot on component, denotes default slot
24240            var slotBinding = getAndRemoveAttrByRegex(el, slotRE);
24241            if (slotBinding) {
24242                if (true) {
24243                    if (!maybeComponent(el)) {
24244                        warn("v-slot can only be used on components or <template>.", slotBinding);
24245                    }
24246                    if (el.slotScope || el.slotTarget) {
24247                        warn("Unexpected mixed usage of different slot syntaxes.", el);
24248                    }
24249                    if (el.scopedSlots) {
24250                        warn("To avoid scope ambiguity, the default slot should also use " +
24251                            "<template> syntax when there are other named slots.", slotBinding);
24252                    }
24253                }
24254                // add the component's children to its default slot
24255                var slots = el.scopedSlots || (el.scopedSlots = {});
24256                var _b = getSlotName(slotBinding), name_3 = _b.name, dynamic = _b.dynamic;
24257                var slotContainer_1 = (slots[name_3] = createASTElement('template', [], el));
24258                slotContainer_1.slotTarget = name_3;
24259                slotContainer_1.slotTargetDynamic = dynamic;
24260                slotContainer_1.children = el.children.filter(function (c) {
24261                    if (!c.slotScope) {
24262                        c.parent = slotContainer_1;
24263                        return true;
24264                    }
24265                });
24266                slotContainer_1.slotScope = slotBinding.value || emptySlotScopeToken;
24267                // remove children as they are returned from scopedSlots now
24268                el.children = [];
24269                // mark el non-plain so data gets generated
24270                el.plain = false;
24271            }
24272        }
24273    }
24274}
24275function getSlotName(binding) {
24276    var name = binding.name.replace(slotRE, '');
24277    if (!name) {
24278        if (binding.name[0] !== '#') {
24279            name = 'default';
24280        }
24281        else if (true) {
24282            warn("v-slot shorthand syntax requires a slot name.", binding);
24283        }
24284    }
24285    return dynamicArgRE.test(name)
24286        ? // dynamic [name]
24287            { name: name.slice(1, -1), dynamic: true }
24288        : // static name
24289            { name: "\"".concat(name, "\""), dynamic: false };
24290}
24291// handle <slot/> outlets
24292function processSlotOutlet(el) {
24293    if (el.tag === 'slot') {
24294        el.slotName = getBindingAttr(el, 'name');
24295        if ( true && el.key) {
24296            warn("`key` does not work on <slot> because slots are abstract outlets " +
24297                "and can possibly expand into multiple elements. " +
24298                "Use the key on a wrapping element instead.", getRawBindingAttr(el, 'key'));
24299        }
24300    }
24301}
24302function processComponent(el) {
24303    var binding;
24304    if ((binding = getBindingAttr(el, 'is'))) {
24305        el.component = binding;
24306    }
24307    if (getAndRemoveAttr(el, 'inline-template') != null) {
24308        el.inlineTemplate = true;
24309    }
24310}
24311function processAttrs(el) {
24312    var list = el.attrsList;
24313    var i, l, name, rawName, value, modifiers, syncGen, isDynamic;
24314    for (i = 0, l = list.length; i < l; i++) {
24315        name = rawName = list[i].name;
24316        value = list[i].value;
24317        if (dirRE.test(name)) {
24318            // mark element as dynamic
24319            el.hasBindings = true;
24320            // modifiers
24321            modifiers = parseModifiers(name.replace(dirRE, ''));
24322            // support .foo shorthand syntax for the .prop modifier
24323            if (modifiers) {
24324                name = name.replace(modifierRE, '');
24325            }
24326            if (bindRE.test(name)) {
24327                // v-bind
24328                name = name.replace(bindRE, '');
24329                value = parseFilters(value);
24330                isDynamic = dynamicArgRE.test(name);
24331                if (isDynamic) {
24332                    name = name.slice(1, -1);
24333                }
24334                if ( true && value.trim().length === 0) {
24335                    warn("The value for a v-bind expression cannot be empty. Found in \"v-bind:".concat(name, "\""));
24336                }
24337                if (modifiers) {
24338                    if (modifiers.prop && !isDynamic) {
24339                        name = camelize(name);
24340                        if (name === 'innerHtml')
24341                            name = 'innerHTML';
24342                    }
24343                    if (modifiers.camel && !isDynamic) {
24344                        name = camelize(name);
24345                    }
24346                    if (modifiers.sync) {
24347                        syncGen = genAssignmentCode(value, "$event");
24348                        if (!isDynamic) {
24349                            addHandler(el, "update:".concat(camelize(name)), syncGen, null, false, warn, list[i]);
24350                            if (hyphenate(name) !== camelize(name)) {
24351                                addHandler(el, "update:".concat(hyphenate(name)), syncGen, null, false, warn, list[i]);
24352                            }
24353                        }
24354                        else {
24355                            // handler w/ dynamic event name
24356                            addHandler(el, "\"update:\"+(".concat(name, ")"), syncGen, null, false, warn, list[i], true // dynamic
24357                            );
24358                        }
24359                    }
24360                }
24361                if ((modifiers && modifiers.prop) ||
24362                    (!el.component && platformMustUseProp(el.tag, el.attrsMap.type, name))) {
24363                    addProp(el, name, value, list[i], isDynamic);
24364                }
24365                else {
24366                    addAttr(el, name, value, list[i], isDynamic);
24367                }
24368            }
24369            else if (onRE.test(name)) {
24370                // v-on
24371                name = name.replace(onRE, '');
24372                isDynamic = dynamicArgRE.test(name);
24373                if (isDynamic) {
24374                    name = name.slice(1, -1);
24375                }
24376                addHandler(el, name, value, modifiers, false, warn, list[i], isDynamic);
24377            }
24378            else {
24379                // normal directives
24380                name = name.replace(dirRE, '');
24381                // parse arg
24382                var argMatch = name.match(argRE);
24383                var arg = argMatch && argMatch[1];
24384                isDynamic = false;
24385                if (arg) {
24386                    name = name.slice(0, -(arg.length + 1));
24387                    if (dynamicArgRE.test(arg)) {
24388                        arg = arg.slice(1, -1);
24389                        isDynamic = true;
24390                    }
24391                }
24392                addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]);
24393                if ( true && name === 'model') {
24394                    checkForAliasModel(el, value);
24395                }
24396            }
24397        }
24398        else {
24399            // literal attribute
24400            if (true) {
24401                var res = parseText(value, delimiters);
24402                if (res) {
24403                    warn("".concat(name, "=\"").concat(value, "\": ") +
24404                        'Interpolation inside attributes has been removed. ' +
24405                        'Use v-bind or the colon shorthand instead. For example, ' +
24406                        'instead of <div id="{{ val }}">, use <div :id="val">.', list[i]);
24407                }
24408            }
24409            addAttr(el, name, JSON.stringify(value), list[i]);
24410            // #6887 firefox doesn't update muted state if set via attribute
24411            // even immediately after element creation
24412            if (!el.component &&
24413                name === 'muted' &&
24414                platformMustUseProp(el.tag, el.attrsMap.type, name)) {
24415                addProp(el, name, 'true', list[i]);
24416            }
24417        }
24418    }
24419}
24420function checkInFor(el) {
24421    var parent = el;
24422    while (parent) {
24423        if (parent.for !== undefined) {
24424            return true;
24425        }
24426        parent = parent.parent;
24427    }
24428    return false;
24429}
24430function parseModifiers(name) {
24431    var match = name.match(modifierRE);
24432    if (match) {
24433        var ret_1 = {};
24434        match.forEach(function (m) {
24435            ret_1[m.slice(1)] = true;
24436        });
24437        return ret_1;
24438    }
24439}
24440function makeAttrsMap(attrs) {
24441    var map = {};
24442    for (var i = 0, l = attrs.length; i < l; i++) {
24443        if ( true && map[attrs[i].name] && !isIE && !isEdge) {
24444            warn('duplicate attribute: ' + attrs[i].name, attrs[i]);
24445        }
24446        map[attrs[i].name] = attrs[i].value;
24447    }
24448    return map;
24449}
24450// for script (e.g. type="x/template") or style, do not decode content
24451function isTextTag(el) {
24452    return el.tag === 'script' || el.tag === 'style';
24453}
24454function isForbiddenTag(el) {
24455    return (el.tag === 'style' ||
24456        (el.tag === 'script' &&
24457            (!el.attrsMap.type || el.attrsMap.type === 'text/javascript')));
24458}
24459var ieNSBug = /^xmlns:NS\d+/;
24460var ieNSPrefix = /^NS\d+:/;
24461/* istanbul ignore next */
24462function guardIESVGBug(attrs) {
24463    var res = [];
24464    for (var i = 0; i < attrs.length; i++) {
24465        var attr = attrs[i];
24466        if (!ieNSBug.test(attr.name)) {
24467            attr.name = attr.name.replace(ieNSPrefix, '');
24468            res.push(attr);
24469        }
24470    }
24471    return res;
24472}
24473function checkForAliasModel(el, value) {
24474    var _el = el;
24475    while (_el) {
24476        if (_el.for && _el.alias === value) {
24477            warn("<".concat(el.tag, " v-model=\"").concat(value, "\">: ") +
24478                "You are binding v-model directly to a v-for iteration alias. " +
24479                "This will not be able to modify the v-for source array because " +
24480                "writing to the alias is like modifying a function local variable. " +
24481                "Consider using an array of objects and use v-model on an object property instead.", el.rawAttrsMap['v-model']);
24482        }
24483        _el = _el.parent;
24484    }
24485}
24486
24487/**
24488 * Expand input[v-model] with dynamic type bindings into v-if-else chains
24489 * Turn this:
24490 *   <input v-model="data[type]" :type="type">
24491 * into this:
24492 *   <input v-if="type === 'checkbox'" type="checkbox" v-model="data[type]">
24493 *   <input v-else-if="type === 'radio'" type="radio" v-model="data[type]">
24494 *   <input v-else :type="type" v-model="data[type]">
24495 */
24496function preTransformNode(el, options) {
24497    if (el.tag === 'input') {
24498        var map = el.attrsMap;
24499        if (!map['v-model']) {
24500            return;
24501        }
24502        var typeBinding = void 0;
24503        if (map[':type'] || map['v-bind:type']) {
24504            typeBinding = getBindingAttr(el, 'type');
24505        }
24506        if (!map.type && !typeBinding && map['v-bind']) {
24507            typeBinding = "(".concat(map['v-bind'], ").type");
24508        }
24509        if (typeBinding) {
24510            var ifCondition = getAndRemoveAttr(el, 'v-if', true);
24511            var ifConditionExtra = ifCondition ? "&&(".concat(ifCondition, ")") : "";
24512            var hasElse = getAndRemoveAttr(el, 'v-else', true) != null;
24513            var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);
24514            // 1. checkbox
24515            var branch0 = cloneASTElement(el);
24516            // process for on the main node
24517            processFor(branch0);
24518            addRawAttr(branch0, 'type', 'checkbox');
24519            processElement(branch0, options);
24520            branch0.processed = true; // prevent it from double-processed
24521            branch0.if = "(".concat(typeBinding, ")==='checkbox'") + ifConditionExtra;
24522            addIfCondition(branch0, {
24523                exp: branch0.if,
24524                block: branch0
24525            });
24526            // 2. add radio else-if condition
24527            var branch1 = cloneASTElement(el);
24528            getAndRemoveAttr(branch1, 'v-for', true);
24529            addRawAttr(branch1, 'type', 'radio');
24530            processElement(branch1, options);
24531            addIfCondition(branch0, {
24532                exp: "(".concat(typeBinding, ")==='radio'") + ifConditionExtra,
24533                block: branch1
24534            });
24535            // 3. other
24536            var branch2 = cloneASTElement(el);
24537            getAndRemoveAttr(branch2, 'v-for', true);
24538            addRawAttr(branch2, ':type', typeBinding);
24539            processElement(branch2, options);
24540            addIfCondition(branch0, {
24541                exp: ifCondition,
24542                block: branch2
24543            });
24544            if (hasElse) {
24545                branch0.else = true;
24546            }
24547            else if (elseIfCondition) {
24548                branch0.elseif = elseIfCondition;
24549            }
24550            return branch0;
24551        }
24552    }
24553}
24554function cloneASTElement(el) {
24555    return createASTElement(el.tag, el.attrsList.slice(), el.parent);
24556}
24557var model = {
24558    preTransformNode: preTransformNode
24559};
24560
24561var modules = [klass, style, model];
24562
24563function text(el, dir) {
24564    if (dir.value) {
24565        addProp(el, 'textContent', "_s(".concat(dir.value, ")"), dir);
24566    }
24567}
24568
24569function html(el, dir) {
24570    if (dir.value) {
24571        addProp(el, 'innerHTML', "_s(".concat(dir.value, ")"), dir);
24572    }
24573}
24574
24575var directives = {
24576    model: model$1,
24577    text: text,
24578    html: html
24579};
24580
24581var baseOptions = {
24582    expectHTML: true,
24583    modules: modules,
24584    directives: directives,
24585    isPreTag: isPreTag,
24586    isUnaryTag: isUnaryTag,
24587    mustUseProp: mustUseProp,
24588    canBeLeftOpenTag: canBeLeftOpenTag,
24589    isReservedTag: isReservedTag,
24590    getTagNamespace: getTagNamespace,
24591    staticKeys: genStaticKeys$1(modules)
24592};
24593
24594var isStaticKey;
24595var isPlatformReservedTag;
24596var genStaticKeysCached = cached(genStaticKeys);
24597/**
24598 * Goal of the optimizer: walk the generated template AST tree
24599 * and detect sub-trees that are purely static, i.e. parts of
24600 * the DOM that never needs to change.
24601 *
24602 * Once we detect these sub-trees, we can:
24603 *
24604 * 1. Hoist them into constants, so that we no longer need to
24605 *    create fresh nodes for them on each re-render;
24606 * 2. Completely skip them in the patching process.
24607 */
24608function optimize(root, options) {
24609    if (!root)
24610        return;
24611    isStaticKey = genStaticKeysCached(options.staticKeys || '');
24612    isPlatformReservedTag = options.isReservedTag || no;
24613    // first pass: mark all non-static nodes.
24614    markStatic(root);
24615    // second pass: mark static roots.
24616    markStaticRoots(root, false);
24617}
24618function genStaticKeys(keys) {
24619    return makeMap('type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +
24620        (keys ? ',' + keys : ''));
24621}
24622function markStatic(node) {
24623    node.static = isStatic(node);
24624    if (node.type === 1) {
24625        // do not make component slot content static. this avoids
24626        // 1. components not able to mutate slot nodes
24627        // 2. static slot content fails for hot-reloading
24628        if (!isPlatformReservedTag(node.tag) &&
24629            node.tag !== 'slot' &&
24630            node.attrsMap['inline-template'] == null) {
24631            return;
24632        }
24633        for (var i = 0, l = node.children.length; i < l; i++) {
24634            var child = node.children[i];
24635            markStatic(child);
24636            if (!child.static) {
24637                node.static = false;
24638            }
24639        }
24640        if (node.ifConditions) {
24641            for (var i = 1, l = node.ifConditions.length; i < l; i++) {
24642                var block = node.ifConditions[i].block;
24643                markStatic(block);
24644                if (!block.static) {
24645                    node.static = false;
24646                }
24647            }
24648        }
24649    }
24650}
24651function markStaticRoots(node, isInFor) {
24652    if (node.type === 1) {
24653        if (node.static || node.once) {
24654            node.staticInFor = isInFor;
24655        }
24656        // For a node to qualify as a static root, it should have children that
24657        // are not just static text. Otherwise the cost of hoisting out will
24658        // outweigh the benefits and it's better off to just always render it fresh.
24659        if (node.static &&
24660            node.children.length &&
24661            !(node.children.length === 1 && node.children[0].type === 3)) {
24662            node.staticRoot = true;
24663            return;
24664        }
24665        else {
24666            node.staticRoot = false;
24667        }
24668        if (node.children) {
24669            for (var i = 0, l = node.children.length; i < l; i++) {
24670                markStaticRoots(node.children[i], isInFor || !!node.for);
24671            }
24672        }
24673        if (node.ifConditions) {
24674            for (var i = 1, l = node.ifConditions.length; i < l; i++) {
24675                markStaticRoots(node.ifConditions[i].block, isInFor);
24676            }
24677        }
24678    }
24679}
24680function isStatic(node) {
24681    if (node.type === 2) {
24682        // expression
24683        return false;
24684    }
24685    if (node.type === 3) {
24686        // text
24687        return true;
24688    }
24689    return !!(node.pre ||
24690        (!node.hasBindings && // no dynamic bindings
24691            !node.if &&
24692            !node.for && // not v-if or v-for or v-else
24693            !isBuiltInTag(node.tag) && // not a built-in
24694            isPlatformReservedTag(node.tag) && // not a component
24695            !isDirectChildOfTemplateFor(node) &&
24696            Object.keys(node).every(isStaticKey)));
24697}
24698function isDirectChildOfTemplateFor(node) {
24699    while (node.parent) {
24700        node = node.parent;
24701        if (node.tag !== 'template') {
24702            return false;
24703        }
24704        if (node.for) {
24705            return true;
24706        }
24707    }
24708    return false;
24709}
24710
24711var fnExpRE = /^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/;
24712var fnInvokeRE = /\([^)]*?\);*$/;
24713var simplePathRE = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/;
24714// KeyboardEvent.keyCode aliases
24715var keyCodes = {
24716    esc: 27,
24717    tab: 9,
24718    enter: 13,
24719    space: 32,
24720    up: 38,
24721    left: 37,
24722    right: 39,
24723    down: 40,
24724    delete: [8, 46]
24725};
24726// KeyboardEvent.key aliases
24727var keyNames = {
24728    // #7880: IE11 and Edge use `Esc` for Escape key name.
24729    esc: ['Esc', 'Escape'],
24730    tab: 'Tab',
24731    enter: 'Enter',
24732    // #9112: IE11 uses `Spacebar` for Space key name.
24733    space: [' ', 'Spacebar'],
24734    // #7806: IE11 uses key names without `Arrow` prefix for arrow keys.
24735    up: ['Up', 'ArrowUp'],
24736    left: ['Left', 'ArrowLeft'],
24737    right: ['Right', 'ArrowRight'],
24738    down: ['Down', 'ArrowDown'],
24739    // #9112: IE11 uses `Del` for Delete key name.
24740    delete: ['Backspace', 'Delete', 'Del']
24741};
24742// #4868: modifiers that prevent the execution of the listener
24743// need to explicitly return null so that we can determine whether to remove
24744// the listener for .once
24745var genGuard = function (condition) { return "if(".concat(condition, ")return null;"); };
24746var modifierCode = {
24747    stop: '$event.stopPropagation();',
24748    prevent: '$event.preventDefault();',
24749    self: genGuard("$event.target !== $event.currentTarget"),
24750    ctrl: genGuard("!$event.ctrlKey"),
24751    shift: genGuard("!$event.shiftKey"),
24752    alt: genGuard("!$event.altKey"),
24753    meta: genGuard("!$event.metaKey"),
24754    left: genGuard("'button' in $event && $event.button !== 0"),
24755    middle: genGuard("'button' in $event && $event.button !== 1"),
24756    right: genGuard("'button' in $event && $event.button !== 2")
24757};
24758function genHandlers(events, isNative) {
24759    var prefix = isNative ? 'nativeOn:' : 'on:';
24760    var staticHandlers = "";
24761    var dynamicHandlers = "";
24762    for (var name_1 in events) {
24763        var handlerCode = genHandler(events[name_1]);
24764        //@ts-expect-error
24765        if (events[name_1] && events[name_1].dynamic) {
24766            dynamicHandlers += "".concat(name_1, ",").concat(handlerCode, ",");
24767        }
24768        else {
24769            staticHandlers += "\"".concat(name_1, "\":").concat(handlerCode, ",");
24770        }
24771    }
24772    staticHandlers = "{".concat(staticHandlers.slice(0, -1), "}");
24773    if (dynamicHandlers) {
24774        return prefix + "_d(".concat(staticHandlers, ",[").concat(dynamicHandlers.slice(0, -1), "])");
24775    }
24776    else {
24777        return prefix + staticHandlers;
24778    }
24779}
24780function genHandler(handler) {
24781    if (!handler) {
24782        return 'function(){}';
24783    }
24784    if (Array.isArray(handler)) {
24785        return "[".concat(handler.map(function (handler) { return genHandler(handler); }).join(','), "]");
24786    }
24787    var isMethodPath = simplePathRE.test(handler.value);
24788    var isFunctionExpression = fnExpRE.test(handler.value);
24789    var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));
24790    if (!handler.modifiers) {
24791        if (isMethodPath || isFunctionExpression) {
24792            return handler.value;
24793        }
24794        return "function($event){".concat(isFunctionInvocation ? "return ".concat(handler.value) : handler.value, "}"); // inline statement
24795    }
24796    else {
24797        var code = '';
24798        var genModifierCode = '';
24799        var keys = [];
24800        var _loop_1 = function (key) {
24801            if (modifierCode[key]) {
24802                genModifierCode += modifierCode[key];
24803                // left/right
24804                if (keyCodes[key]) {
24805                    keys.push(key);
24806                }
24807            }
24808            else if (key === 'exact') {
24809                var modifiers_1 = handler.modifiers;
24810                genModifierCode += genGuard(['ctrl', 'shift', 'alt', 'meta']
24811                    .filter(function (keyModifier) { return !modifiers_1[keyModifier]; })
24812                    .map(function (keyModifier) { return "$event.".concat(keyModifier, "Key"); })
24813                    .join('||'));
24814            }
24815            else {
24816                keys.push(key);
24817            }
24818        };
24819        for (var key in handler.modifiers) {
24820            _loop_1(key);
24821        }
24822        if (keys.length) {
24823            code += genKeyFilter(keys);
24824        }
24825        // Make sure modifiers like prevent and stop get executed after key filtering
24826        if (genModifierCode) {
24827            code += genModifierCode;
24828        }
24829        var handlerCode = isMethodPath
24830            ? "return ".concat(handler.value, ".apply(null, arguments)")
24831            : isFunctionExpression
24832                ? "return (".concat(handler.value, ").apply(null, arguments)")
24833                : isFunctionInvocation
24834                    ? "return ".concat(handler.value)
24835                    : handler.value;
24836        return "function($event){".concat(code).concat(handlerCode, "}");
24837    }
24838}
24839function genKeyFilter(keys) {
24840    return (
24841    // make sure the key filters only apply to KeyboardEvents
24842    // #9441: can't use 'keyCode' in $event because Chrome autofill fires fake
24843    // key events that do not have keyCode property...
24844    "if(!$event.type.indexOf('key')&&" +
24845        "".concat(keys.map(genFilterCode).join('&&'), ")return null;"));
24846}
24847function genFilterCode(key) {
24848    var keyVal = parseInt(key, 10);
24849    if (keyVal) {
24850        return "$event.keyCode!==".concat(keyVal);
24851    }
24852    var keyCode = keyCodes[key];
24853    var keyName = keyNames[key];
24854    return ("_k($event.keyCode," +
24855        "".concat(JSON.stringify(key), ",") +
24856        "".concat(JSON.stringify(keyCode), ",") +
24857        "$event.key," +
24858        "".concat(JSON.stringify(keyName)) +
24859        ")");
24860}
24861
24862function on(el, dir) {
24863    if ( true && dir.modifiers) {
24864        warn$2("v-on without argument does not support modifiers.");
24865    }
24866    el.wrapListeners = function (code) { return "_g(".concat(code, ",").concat(dir.value, ")"); };
24867}
24868
24869function bind(el, dir) {
24870    el.wrapData = function (code) {
24871        return "_b(".concat(code, ",'").concat(el.tag, "',").concat(dir.value, ",").concat(dir.modifiers && dir.modifiers.prop ? 'true' : 'false').concat(dir.modifiers && dir.modifiers.sync ? ',true' : '', ")");
24872    };
24873}
24874
24875var baseDirectives = {
24876    on: on,
24877    bind: bind,
24878    cloak: noop
24879};
24880
24881var CodegenState = /** @class */ (function () {
24882    function CodegenState(options) {
24883        this.options = options;
24884        this.warn = options.warn || baseWarn;
24885        this.transforms = pluckModuleFunction(options.modules, 'transformCode');
24886        this.dataGenFns = pluckModuleFunction(options.modules, 'genData');
24887        this.directives = extend(extend({}, baseDirectives), options.directives);
24888        var isReservedTag = options.isReservedTag || no;
24889        this.maybeComponent = function (el) {
24890            return !!el.component || !isReservedTag(el.tag);
24891        };
24892        this.onceId = 0;
24893        this.staticRenderFns = [];
24894        this.pre = false;
24895    }
24896    return CodegenState;
24897}());
24898function generate(ast, options) {
24899    var state = new CodegenState(options);
24900    // fix #11483, Root level <script> tags should not be rendered.
24901    var code = ast
24902        ? ast.tag === 'script'
24903            ? 'null'
24904            : genElement(ast, state)
24905        : '_c("div")';
24906    return {
24907        render: "with(this){return ".concat(code, "}"),
24908        staticRenderFns: state.staticRenderFns
24909    };
24910}
24911function genElement(el, state) {
24912    if (el.parent) {
24913        el.pre = el.pre || el.parent.pre;
24914    }
24915    if (el.staticRoot && !el.staticProcessed) {
24916        return genStatic(el, state);
24917    }
24918    else if (el.once && !el.onceProcessed) {
24919        return genOnce(el, state);
24920    }
24921    else if (el.for && !el.forProcessed) {
24922        return genFor(el, state);
24923    }
24924    else if (el.if && !el.ifProcessed) {
24925        return genIf(el, state);
24926    }
24927    else if (el.tag === 'template' && !el.slotTarget && !state.pre) {
24928        return genChildren(el, state) || 'void 0';
24929    }
24930    else if (el.tag === 'slot') {
24931        return genSlot(el, state);
24932    }
24933    else {
24934        // component or element
24935        var code = void 0;
24936        if (el.component) {
24937            code = genComponent(el.component, el, state);
24938        }
24939        else {
24940            var data = void 0;
24941            var maybeComponent = state.maybeComponent(el);
24942            if (!el.plain || (el.pre && maybeComponent)) {
24943                data = genData(el, state);
24944            }
24945            var tag 
24946            // check if this is a component in <script setup>
24947            = void 0;
24948            // check if this is a component in <script setup>
24949            var bindings = state.options.bindings;
24950            if (maybeComponent && bindings && bindings.__isScriptSetup !== false) {
24951                tag = checkBindingType(bindings, el.tag);
24952            }
24953            if (!tag)
24954                tag = "'".concat(el.tag, "'");
24955            var children = el.inlineTemplate ? null : genChildren(el, state, true);
24956            code = "_c(".concat(tag).concat(data ? ",".concat(data) : '' // data
24957            ).concat(children ? ",".concat(children) : '' // children
24958            , ")");
24959        }
24960        // module transforms
24961        for (var i = 0; i < state.transforms.length; i++) {
24962            code = state.transforms[i](el, code);
24963        }
24964        return code;
24965    }
24966}
24967function checkBindingType(bindings, key) {
24968    var camelName = camelize(key);
24969    var PascalName = capitalize(camelName);
24970    var checkType = function (type) {
24971        if (bindings[key] === type) {
24972            return key;
24973        }
24974        if (bindings[camelName] === type) {
24975            return camelName;
24976        }
24977        if (bindings[PascalName] === type) {
24978            return PascalName;
24979        }
24980    };
24981    var fromConst = checkType("setup-const" /* BindingTypes.SETUP_CONST */) ||
24982        checkType("setup-reactive-const" /* BindingTypes.SETUP_REACTIVE_CONST */);
24983    if (fromConst) {
24984        return fromConst;
24985    }
24986    var fromMaybeRef = checkType("setup-let" /* BindingTypes.SETUP_LET */) ||
24987        checkType("setup-ref" /* BindingTypes.SETUP_REF */) ||
24988        checkType("setup-maybe-ref" /* BindingTypes.SETUP_MAYBE_REF */);
24989    if (fromMaybeRef) {
24990        return fromMaybeRef;
24991    }
24992}
24993// hoist static sub-trees out
24994function genStatic(el, state) {
24995    el.staticProcessed = true;
24996    // Some elements (templates) need to behave differently inside of a v-pre
24997    // node.  All pre nodes are static roots, so we can use this as a location to
24998    // wrap a state change and reset it upon exiting the pre node.
24999    var originalPreState = state.pre;
25000    if (el.pre) {
25001        state.pre = el.pre;
25002    }
25003    state.staticRenderFns.push("with(this){return ".concat(genElement(el, state), "}"));
25004    state.pre = originalPreState;
25005    return "_m(".concat(state.staticRenderFns.length - 1).concat(el.staticInFor ? ',true' : '', ")");
25006}
25007// v-once
25008function genOnce(el, state) {
25009    el.onceProcessed = true;
25010    if (el.if && !el.ifProcessed) {
25011        return genIf(el, state);
25012    }
25013    else if (el.staticInFor) {
25014        var key = '';
25015        var parent_1 = el.parent;
25016        while (parent_1) {
25017            if (parent_1.for) {
25018                key = parent_1.key;
25019                break;
25020            }
25021            parent_1 = parent_1.parent;
25022        }
25023        if (!key) {
25024             true &&
25025                state.warn("v-once can only be used inside v-for that is keyed. ", el.rawAttrsMap['v-once']);
25026            return genElement(el, state);
25027        }
25028        return "_o(".concat(genElement(el, state), ",").concat(state.onceId++, ",").concat(key, ")");
25029    }
25030    else {
25031        return genStatic(el, state);
25032    }
25033}
25034function genIf(el, state, altGen, altEmpty) {
25035    el.ifProcessed = true; // avoid recursion
25036    return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty);
25037}
25038function genIfConditions(conditions, state, altGen, altEmpty) {
25039    if (!conditions.length) {
25040        return altEmpty || '_e()';
25041    }
25042    var condition = conditions.shift();
25043    if (condition.exp) {
25044        return "(".concat(condition.exp, ")?").concat(genTernaryExp(condition.block), ":").concat(genIfConditions(conditions, state, altGen, altEmpty));
25045    }
25046    else {
25047        return "".concat(genTernaryExp(condition.block));
25048    }
25049    // v-if with v-once should generate code like (a)?_m(0):_m(1)
25050    function genTernaryExp(el) {
25051        return altGen
25052            ? altGen(el, state)
25053            : el.once
25054                ? genOnce(el, state)
25055                : genElement(el, state);
25056    }
25057}
25058function genFor(el, state, altGen, altHelper) {
25059    var exp = el.for;
25060    var alias = el.alias;
25061    var iterator1 = el.iterator1 ? ",".concat(el.iterator1) : '';
25062    var iterator2 = el.iterator2 ? ",".concat(el.iterator2) : '';
25063    if ( true &&
25064        state.maybeComponent(el) &&
25065        el.tag !== 'slot' &&
25066        el.tag !== 'template' &&
25067        !el.key) {
25068        state.warn("<".concat(el.tag, " v-for=\"").concat(alias, " in ").concat(exp, "\">: component lists rendered with ") +
25069            "v-for should have explicit keys. " +
25070            "See https://v2.vuejs.org/v2/guide/list.html#key for more info.", el.rawAttrsMap['v-for'], true /* tip */);
25071    }
25072    el.forProcessed = true; // avoid recursion
25073    return ("".concat(altHelper || '_l', "((").concat(exp, "),") +
25074        "function(".concat(alias).concat(iterator1).concat(iterator2, "){") +
25075        "return ".concat((altGen || genElement)(el, state)) +
25076        '})');
25077}
25078function genData(el, state) {
25079    var data = '{';
25080    // directives first.
25081    // directives may mutate the el's other properties before they are generated.
25082    var dirs = genDirectives(el, state);
25083    if (dirs)
25084        data += dirs + ',';
25085    // key
25086    if (el.key) {
25087        data += "key:".concat(el.key, ",");
25088    }
25089    // ref
25090    if (el.ref) {
25091        data += "ref:".concat(el.ref, ",");
25092    }
25093    if (el.refInFor) {
25094        data += "refInFor:true,";
25095    }
25096    // pre
25097    if (el.pre) {
25098        data += "pre:true,";
25099    }
25100    // record original tag name for components using "is" attribute
25101    if (el.component) {
25102        data += "tag:\"".concat(el.tag, "\",");
25103    }
25104    // module data generation functions
25105    for (var i = 0; i < state.dataGenFns.length; i++) {
25106        data += state.dataGenFns[i](el);
25107    }
25108    // attributes
25109    if (el.attrs) {
25110        data += "attrs:".concat(genProps(el.attrs), ",");
25111    }
25112    // DOM props
25113    if (el.props) {
25114        data += "domProps:".concat(genProps(el.props), ",");
25115    }
25116    // event handlers
25117    if (el.events) {
25118        data += "".concat(genHandlers(el.events, false), ",");
25119    }
25120    if (el.nativeEvents) {
25121        data += "".concat(genHandlers(el.nativeEvents, true), ",");
25122    }
25123    // slot target
25124    // only for non-scoped slots
25125    if (el.slotTarget && !el.slotScope) {
25126        data += "slot:".concat(el.slotTarget, ",");
25127    }
25128    // scoped slots
25129    if (el.scopedSlots) {
25130        data += "".concat(genScopedSlots(el, el.scopedSlots, state), ",");
25131    }
25132    // component v-model
25133    if (el.model) {
25134        data += "model:{value:".concat(el.model.value, ",callback:").concat(el.model.callback, ",expression:").concat(el.model.expression, "},");
25135    }
25136    // inline-template
25137    if (el.inlineTemplate) {
25138        var inlineTemplate = genInlineTemplate(el, state);
25139        if (inlineTemplate) {
25140            data += "".concat(inlineTemplate, ",");
25141        }
25142    }
25143    data = data.replace(/,$/, '') + '}';
25144    // v-bind dynamic argument wrap
25145    // v-bind with dynamic arguments must be applied using the same v-bind object
25146    // merge helper so that class/style/mustUseProp attrs are handled correctly.
25147    if (el.dynamicAttrs) {
25148        data = "_b(".concat(data, ",\"").concat(el.tag, "\",").concat(genProps(el.dynamicAttrs), ")");
25149    }
25150    // v-bind data wrap
25151    if (el.wrapData) {
25152        data = el.wrapData(data);
25153    }
25154    // v-on data wrap
25155    if (el.wrapListeners) {
25156        data = el.wrapListeners(data);
25157    }
25158    return data;
25159}
25160function genDirectives(el, state) {
25161    var dirs = el.directives;
25162    if (!dirs)
25163        return;
25164    var res = 'directives:[';
25165    var hasRuntime = false;
25166    var i, l, dir, needRuntime;
25167    for (i = 0, l = dirs.length; i < l; i++) {
25168        dir = dirs[i];
25169        needRuntime = true;
25170        var gen = state.directives[dir.name];
25171        if (gen) {
25172            // compile-time directive that manipulates AST.
25173            // returns true if it also needs a runtime counterpart.
25174            needRuntime = !!gen(el, dir, state.warn);
25175        }
25176        if (needRuntime) {
25177            hasRuntime = true;
25178            res += "{name:\"".concat(dir.name, "\",rawName:\"").concat(dir.rawName, "\"").concat(dir.value
25179                ? ",value:(".concat(dir.value, "),expression:").concat(JSON.stringify(dir.value))
25180                : '').concat(dir.arg ? ",arg:".concat(dir.isDynamicArg ? dir.arg : "\"".concat(dir.arg, "\"")) : '').concat(dir.modifiers ? ",modifiers:".concat(JSON.stringify(dir.modifiers)) : '', "},");
25181        }
25182    }
25183    if (hasRuntime) {
25184        return res.slice(0, -1) + ']';
25185    }
25186}
25187function genInlineTemplate(el, state) {
25188    var ast = el.children[0];
25189    if ( true && (el.children.length !== 1 || ast.type !== 1)) {
25190        state.warn('Inline-template components must have exactly one child element.', { start: el.start });
25191    }
25192    if (ast && ast.type === 1) {
25193        var inlineRenderFns = generate(ast, state.options);
25194        return "inlineTemplate:{render:function(){".concat(inlineRenderFns.render, "},staticRenderFns:[").concat(inlineRenderFns.staticRenderFns
25195            .map(function (code) { return "function(){".concat(code, "}"); })
25196            .join(','), "]}");
25197    }
25198}
25199function genScopedSlots(el, slots, state) {
25200    // by default scoped slots are considered "stable", this allows child
25201    // components with only scoped slots to skip forced updates from parent.
25202    // but in some cases we have to bail-out of this optimization
25203    // for example if the slot contains dynamic names, has v-if or v-for on them...
25204    var needsForceUpdate = el.for ||
25205        Object.keys(slots).some(function (key) {
25206            var slot = slots[key];
25207            return (slot.slotTargetDynamic || slot.if || slot.for || containsSlotChild(slot) // is passing down slot from parent which may be dynamic
25208            );
25209        });
25210    // #9534: if a component with scoped slots is inside a conditional branch,
25211    // it's possible for the same component to be reused but with different
25212    // compiled slot content. To avoid that, we generate a unique key based on
25213    // the generated code of all the slot contents.
25214    var needsKey = !!el.if;
25215    // OR when it is inside another scoped slot or v-for (the reactivity may be
25216    // disconnected due to the intermediate scope variable)
25217    // #9438, #9506
25218    // TODO: this can be further optimized by properly analyzing in-scope bindings
25219    // and skip force updating ones that do not actually use scope variables.
25220    if (!needsForceUpdate) {
25221        var parent_2 = el.parent;
25222        while (parent_2) {
25223            if ((parent_2.slotScope && parent_2.slotScope !== emptySlotScopeToken) ||
25224                parent_2.for) {
25225                needsForceUpdate = true;
25226                break;
25227            }
25228            if (parent_2.if) {
25229                needsKey = true;
25230            }
25231            parent_2 = parent_2.parent;
25232        }
25233    }
25234    var generatedSlots = Object.keys(slots)
25235        .map(function (key) { return genScopedSlot(slots[key], state); })
25236        .join(',');
25237    return "scopedSlots:_u([".concat(generatedSlots, "]").concat(needsForceUpdate ? ",null,true" : "").concat(!needsForceUpdate && needsKey ? ",null,false,".concat(hash(generatedSlots)) : "", ")");
25238}
25239function hash(str) {
25240    var hash = 5381;
25241    var i = str.length;
25242    while (i) {
25243        hash = (hash * 33) ^ str.charCodeAt(--i);
25244    }
25245    return hash >>> 0;
25246}
25247function containsSlotChild(el) {
25248    if (el.type === 1) {
25249        if (el.tag === 'slot') {
25250            return true;
25251        }
25252        return el.children.some(containsSlotChild);
25253    }
25254    return false;
25255}
25256function genScopedSlot(el, state) {
25257    var isLegacySyntax = el.attrsMap['slot-scope'];
25258    if (el.if && !el.ifProcessed && !isLegacySyntax) {
25259        return genIf(el, state, genScopedSlot, "null");
25260    }
25261    if (el.for && !el.forProcessed) {
25262        return genFor(el, state, genScopedSlot);
25263    }
25264    var slotScope = el.slotScope === emptySlotScopeToken ? "" : String(el.slotScope);
25265    var fn = "function(".concat(slotScope, "){") +
25266        "return ".concat(el.tag === 'template'
25267            ? el.if && isLegacySyntax
25268                ? "(".concat(el.if, ")?").concat(genChildren(el, state) || 'undefined', ":undefined")
25269                : genChildren(el, state) || 'undefined'
25270            : genElement(el, state), "}");
25271    // reverse proxy v-slot without scope on this.$slots
25272    var reverseProxy = slotScope ? "" : ",proxy:true";
25273    return "{key:".concat(el.slotTarget || "\"default\"", ",fn:").concat(fn).concat(reverseProxy, "}");
25274}
25275function genChildren(el, state, checkSkip, altGenElement, altGenNode) {
25276    var children = el.children;
25277    if (children.length) {
25278        var el_1 = children[0];
25279        // optimize single v-for
25280        if (children.length === 1 &&
25281            el_1.for &&
25282            el_1.tag !== 'template' &&
25283            el_1.tag !== 'slot') {
25284            var normalizationType_1 = checkSkip
25285                ? state.maybeComponent(el_1)
25286                    ? ",1"
25287                    : ",0"
25288                : "";
25289            return "".concat((altGenElement || genElement)(el_1, state)).concat(normalizationType_1);
25290        }
25291        var normalizationType = checkSkip
25292            ? getNormalizationType(children, state.maybeComponent)
25293            : 0;
25294        var gen_1 = altGenNode || genNode;
25295        return "[".concat(children.map(function (c) { return gen_1(c, state); }).join(','), "]").concat(normalizationType ? ",".concat(normalizationType) : '');
25296    }
25297}
25298// determine the normalization needed for the children array.
25299// 0: no normalization needed
25300// 1: simple normalization needed (possible 1-level deep nested array)
25301// 2: full normalization needed
25302function getNormalizationType(children, maybeComponent) {
25303    var res = 0;
25304    for (var i = 0; i < children.length; i++) {
25305        var el = children[i];
25306        if (el.type !== 1) {
25307            continue;
25308        }
25309        if (needsNormalization(el) ||
25310            (el.ifConditions &&
25311                el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {
25312            res = 2;
25313            break;
25314        }
25315        if (maybeComponent(el) ||
25316            (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {
25317            res = 1;
25318        }
25319    }
25320    return res;
25321}
25322function needsNormalization(el) {
25323    return el.for !== undefined || el.tag === 'template' || el.tag === 'slot';
25324}
25325function genNode(node, state) {
25326    if (node.type === 1) {
25327        return genElement(node, state);
25328    }
25329    else if (node.type === 3 && node.isComment) {
25330        return genComment(node);
25331    }
25332    else {
25333        return genText(node);
25334    }
25335}
25336function genText(text) {
25337    return "_v(".concat(text.type === 2
25338        ? text.expression // no need for () because already wrapped in _s()
25339        : transformSpecialNewlines(JSON.stringify(text.text)), ")");
25340}
25341function genComment(comment) {
25342    return "_e(".concat(JSON.stringify(comment.text), ")");
25343}
25344function genSlot(el, state) {
25345    var slotName = el.slotName || '"default"';
25346    var children = genChildren(el, state);
25347    var res = "_t(".concat(slotName).concat(children ? ",function(){return ".concat(children, "}") : '');
25348    var attrs = el.attrs || el.dynamicAttrs
25349        ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({
25350            // slot props are camelized
25351            name: camelize(attr.name),
25352            value: attr.value,
25353            dynamic: attr.dynamic
25354        }); }))
25355        : null;
25356    var bind = el.attrsMap['v-bind'];
25357    if ((attrs || bind) && !children) {
25358        res += ",null";
25359    }
25360    if (attrs) {
25361        res += ",".concat(attrs);
25362    }
25363    if (bind) {
25364        res += "".concat(attrs ? '' : ',null', ",").concat(bind);
25365    }
25366    return res + ')';
25367}
25368// componentName is el.component, take it as argument to shun flow's pessimistic refinement
25369function genComponent(componentName, el, state) {
25370    var children = el.inlineTemplate ? null : genChildren(el, state, true);
25371    return "_c(".concat(componentName, ",").concat(genData(el, state)).concat(children ? ",".concat(children) : '', ")");
25372}
25373function genProps(props) {
25374    var staticProps = "";
25375    var dynamicProps = "";
25376    for (var i = 0; i < props.length; i++) {
25377        var prop = props[i];
25378        var value = transformSpecialNewlines(prop.value);
25379        if (prop.dynamic) {
25380            dynamicProps += "".concat(prop.name, ",").concat(value, ",");
25381        }
25382        else {
25383            staticProps += "\"".concat(prop.name, "\":").concat(value, ",");
25384        }
25385    }
25386    staticProps = "{".concat(staticProps.slice(0, -1), "}");
25387    if (dynamicProps) {
25388        return "_d(".concat(staticProps, ",[").concat(dynamicProps.slice(0, -1), "])");
25389    }
25390    else {
25391        return staticProps;
25392    }
25393}
25394// #3895, #4268
25395function transformSpecialNewlines(text) {
25396    return text.replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029');
25397}
25398
25399// these keywords should not appear inside expressions, but operators like
25400// typeof, instanceof and in are allowed
25401var prohibitedKeywordRE = new RegExp('\\b' +
25402    ('do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +
25403        'super,throw,while,yield,delete,export,import,return,switch,default,' +
25404        'extends,finally,continue,debugger,function,arguments')
25405        .split(',')
25406        .join('\\b|\\b') +
25407    '\\b');
25408// these unary operators should not be used as property/method names
25409var unaryOperatorsRE = new RegExp('\\b' +
25410    'delete,typeof,void'.split(',').join('\\s*\\([^\\)]*\\)|\\b') +
25411    '\\s*\\([^\\)]*\\)');
25412// strip strings in expressions
25413var stripStringRE = /'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g;
25414// detect problematic expressions in a template
25415function detectErrors(ast, warn) {
25416    if (ast) {
25417        checkNode(ast, warn);
25418    }
25419}
25420function checkNode(node, warn) {
25421    if (node.type === 1) {
25422        for (var name_1 in node.attrsMap) {
25423            if (dirRE.test(name_1)) {
25424                var value = node.attrsMap[name_1];
25425                if (value) {
25426                    var range = node.rawAttrsMap[name_1];
25427                    if (name_1 === 'v-for') {
25428                        checkFor(node, "v-for=\"".concat(value, "\""), warn, range);
25429                    }
25430                    else if (name_1 === 'v-slot' || name_1[0] === '#') {
25431                        checkFunctionParameterExpression(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range);
25432                    }
25433                    else if (onRE.test(name_1)) {
25434                        checkEvent(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range);
25435                    }
25436                    else {
25437                        checkExpression(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range);
25438                    }
25439                }
25440            }
25441        }
25442        if (node.children) {
25443            for (var i = 0; i < node.children.length; i++) {
25444                checkNode(node.children[i], warn);
25445            }
25446        }
25447    }
25448    else if (node.type === 2) {
25449        checkExpression(node.expression, node.text, warn, node);
25450    }
25451}
25452function checkEvent(exp, text, warn, range) {
25453    var stripped = exp.replace(stripStringRE, '');
25454    var keywordMatch = stripped.match(unaryOperatorsRE);
25455    if (keywordMatch && stripped.charAt(keywordMatch.index - 1) !== '$') {
25456        warn("avoid using JavaScript unary operator as property name: " +
25457            "\"".concat(keywordMatch[0], "\" in expression ").concat(text.trim()), range);
25458    }
25459    checkExpression(exp, text, warn, range);
25460}
25461function checkFor(node, text, warn, range) {
25462    checkExpression(node.for || '', text, warn, range);
25463    checkIdentifier(node.alias, 'v-for alias', text, warn, range);
25464    checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);
25465    checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);
25466}
25467function checkIdentifier(ident, type, text, warn, range) {
25468    if (typeof ident === 'string') {
25469        try {
25470            new Function("var ".concat(ident, "=_"));
25471        }
25472        catch (e) {
25473            warn("invalid ".concat(type, " \"").concat(ident, "\" in expression: ").concat(text.trim()), range);
25474        }
25475    }
25476}
25477function checkExpression(exp, text, warn, range) {
25478    try {
25479        new Function("return ".concat(exp));
25480    }
25481    catch (e) {
25482        var keywordMatch = exp
25483            .replace(stripStringRE, '')
25484            .match(prohibitedKeywordRE);
25485        if (keywordMatch) {
25486            warn("avoid using JavaScript keyword as property name: " +
25487                "\"".concat(keywordMatch[0], "\"\n  Raw expression: ").concat(text.trim()), range);
25488        }
25489        else {
25490            warn("invalid expression: ".concat(e.message, " in\n\n") +
25491                "    ".concat(exp, "\n\n") +
25492                "  Raw expression: ".concat(text.trim(), "\n"), range);
25493        }
25494    }
25495}
25496function checkFunctionParameterExpression(exp, text, warn, range) {
25497    try {
25498        new Function(exp, '');
25499    }
25500    catch (e) {
25501        warn("invalid function parameter expression: ".concat(e.message, " in\n\n") +
25502            "    ".concat(exp, "\n\n") +
25503            "  Raw expression: ".concat(text.trim(), "\n"), range);
25504    }
25505}
25506
25507var range = 2;
25508function generateCodeFrame(source, start, end) {
25509    if (start === void 0) { start = 0; }
25510    if (end === void 0) { end = source.length; }
25511    var lines = source.split(/\r?\n/);
25512    var count = 0;
25513    var res = [];
25514    for (var i = 0; i < lines.length; i++) {
25515        count += lines[i].length + 1;
25516        if (count >= start) {
25517            for (var j = i - range; j <= i + range || end > count; j++) {
25518                if (j < 0 || j >= lines.length)
25519                    continue;
25520                res.push("".concat(j + 1).concat(repeat(" ", 3 - String(j + 1).length), "|  ").concat(lines[j]));
25521                var lineLength = lines[j].length;
25522                if (j === i) {
25523                    // push underline
25524                    var pad = start - (count - lineLength) + 1;
25525                    var length_1 = end > count ? lineLength - pad : end - start;
25526                    res.push("   |  " + repeat(" ", pad) + repeat("^", length_1));
25527                }
25528                else if (j > i) {
25529                    if (end > count) {
25530                        var length_2 = Math.min(end - count, lineLength);
25531                        res.push("   |  " + repeat("^", length_2));
25532                    }
25533                    count += lineLength + 1;
25534                }
25535            }
25536            break;
25537        }
25538    }
25539    return res.join('\n');
25540}
25541function repeat(str, n) {
25542    var result = '';
25543    if (n > 0) {
25544        // eslint-disable-next-line no-constant-condition
25545        while (true) {
25546            // eslint-disable-line
25547            if (n & 1)
25548                result += str;
25549            n >>>= 1;
25550            if (n <= 0)
25551                break;
25552            str += str;
25553        }
25554    }
25555    return result;
25556}
25557
25558function createFunction(code, errors) {
25559    try {
25560        return new Function(code);
25561    }
25562    catch (err) {
25563        errors.push({ err: err, code: code });
25564        return noop;
25565    }
25566}
25567function createCompileToFunctionFn(compile) {
25568    var cache = Object.create(null);
25569    return function compileToFunctions(template, options, vm) {
25570        options = extend({}, options);
25571        var warn = options.warn || warn$2;
25572        delete options.warn;
25573        /* istanbul ignore if */
25574        if (true) {
25575            // detect possible CSP restriction
25576            try {
25577                new Function('return 1');
25578            }
25579            catch (e) {
25580                if (e.toString().match(/unsafe-eval|CSP/)) {
25581                    warn('It seems you are using the standalone build of Vue.js in an ' +
25582                        'environment with Content Security Policy that prohibits unsafe-eval. ' +
25583                        'The template compiler cannot work in this environment. Consider ' +
25584                        'relaxing the policy to allow unsafe-eval or pre-compiling your ' +
25585                        'templates into render functions.');
25586                }
25587            }
25588        }
25589        // check cache
25590        var key = options.delimiters
25591            ? String(options.delimiters) + template
25592            : template;
25593        if (cache[key]) {
25594            return cache[key];
25595        }
25596        // compile
25597        var compiled = compile(template, options);
25598        // check compilation errors/tips
25599        if (true) {
25600            if (compiled.errors && compiled.errors.length) {
25601                if (options.outputSourceRange) {
25602                    compiled.errors.forEach(function (e) {
25603                        warn("Error compiling template:\n\n".concat(e.msg, "\n\n") +
25604                            generateCodeFrame(template, e.start, e.end), vm);
25605                    });
25606                }
25607                else {
25608                    warn("Error compiling template:\n\n".concat(template, "\n\n") +
25609                        compiled.errors.map(function (e) { return "- ".concat(e); }).join('\n') +
25610                        '\n', vm);
25611                }
25612            }
25613            if (compiled.tips && compiled.tips.length) {
25614                if (options.outputSourceRange) {
25615                    compiled.tips.forEach(function (e) { return tip(e.msg, vm); });
25616                }
25617                else {
25618                    compiled.tips.forEach(function (msg) { return tip(msg, vm); });
25619                }
25620            }
25621        }
25622        // turn code into functions
25623        var res = {};
25624        var fnGenErrors = [];
25625        res.render = createFunction(compiled.render, fnGenErrors);
25626        res.staticRenderFns = compiled.staticRenderFns.map(function (code) {
25627            return createFunction(code, fnGenErrors);
25628        });
25629        // check function generation errors.
25630        // this should only happen if there is a bug in the compiler itself.
25631        // mostly for codegen development use
25632        /* istanbul ignore if */
25633        if (true) {
25634            if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {
25635                warn("Failed to generate render function:\n\n" +
25636                    fnGenErrors
25637                        .map(function (_a) {
25638                        var err = _a.err, code = _a.code;
25639                        return "".concat(err.toString(), " in\n\n").concat(code, "\n");
25640                    })
25641                        .join('\n'), vm);
25642            }
25643        }
25644        return (cache[key] = res);
25645    };
25646}
25647
25648function createCompilerCreator(baseCompile) {
25649    return function createCompiler(baseOptions) {
25650        function compile(template, options) {
25651            var finalOptions = Object.create(baseOptions);
25652            var errors = [];
25653            var tips = [];
25654            var warn = function (msg, range, tip) {
25655                (tip ? tips : errors).push(msg);
25656            };
25657            if (options) {
25658                if ( true && options.outputSourceRange) {
25659                    // $flow-disable-line
25660                    var leadingSpaceLength_1 = template.match(/^\s*/)[0].length;
25661                    warn = function (msg, range, tip) {
25662                        var data = typeof msg === 'string' ? { msg: msg } : msg;
25663                        if (range) {
25664                            if (range.start != null) {
25665                                data.start = range.start + leadingSpaceLength_1;
25666                            }
25667                            if (range.end != null) {
25668                                data.end = range.end + leadingSpaceLength_1;
25669                            }
25670                        }
25671                        (tip ? tips : errors).push(data);
25672                    };
25673                }
25674                // merge custom modules
25675                if (options.modules) {
25676                    finalOptions.modules = (baseOptions.modules || []).concat(options.modules);
25677                }
25678                // merge custom directives
25679                if (options.directives) {
25680                    finalOptions.directives = extend(Object.create(baseOptions.directives || null), options.directives);
25681                }
25682                // copy other options
25683                for (var key in options) {
25684                    if (key !== 'modules' && key !== 'directives') {
25685                        finalOptions[key] = options[key];
25686                    }
25687                }
25688            }
25689            finalOptions.warn = warn;
25690            var compiled = baseCompile(template.trim(), finalOptions);
25691            if (true) {
25692                detectErrors(compiled.ast, warn);
25693            }
25694            compiled.errors = errors;
25695            compiled.tips = tips;
25696            return compiled;
25697        }
25698        return {
25699            compile: compile,
25700            compileToFunctions: createCompileToFunctionFn(compile)
25701        };
25702    };
25703}
25704
25705// `createCompilerCreator` allows creating compilers that use alternative
25706// parser/optimizer/codegen, e.g the SSR optimizing compiler.
25707// Here we just export a default compiler using the default parts.
25708var createCompiler = createCompilerCreator(function baseCompile(template, options) {
25709    var ast = parse(template.trim(), options);
25710    if (options.optimize !== false) {
25711        optimize(ast, options);
25712    }
25713    var code = generate(ast, options);
25714    return {
25715        ast: ast,
25716        render: code.render,
25717        staticRenderFns: code.staticRenderFns
25718    };
25719});
25720
25721var _a = createCompiler(baseOptions), compileToFunctions = _a.compileToFunctions;
25722
25723// check whether current browser encodes a char inside attribute values
25724var div;
25725function getShouldDecode(href) {
25726    div = div || document.createElement('div');
25727    div.innerHTML = href ? "<a href=\"\n\"/>" : "<div a=\"\n\"/>";
25728    return div.innerHTML.indexOf('&#10;') > 0;
25729}
25730// #3663: IE encodes newlines inside attribute values while other browsers don't
25731var shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;
25732// #6828: chrome encodes content in a[href]
25733var shouldDecodeNewlinesForHref = inBrowser
25734    ? getShouldDecode(true)
25735    : false;
25736
25737var idToTemplate = cached(function (id) {
25738    var el = query(id);
25739    return el && el.innerHTML;
25740});
25741var mount = Vue.prototype.$mount;
25742Vue.prototype.$mount = function (el, hydrating) {
25743    el = el && query(el);
25744    /* istanbul ignore if */
25745    if (el === document.body || el === document.documentElement) {
25746         true &&
25747            warn$2("Do not mount Vue to <html> or <body> - mount to normal elements instead.");
25748        return this;
25749    }
25750    var options = this.$options;
25751    // resolve template/el and convert to render function
25752    if (!options.render) {
25753        var template = options.template;
25754        if (template) {
25755            if (typeof template === 'string') {
25756                if (template.charAt(0) === '#') {
25757                    template = idToTemplate(template);
25758                    /* istanbul ignore if */
25759                    if ( true && !template) {
25760                        warn$2("Template element not found or is empty: ".concat(options.template), this);
25761                    }
25762                }
25763            }
25764            else if (template.nodeType) {
25765                template = template.innerHTML;
25766            }
25767            else {
25768                if (true) {
25769                    warn$2('invalid template option:' + template, this);
25770                }
25771                return this;
25772            }
25773        }
25774        else if (el) {
25775            // @ts-expect-error
25776            template = getOuterHTML(el);
25777        }
25778        if (template) {
25779            /* istanbul ignore if */
25780            if ( true && config.performance && mark) {
25781                mark('compile');
25782            }
25783            var _a = compileToFunctions(template, {
25784                outputSourceRange: "development" !== 'production',
25785                shouldDecodeNewlines: shouldDecodeNewlines,
25786                shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,
25787                delimiters: options.delimiters,
25788                comments: options.comments
25789            }, this), render = _a.render, staticRenderFns = _a.staticRenderFns;
25790            options.render = render;
25791            options.staticRenderFns = staticRenderFns;
25792            /* istanbul ignore if */
25793            if ( true && config.performance && mark) {
25794                mark('compile end');
25795                measure("vue ".concat(this._name, " compile"), 'compile', 'compile end');
25796            }
25797        }
25798    }
25799    return mount.call(this, el, hydrating);
25800};
25801/**
25802 * Get outerHTML of elements, taking care
25803 * of SVG elements in IE as well.
25804 */
25805function getOuterHTML(el) {
25806    if (el.outerHTML) {
25807        return el.outerHTML;
25808    }
25809    else {
25810        var container = document.createElement('div');
25811        container.appendChild(el.cloneNode(true));
25812        return container.innerHTML;
25813    }
25814}
25815Vue.compile = compileToFunctions;
25816
25817
25818
25819
25820/***/ })
vendor: 5,350 bytes, lines 25820-25923
25820
25821
25822/******/ 	});
25823/************************************************************************/
25824/******/ 	// The module cache
25825/******/ 	var __webpack_module_cache__ = {};
25826/******/ 	
25827/******/ 	// The require function
25828/******/ 	function __webpack_require__(moduleId) {
25829/******/ 		// Check if module is in cache
25830/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
25831/******/ 		if (cachedModule !== undefined) {
25832/******/ 			return cachedModule.exports;
25833/******/ 		}
25834/******/ 		// Create a new module (and put it into the cache)
25835/******/ 		var module = __webpack_module_cache__[moduleId] = {
25836/******/ 			id: moduleId,
25837/******/ 			// no module.loaded needed
25838/******/ 			exports: {}
25839/******/ 		};
25840/******/ 	
25841/******/ 		// Execute the module function
25842/******/ 		__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
25843/******/ 	
25844/******/ 		// Return the exports of the module
25845/******/ 		return module.exports;
25846/******/ 	}
25847/******/ 	
25848/************************************************************************/
25849/******/ 	/* webpack/runtime/compat get default export */
25850/******/ 	(() => {
25851/******/ 		// getDefaultExport function for compatibility with non-harmony modules
25852/******/ 		__webpack_require__.n = (module) => {
25853/******/ 			var getter = module && module.__esModule ?
25854/******/ 				() => (module['default']) :
25855/******/ 				() => (module);
25856/******/ 			__webpack_require__.d(getter, { a: getter });
25857/******/ 			return getter;
25858/******/ 		};
25859/******/ 	})();
25860/******/ 	
25861/******/ 	/* webpack/runtime/define property getters */
25862/******/ 	(() => {
25863/******/ 		// define getter functions for harmony exports
25864/******/ 		__webpack_require__.d = (exports, definition) => {
25865/******/ 			for(var key in definition) {
25866/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
25867/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
25868/******/ 				}
25869/******/ 			}
25870/******/ 		};
25871/******/ 	})();
25872/******/ 	
25873/******/ 	/* webpack/runtime/global */
25874/******/ 	(() => {
25875/******/ 		__webpack_require__.g = (function() {
25876/******/ 			if (typeof globalThis === 'object') return globalThis;
25877/******/ 			try {
25878/******/ 				return this || new Function('return this')();
25879/******/ 			} catch (e) {
25880/******/ 				if (typeof window === 'object') return window;
25881/******/ 			}
25882/******/ 		})();
25883/******/ 	})();
25884/******/ 	
25885/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
25886/******/ 	(() => {
25887/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
25888/******/ 	})();
25889/******/ 	
25890/******/ 	/* webpack/runtime/make namespace object */
25891/******/ 	(() => {
25892/******/ 		// define __esModule on exports
25893/******/ 		__webpack_require__.r = (exports) => {
25894/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
25895/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
25896/******/ 			}
25897/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
25898/******/ 		};
25899/******/ 	})();
25900/******/ 	
25901/******/ 	/* webpack/runtime/nonce */
25902/******/ 	(() => {
25903/******/ 		__webpack_require__.nc = undefined;
25904/******/ 	})();
25905/******/ 	
25906/************************************************************************/
25907var __webpack_exports__ = {};
25908// This entry need to be wrapped in an IIFE because it need to be in strict mode.
25909(() => {
25910"use strict";
25911/*!********************************************************!*\
25912  !*** ./resources/assets/js/museum/sections/contact.js ***!
25913  \********************************************************/
25914__webpack_require__.r(__webpack_exports__);
25915/* harmony import */ var _general_jquery_global_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../general/jquery-global.js */ "./resources/assets/js/general/jquery-global.js");
25916/* harmony import */ var _general_vue_global_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../general/vue-global.js */ "./resources/assets/js/general/vue-global.js");
25917/* harmony import */ var _general_axios_global_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../general/axios-global.js */ "./resources/assets/js/general/axios-global.js");
25918/* harmony import */ var _utilities_load_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utilities/load.js */ "./resources/assets/js/museum/utilities/load.js");
25919/* harmony import */ var _utilities_load_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_utilities_load_js__WEBPACK_IMPORTED_MODULE_3__);
25920/* harmony import */ var vue_spinner_src_ClipLoader_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vue-spinner/src/ClipLoader.vue */ "./node_modules/vue-spinner/src/ClipLoader.vue");
25921function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
25922function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
25923function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string");
25923 return _typeof(key) === "symbol" ? key : String(key); }
25924function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
25925
25926
25927
25928
25929
25930var app = new Vue({
25931  // =========================== #Punto de entrada ======================= //
25932
25933  el: '#contacto',
25934  // =========================== #Components ======================= //
25935
25936  components: {
25937    ClipLoader: vue_spinner_src_ClipLoader_vue__WEBPACK_IMPORTED_MODULE_4__["default"]
25938  },
25939  // =========================== #Datos ================================= //
25940
25941  data: _defineProperty({
25942    loading: false,
25943    success: false,
25944    ciudades: [],
25945    errors: [],
25946    form: {
25947      nombre: null,
25948      apellidos: null,
25949      pais: '',
25950      provincia: '',
25951      email: null,
25952      profesion: '',
25953      mensaje: null,
25954      consentimiento: false,
25955      coleccion: collectionID
25956    },
25957    sending: false
25958  }, "loading", {
25959    color: '#455e7d',
25960    size: '52px'
25961  }),
25962  // =========================== #Computed properties==================== //
25963
25964  // =========================== #Methods =============================== //
25965
25966  methods: {
25967    getCities: function getCities() {
25968      var _this = this;
25969      this.isLoading = true;
25970      var url = routeCities + '/' + this.form.pais.toLowerCase();
25971      window.axios.get(url).then(function (response) {
25972        _this.ciudades = response.data.data;
25973        _this.isLoading = false;
25974      })["catch"](function (response) {
25975        console.log(response);
25976        _this.isLoading = false;
25977      });
25978    },
25979    submitForm: function submitForm(e) {
25980      var _this2 = this;
25981      var formAction = e.target.action;
25982      this.errors = [];
25983      this.success = false;
25984      this.sending = true;
25985      window.axios.post(formAction, this.form).then(function (response) {
25986        _this2.success = true;
25987        _this2.sending = false;
25988        _this2.clearForm();
25989        setTimeout(function () {
25990          this.success = false;
25991        }.bind(_this2), 6000);
25992      })["catch"](function (error) {
25993        _this2.errors = error.response.data.errors;
25994        _this2.sending = false;
25995      });
25996    },
25997    clearForm: function clearForm() {
25998      this.form.nombre = null;
25999      this.form.apellidos = null;
26000      this.form.pais = '';
26001      this.form.provincia = '';
26002      this.form.email = null;
26003      this.form.profesion = '';
26004      this.form.mensaje = null;
26005      this.form.consentimiento = false;
26006    }
26007  },
26008  mounted: function mounted() {}
26009});
26010})();
26011
26012/******/ })()
26013;

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.