PageSourceSearch

https://mayapur.com/js/app.js

js mayapur.com collected 2026-09-24 10:01:31 UTC 1,268,909 bytes, 40,526 lines download raw bytes

1/******/ (() => { // webpackBootstrap
2/******/ 	var __webpack_modules__ = ({
3
vendor: 13,566 bytes, lines 4-292
4/***/ "./node_modules/@popperjs/core/lib/createPopper.js":
5/*!*********************************************************!*\
6  !*** ./node_modules/@popperjs/core/lib/createPopper.js ***!
7  \*********************************************************/
8/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
9
10"use strict";
11__webpack_require__.r(__webpack_exports__);
12/* harmony export */ __webpack_require__.d(__webpack_exports__, {
13/* harmony export */   "popperGenerator": () => (/* binding */ popperGenerator),
14/* harmony export */   "createPopper": () => (/* binding */ createPopper),
15/* harmony export */   "detectOverflow": () => (/* reexport safe */ _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_13__["default"])
16/* harmony export */ });
17/* harmony import */ var _dom_utils_getCompositeRect_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./dom-utils/getCompositeRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js");
18/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./dom-utils/getLayoutRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js");
19/* harmony import */ var _dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dom-utils/listScrollParents.js */ "./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js");
20/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js");
21/* harmony import */ var _dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./dom-utils/getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js");
22/* harmony import */ var _utils_orderModifiers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/orderModifiers.js */ "./node_modules/@popperjs/core/lib/utils/orderModifiers.js");
23/* harmony import */ var _utils_debounce_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./utils/debounce.js */ "./node_modules/@popperjs/core/lib/utils/debounce.js");
24/* harmony import */ var _utils_validateModifiers_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/validateModifiers.js */ "./node_modules/@popperjs/core/lib/utils/validateModifiers.js");
25/* harmony import */ var _utils_uniqueBy_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/uniqueBy.js */ "./node_modules/@popperjs/core/lib/utils/uniqueBy.js");
26/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js");
27/* harmony import */ var _utils_mergeByName_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/mergeByName.js */ "./node_modules/@popperjs/core/lib/utils/mergeByName.js");
28/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./utils/detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js");
29/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dom-utils/instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
30/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45var INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';
46var INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';
47var DEFAULT_OPTIONS = {
48  placement: 'bottom',
49  modifiers: [],
50  strategy: 'absolute'
51};
52
53function areValidElements() {
54  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
55    args[_key] = arguments[_key];
56  }
57
58  return !args.some(function (element) {
59    return !(element && typeof element.getBoundingClientRect === 'function');
60  });
61}
62
63function popperGenerator(generatorOptions) {
64  if (generatorOptions === void 0) {
65    generatorOptions = {};
66  }
67
68  var _generatorOptions = generatorOptions,
69      _generatorOptions$def = _generatorOptions.defaultModifiers,
70      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,
71      _generatorOptions$def2 = _generatorOptions.defaultOptions,
72      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;
73  return function createPopper(reference, popper, options) {
74    if (options === void 0) {
75      options = defaultOptions;
76    }
77
78    var state = {
79      placement: 'bottom',
80      orderedModifiers: [],
81      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),
82      modifiersData: {},
83      elements: {
84        reference: reference,
85        popper: popper
86      },
87      attributes: {},
88      styles: {}
89    };
90    var effectCleanupFns = [];
91    var isDestroyed = false;
92    var instance = {
93      state: state,
94      setOptions: function setOptions(setOptionsAction) {
95        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;
96        cleanupModifierEffects();
97        state.options = Object.assign({}, defaultOptions, state.options, options);
98        state.scrollParents = {
99          reference: (0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(reference) ? (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__["default"])(reference) : reference.contextElement ? (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__["default"])(reference.contextElement) : [],
100          popper: (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__["default"])(popper)
101        }; // Orders the modifiers based on their dependencies and `phase`
102        // properties
103
104        var orderedModifiers = (0,_utils_orderModifiers_js__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_utils_mergeByName_js__WEBPACK_IMPORTED_MODULE_3__["default"])([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers
105
106        state.orderedModifiers = orderedModifiers.filter(function (m) {
107          return m.enabled;
108        }); // Validate the provided modifiers so that the consumer will get warned
109        // if one of the modifiers is invalid for any reason
110
111        if (true) {
112          var modifiers = (0,_utils_uniqueBy_js__WEBPACK_IMPORTED_MODULE_4__["default"])([].concat(orderedModifiers, state.options.modifiers), function (_ref) {
113            var name = _ref.name;
114            return name;
115          });
116          (0,_utils_validateModifiers_js__WEBPACK_IMPORTED_MODULE_5__["default"])(modifiers);
117
118          if ((0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_6__["default"])(state.options.placement) === _enums_js__WEBPACK_IMPORTED_MODULE_7__.auto) {
119            var flipModifier = state.orderedModifiers.find(function (_ref2) {
120              var name = _ref2.name;
121              return name === 'flip';
122            });
123
124            if (!flipModifier) {
125              console.error(['Popper: "auto" placements require the "flip" modifier be', 'present and enabled to work.'].join(' '));
126            }
127          }
128
129          var _getComputedStyle = (0,_dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_8__["default"])(popper),
130              marginTop = _getComputedStyle.marginTop,
131              marginRight = _getComputedStyle.marginRight,
132              marginBottom = _getComputedStyle.marginBottom,
133              marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can
134          // cause bugs with positioning, so we'll warn the consumer
135
136
137          if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {
138            return parseFloat(margin);
139          })) {
140            console.warn(['Popper: CSS "margin" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));
141          }
142        }
143
144        runModifierEffects();
145        return instance.update();
146      },
147      // Sync update – it will always be executed, even if not necessary. This
148      // is useful for low frequency updates where sync behavior simplifies the
149      // logic.
150      // For high frequency updates (e.g. `resize` and `scroll` events), always
151      // prefer the async Popper#update method
152      forceUpdate: function forceUpdate() {
153        if (isDestroyed) {
154          return;
155        }
156
157        var _state$elements = state.elements,
158            reference = _state$elements.reference,
159            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements
160        // anymore
161
162        if (!areValidElements(reference, popper)) {
163          if (true) {
164            console.error(INVALID_ELEMENT_ERROR);
165          }
166
167          return;
168        } // Store the reference and popper rects to be read by modifiers
169
170
171        state.rects = {
172          reference: (0,_dom_utils_getCompositeRect_js__WEBPACK_IMPORTED_MODULE_9__["default"])(reference, (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_10__["default"])(popper), state.options.strategy === 'fixed'),
173          popper: (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_11__["default"])(popper)
174        }; // Modifiers have the ability to reset the current update cycle. The
175        // most common use case for this is the `flip` modifier changing the
176        // placement, which then needs to re-run all the modifiers, because the
177        // logic was previously ran for the previous placement and is therefore
178        // stale/incorrect
179
180        state.reset = false;
181        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier
182        // is filled with the initial data specified by the modifier. This means
183        // it doesn't persist and is fresh on each update.
184        // To ensure persistent data, use `${name}#persistent`
185
186        state.orderedModifiers.forEach(function (modifier) {
187          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);
188        });
189        var __debug_loops__ = 0;
190
191        for (var index = 0; index < state.orderedModifiers.length; index++) {
192          if (true) {
193            __debug_loops__ += 1;
194
195            if (__debug_loops__ > 100) {
196              console.error(INFINITE_LOOP_ERROR);
197              break;
198            }
199          }
200
201          if (state.reset === true) {
202            state.reset = false;
203            index = -1;
204            continue;
205          }
206
207          var _state$orderedModifie = state.orderedModifiers[index],
208              fn = _state$orderedModifie.fn,
209              _state$orderedModifie2 = _state$orderedModifie.options,
210              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,
211              name = _state$orderedModifie.name;
212
213          if (typeof fn === 'function') {
214            state = fn({
215              state: state,
216              options: _options,
217              name: name,
218              instance: instance
219            }) || state;
220          }
221        }
222      },
223      // Async and optimistically optimized update – it will not be executed if
224      // not necessary (debounced to run at most once-per-tick)
225      update: (0,_utils_debounce_js__WEBPACK_IMPORTED_MODULE_12__["default"])(function () {
226        return new Promise(function (resolve) {
227          instance.forceUpdate();
228          resolve(state);
229        });
230      }),
231      destroy: function destroy() {
232        cleanupModifierEffects();
233        isDestroyed = true;
234      }
235    };
236
237    if (!areValidElements(reference, popper)) {
238      if (true) {
239        console.error(INVALID_ELEMENT_ERROR);
240      }
241
242      return instance;
243    }
244
245    instance.setOptions(options).then(function (state) {
246      if (!isDestroyed && options.onFirstUpdate) {
247        options.onFirstUpdate(state);
248      }
249    }); // Modifiers have the ability to execute arbitrary code before the first
250    // update cycle runs. They will be executed in the same order as the update
251    // cycle. This is useful when a modifier adds some persistent data that
252    // other modifiers need to use, but the modifier is run after the dependent
253    // one.
254
255    function runModifierEffects() {
256      state.orderedModifiers.forEach(function (_ref3) {
257        var name = _ref3.name,
258            _ref3$options = _ref3.options,
259            options = _ref3$options === void 0 ? {} : _ref3$options,
260            effect = _ref3.effect;
261
262        if (typeof effect === 'function') {
263          var cleanupFn = effect({
264            state: state,
265            name: name,
266            instance: instance,
267            options: options
268          });
269
270          var noopFn = function noopFn() {};
271
272          effectCleanupFns.push(cleanupFn || noopFn);
273        }
274      });
275    }
276
277    function cleanupModifierEffects() {
278      effectCleanupFns.forEach(function (fn) {
279        return fn();
280      });
281      effectCleanupFns = [];
282    }
283
284    return instance;
285  };
286}
287var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules
288
289
290
291/***/ }),
292
vendor: 1,418 bytes, lines 293-330
293/***/ "./node_modules/@popperjs/core/lib/dom-utils/contains.js":
294/*!***************************************************************!*\
295  !*** ./node_modules/@popperjs/core/lib/dom-utils/contains.js ***!
296  \***************************************************************/
297/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
298
299"use strict";
300__webpack_require__.r(__webpack_exports__);
301/* harmony export */ __webpack_require__.d(__webpack_exports__, {
302/* harmony export */   "default": () => (/* binding */ contains)
303/* harmony export */ });
304/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
305
306function contains(parent, child) {
307  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method
308
309  if (parent.contains(child)) {
310    return true;
311  } // then fallback to custom implementation with Shadow DOM support
312  else if (rootNode && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isShadowRoot)(rootNode)) {
313      var next = child;
314
315      do {
316        if (next && parent.isSameNode(next)) {
317          return true;
318        } // $FlowFixMe[prop-missing]: need a better way to handle this...
319
320
321        next = next.parentNode || next.host;
322      } while (next);
323    } // Give up, the result is false
324
325
326  return false;
327}
328
329/***/ }),
330
vendor: 2,033 bytes, lines 331-382
331/***/ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js":
332/*!****************************************************************************!*\
333  !*** ./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js ***!
334  \****************************************************************************/
335/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
336
337"use strict";
338__webpack_require__.r(__webpack_exports__);
339/* harmony export */ __webpack_require__.d(__webpack_exports__, {
340/* harmony export */   "default": () => (/* binding */ getBoundingClientRect)
341/* harmony export */ });
342/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
343/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js");
344
345
346function getBoundingClientRect(element, includeScale) {
347  if (includeScale === void 0) {
348    includeScale = false;
349  }
350
351  var rect = element.getBoundingClientRect();
352  var scaleX = 1;
353  var scaleY = 1;
354
355  if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) && includeScale) {
356    var offsetHeight = element.offsetHeight;
357    var offsetWidth = element.offsetWidth; // Do not attempt to divide by 0, otherwise we get `Infinity` as scale
358    // Fallback to 1 in case both values are `0`
359
360    if (offsetWidth > 0) {
361      scaleX = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_1__.round)(rect.width) / offsetWidth || 1;
362    }
363
364    if (offsetHeight > 0) {
365      scaleY = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_1__.round)(rect.height) / offsetHeight || 1;
366    }
367  }
368
369  return {
370    width: rect.width / scaleX,
371    height: rect.height / scaleY,
372    top: rect.top / scaleY,
373    right: rect.right / scaleX,
374    bottom: rect.bottom / scaleY,
375    left: rect.left / scaleX,
376    x: rect.left / scaleX,
377    y: rect.top / scaleY
378  };
379}
380
381/***/ }),
382
vendor: 6,817 bytes, lines 383-480
383/***/ "./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js":
384/*!**********************************************************************!*\
385  !*** ./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js ***!
386  \**********************************************************************/
387/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
388
389"use strict";
390__webpack_require__.r(__webpack_exports__);
391/* harmony export */ __webpack_require__.d(__webpack_exports__, {
392/* harmony export */   "default": () => (/* binding */ getClippingRect)
393/* harmony export */ });
394/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
395/* harmony import */ var _getViewportRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getViewportRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js");
396/* harmony import */ var _getDocumentRect_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getDocumentRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js");
397/* harmony import */ var _listScrollParents_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./listScrollParents.js */ "./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js");
398/* harmony import */ var _getOffsetParent_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js");
399/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");
400/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js");
401/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
402/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js");
403/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js");
404/* harmony import */ var _contains_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./contains.js */ "./node_modules/@popperjs/core/lib/dom-utils/contains.js");
405/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js");
406/* harmony import */ var _utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/rectToClientRect.js */ "./node_modules/@popperjs/core/lib/utils/rectToClientRect.js");
407/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js");
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423function getInnerBoundingClientRect(element) {
424  var rect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element);
425  rect.top = rect.top + element.clientTop;
426  rect.left = rect.left + element.clientLeft;
427  rect.bottom = rect.top + element.clientHeight;
428  rect.right = rect.left + element.clientWidth;
429  rect.width = element.clientWidth;
430  rect.height = element.clientHeight;
431  rect.x = rect.left;
432  rect.y = rect.top;
433  return rect;
434}
435
436function getClientRectFromMixedType(element, clippingParent) {
437  return clippingParent === _enums_js__WEBPACK_IMPORTED_MODULE_1__.viewport ? (0,_utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_getViewportRect_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element)) : (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clippingParent) ? getInnerBoundingClientRect(clippingParent) : (0,_utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_getDocumentRect_js__WEBPACK_IMPORTED_MODULE_5__["default"])((0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_6__["default"])(element)));
438} // A "clipping parent" is an overflowable container with the characteristic of
439// clipping (or hiding) overflowing elements with a position different from
440// `initial`
441
442
443function getClippingParents(element) {
444  var clippingParents = (0,_listScrollParents_js__WEBPACK_IMPORTED_MODULE_7__["default"])((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_8__["default"])(element));
445  var canEscapeClipping = ['absolute', 'fixed'].indexOf((0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_9__["default"])(element).position) >= 0;
446  var clipperElement = canEscapeClipping && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isHTMLElement)(element) ? (0,_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_10__["default"])(element) : element;
447
448  if (!(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clipperElement)) {
449    return [];
450  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414
451
452
453  return clippingParents.filter(function (clippingParent) {
454    return (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clippingParent) && (0,_contains_js__WEBPACK_IMPORTED_MODULE_11__["default"])(clippingParent, clipperElement) && (0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_12__["default"])(clippingParent) !== 'body';
455  });
456} // Gets the maximum area that the element is visible in due to any number of
457// clipping parents
458
459
460function getClippingRect(element, boundary, rootBoundary) {
461  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);
462  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);
463  var firstClippingParent = clippingParents[0];
464  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {
465    var rect = getClientRectFromMixedType(element, clippingParent);
466    accRect.top = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.max)(rect.top, accRect.top);
467    accRect.right = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.min)(rect.right, accRect.right);
468    accRect.bottom = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.min)(rect.bottom, accRect.bottom);
469    accRect.left = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.max)(rect.left, accRect.left);
470    return accRect;
471  }, getClientRectFromMixedType(element, firstClippingParent));
472  clippingRect.width = clippingRect.right - clippingRect.left;
473  clippingRect.height = clippingRect.bottom - clippingRect.top;
474  clippingRect.x = clippingRect.left;
475  clippingRect.y = clippingRect.top;
476  return clippingRect;
477}
478
479/***/ }),
480
vendor: 4,343 bytes, lines 481-560
481/***/ "./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js":
482/*!***********************************************************************!*\
483  !*** ./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js ***!
484  \***********************************************************************/
485/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
486
487"use strict";
488__webpack_require__.r(__webpack_exports__);
489/* harmony export */ __webpack_require__.d(__webpack_exports__, {
490/* harmony export */   "default": () => (/* binding */ getCompositeRect)
491/* harmony export */ });
492/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js");
493/* harmony import */ var _getNodeScroll_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./getNodeScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js");
494/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js");
495/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
496/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js");
497/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");
498/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./isScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js");
499/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js");
500
501
502
503
504
505
506
507
508
509function isElementScaled(element) {
510  var rect = element.getBoundingClientRect();
511  var scaleX = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(rect.width) / element.offsetWidth || 1;
512  var scaleY = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(rect.height) / element.offsetHeight || 1;
513  return scaleX !== 1 || scaleY !== 1;
514} // Returns the composite rect of an element relative to its offsetParent.
515// Composite means it takes into account transforms as well as layout.
516
517
518function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
519  if (isFixed === void 0) {
520    isFixed = false;
521  }
522
523  var isOffsetParentAnElement = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent);
524  var offsetParentIsScaled = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent) && isElementScaled(offsetParent);
525  var documentElement = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(offsetParent);
526  var rect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__["default"])(elementOrVirtualElement, offsetParentIsScaled);
527  var scroll = {
528    scrollLeft: 0,
529    scrollTop: 0
530  };
531  var offsets = {
532    x: 0,
533    y: 0
534  };
535
536  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
537    if ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__["default"])(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078
538    (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(documentElement)) {
539      scroll = (0,_getNodeScroll_js__WEBPACK_IMPORTED_MODULE_6__["default"])(offsetParent);
540    }
541
542    if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent)) {
543      offsets = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__["default"])(offsetParent, true);
544      offsets.x += offsetParent.clientLeft;
545      offsets.y += offsetParent.clientTop;
546    } else if (documentElement) {
547      offsets.x = (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_7__["default"])(documentElement);
548    }
549  }
550
551  return {
552    x: rect.left + scroll.scrollLeft - offsets.x,
553    y: rect.top + scroll.scrollTop - offsets.y,
554    width: rect.width,
555    height: rect.height
556  };
557}
558
559/***/ }),
560
vendor: 934 bytes, lines 561-579
561/***/ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js":
562/*!***********************************************************************!*\
563  !*** ./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js ***!
564  \***********************************************************************/
565/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
566
567"use strict";
568__webpack_require__.r(__webpack_exports__);
569/* harmony export */ __webpack_require__.d(__webpack_exports__, {
570/* harmony export */   "default": () => (/* binding */ getComputedStyle)
571/* harmony export */ });
572/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");
573
574function getComputedStyle(element) {
575  return (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element).getComputedStyle(element);
576}
577
578/***/ }),
579
vendor: 1,105 bytes, lines 580-600
580/***/ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js":
581/*!*************************************************************************!*\
582  !*** ./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js ***!
583  \*************************************************************************/
584/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
585
586"use strict";
587__webpack_require__.r(__webpack_exports__);
588/* harmony export */ __webpack_require__.d(__webpack_exports__, {
589/* harmony export */   "default": () => (/* binding */ getDocumentElement)
590/* harmony export */ });
591/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
592
593function getDocumentElement(element) {
594  // $FlowFixMe[incompatible-return]: assume body is always available
595  return (((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]
596  element.document) || window.document).documentElement;
597}
598
599/***/ }),
600
vendor: 2,858 bytes, lines 601-648
601/***/ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js":
602/*!**********************************************************************!*\
603  !*** ./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js ***!
604  \**********************************************************************/
605/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
606
607"use strict";
608__webpack_require__.r(__webpack_exports__);
609/* harmony export */ __webpack_require__.d(__webpack_exports__, {
610/* harmony export */   "default": () => (/* binding */ getDocumentRect)
611/* harmony export */ });
612/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");
613/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js");
614/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js");
615/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getWindowScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js");
616/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js");
617
618
619
620
621 // Gets the entire size of the scrollable document area, even extending outside
622// of the `<html>` and `<body>` rect bounds if horizontally scrollable
623
624function getDocumentRect(element) {
625  var _element$ownerDocumen;
626
627  var html = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element);
628  var winScroll = (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element);
629  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;
630  var width = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);
631  var height = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);
632  var x = -winScroll.scrollLeft + (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element);
633  var y = -winScroll.scrollTop;
634
635  if ((0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_4__["default"])(body || html).direction === 'rtl') {
636    x += (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.clientWidth, body ? body.clientWidth : 0) - width;
637  }
638
639  return {
640    width: width,
641    height: height,
642    x: x,
643    y: y
644  };
645}
646
647/***/ }),
648
vendor: 766 bytes, lines 649-668
649/***/ "./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js":
650/*!***************************************************************************!*\
651  !*** ./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js ***!
652  \***************************************************************************/
653/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
654
655"use strict";
656__webpack_require__.r(__webpack_exports__);
657/* harmony export */ __webpack_require__.d(__webpack_exports__, {
658/* harmony export */   "default": () => (/* binding */ getHTMLElementScroll)
659/* harmony export */ });
660function getHTMLElementScroll(element) {
661  return {
662    scrollLeft: element.scrollLeft,
663    scrollTop: element.scrollTop
664  };
665}
666
667/***/ }),
668
vendor: 1,550 bytes, lines 669-708
669/***/ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js":
670/*!********************************************************************!*\
671  !*** ./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js ***!
672  \********************************************************************/
673/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
674
675"use strict";
676__webpack_require__.r(__webpack_exports__);
677/* harmony export */ __webpack_require__.d(__webpack_exports__, {
678/* harmony export */   "default": () => (/* binding */ getLayoutRect)
679/* harmony export */ });
680/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js");
681 // Returns the layout rect of an element relative to its offsetParent. Layout
682// means it doesn't take into account transforms.
683
684function getLayoutRect(element) {
685  var clientRect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element); // Use the clientRect sizes if it's not been transformed.
686  // Fixes https://github.com/popperjs/popper-core/issues/1223
687
688  var width = element.offsetWidth;
689  var height = element.offsetHeight;
690
691  if (Math.abs(clientRect.width - width) <= 1) {
692    width = clientRect.width;
693  }
694
695  if (Math.abs(clientRect.height - height) <= 1) {
696    height = clientRect.height;
697  }
698
699  return {
700    x: element.offsetLeft,
701    y: element.offsetTop,
702    width: width,
703    height: height
704  };
705}
706
707/***/ }),
708
vendor: 693 bytes, lines 709-725
709/***/ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js":
710/*!******************************************************************!*\
711  !*** ./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js ***!
712  \******************************************************************/
713/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
714
715"use strict";
716__webpack_require__.r(__webpack_exports__);
717/* harmony export */ __webpack_require__.d(__webpack_exports__, {
718/* harmony export */   "default": () => (/* binding */ getNodeName)
719/* harmony export */ });
720function getNodeName(element) {
721  return element ? (element.nodeName || '').toLowerCase() : null;
722}
723
724/***/ }),
725
vendor: 1,724 bytes, lines 726-754
726/***/ "./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js":
727/*!********************************************************************!*\
728  !*** ./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js ***!
729  \********************************************************************/
730/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
731
732"use strict";
733__webpack_require__.r(__webpack_exports__);
734/* harmony export */ __webpack_require__.d(__webpack_exports__, {
735/* harmony export */   "default": () => (/* binding */ getNodeScroll)
736/* harmony export */ });
737/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindowScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js");
738/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");
739/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
740/* harmony import */ var _getHTMLElementScroll_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getHTMLElementScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js");
741
742
743
744
745function getNodeScroll(node) {
746  if (node === (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node) || !(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(node)) {
747    return (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__["default"])(node);
748  } else {
749    return (0,_getHTMLElementScroll_js__WEBPACK_IMPORTED_MODULE_3__["default"])(node);
750  }
751}
752
753/***/ }),
754
vendor: 4,605 bytes, lines 755-838
755/***/ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js":
756/*!**********************************************************************!*\
757  !*** ./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js ***!
758  \**********************************************************************/
759/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
760
761"use strict";
762__webpack_require__.r(__webpack_exports__);
763/* harmony export */ __webpack_require__.d(__webpack_exports__, {
764/* harmony export */   "default": () => (/* binding */ getOffsetParent)
765/* harmony export */ });
766/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");
767/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js");
768/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js");
769/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
770/* harmony import */ var _isTableElement_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./isTableElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js");
771/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js");
772
773
774
775
776
777
778
779function getTrueOffsetParent(element) {
780  if (!(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || // https://github.com/popperjs/popper-core/issues/837
781  (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element).position === 'fixed') {
782    return null;
783  }
784
785  return element.offsetParent;
786} // `.offsetParent` reports `null` for fixed elements, while absolute elements
787// return the containing block
788
789
790function getContainingBlock(element) {
791  var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;
792  var isIE = navigator.userAgent.indexOf('Trident') !== -1;
793
794  if (isIE && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element)) {
795    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport
796    var elementCss = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element);
797
798    if (elementCss.position === 'fixed') {
799      return null;
800    }
801  }
802
803  var currentNode = (0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element);
804
805  while ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(currentNode) && ['html', 'body'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_3__["default"])(currentNode)) < 0) {
806    var css = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(currentNode); // This is non-exhaustive but covers the most common CSS properties that
807    // create a containing block.
808    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
809
810    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {
811      return currentNode;
812    } else {
813      currentNode = currentNode.parentNode;
814    }
815  }
816
817  return null;
818} // Gets the closest ancestor positioned element. Handles some edge cases,
819// such as table ancestors and cross browser bugs.
820
821
822function getOffsetParent(element) {
823  var window = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element);
824  var offsetParent = getTrueOffsetParent(element);
825
826  while (offsetParent && (0,_isTableElement_js__WEBPACK_IMPORTED_MODULE_5__["default"])(offsetParent) && (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(offsetParent).position === 'static') {
827    offsetParent = getTrueOffsetParent(offsetParent);
828  }
829
830  if (offsetParent && ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_3__["default"])(offsetParent) === 'html' || (0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_3__["default"])(offsetParent) === 'body' && (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(offsetParent).position === 'static')) {
831    return window;
832  }
833
834  return offsetParent || getContainingBlock(element) || window;
835}
836
837/***/ }),
838
vendor: 1,900 bytes, lines 839-874
839/***/ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js":
840/*!********************************************************************!*\
841  !*** ./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js ***!
842  \********************************************************************/
843/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
844
845"use strict";
846__webpack_require__.r(__webpack_exports__);
847/* harmony export */ __webpack_require__.d(__webpack_exports__, {
848/* harmony export */   "default": () => (/* binding */ getParentNode)
849/* harmony export */ });
850/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js");
851/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");
852/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
853
854
855
856function getParentNode(element) {
857  if ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element) === 'html') {
858    return element;
859  }
860
861  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle
862    // $FlowFixMe[incompatible-return]
863    // $FlowFixMe[prop-missing]
864    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node
865    element.parentNode || ( // DOM Element detected
866    (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isShadowRoot)(element) ? element.host : null) || // ShadowRoot detected
867    // $FlowFixMe[incompatible-call]: HTMLElement is a Node
868    (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element) // fallback
869
870  );
871}
872
873/***/ }),
874
vendor: 1,878 bytes, lines 875-908
875/***/ "./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js":
876/*!**********************************************************************!*\
877  !*** ./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js ***!
878  \**********************************************************************/
879/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
880
881"use strict";
882__webpack_require__.r(__webpack_exports__);
883/* harmony export */ __webpack_require__.d(__webpack_exports__, {
884/* harmony export */   "default": () => (/* binding */ getScrollParent)
885/* harmony export */ });
886/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js");
887/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js");
888/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js");
889/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
890
891
892
893
894function getScrollParent(node) {
895  if (['html', 'body', '#document'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node)) >= 0) {
896    // $FlowFixMe[incompatible-return]: assume body is always available
897    return node.ownerDocument.body;
898  }
899
900  if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(node) && (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__["default"])(node)) {
901    return node;
902  }
903
904  return getScrollParent((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__["default"])(node));
905}
906
907/***/ }),
908
vendor: 2,757 bytes, lines 909-965
909/***/ "./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js":
910/*!**********************************************************************!*\
911  !*** ./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js ***!
912  \**********************************************************************/
913/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
914
915"use strict";
916__webpack_require__.r(__webpack_exports__);
917/* harmony export */ __webpack_require__.d(__webpack_exports__, {
918/* harmony export */   "default": () => (/* binding */ getViewportRect)
919/* harmony export */ });
920/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");
921/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");
922/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js");
923
924
925
926function getViewportRect(element) {
927  var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element);
928  var html = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element);
929  var visualViewport = win.visualViewport;
930  var width = html.clientWidth;
931  var height = html.clientHeight;
932  var x = 0;
933  var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper
934  // can be obscured underneath it.
935  // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even
936  // if it isn't open, so if this isn't available, the popper will be detected
937  // to overflow the bottom of the screen too early.
938
939  if (visualViewport) {
940    width = visualViewport.width;
941    height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)
942    // In Chrome, it returns a value very close to 0 (+/-) but contains rounding
943    // errors due to floating point numbers, so we need to check precision.
944    // Safari returns a number <= 0, usually < -1 when pinch-zoomed
945    // Feature detection fails in mobile emulation mode in Chrome.
946    // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <
947    // 0.001
948    // Fallback here: "Not Safari" userAgent
949
950    if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {
951      x = visualViewport.offsetLeft;
952      y = visualViewport.offsetTop;
953    }
954  }
955
956  return {
957    width: width,
958    height: height,
959    x: x + (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element),
960    y: y
961  };
962}
963
964/***/ }),
965
vendor: 842 bytes, lines 966-991
966/***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js":
967/*!****************************************************************!*\
968  !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindow.js ***!
969  \****************************************************************/
970/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
971
972"use strict";
973__webpack_require__.r(__webpack_exports__);
974/* harmony export */ __webpack_require__.d(__webpack_exports__, {
975/* harmony export */   "default": () => (/* binding */ getWindow)
976/* harmony export */ });
977function getWindow(node) {
978  if (node == null) {
979    return window;
980  }
981
982  if (node.toString() !== '[object Window]') {
983    var ownerDocument = node.ownerDocument;
984    return ownerDocument ? ownerDocument.defaultView || window : window;
985  }
986
987  return node;
988}
989
990/***/ }),
991
vendor: 1,039 bytes, lines 992-1016
992/***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js":
993/*!**********************************************************************!*\
994  !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js ***!
995  \**********************************************************************/
996/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
997
998"use strict";
999__webpack_require__.r(__webpack_exports__);
1000/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1001/* harmony export */   "default": () => (/* binding */ getWindowScroll)
1002/* harmony export */ });
1003/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");
1004
1005function getWindowScroll(node) {
1006  var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node);
1007  var scrollLeft = win.pageXOffset;
1008  var scrollTop = win.pageYOffset;
1009  return {
1010    scrollLeft: scrollLeft,
1011    scrollTop: scrollTop
1012  };
1013}
1014
1015/***/ }),
1016
vendor: 1,913 bytes, lines 1017-1046
1017/***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js":
1018/*!**************************************************************************!*\
1019  !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js ***!
1020  \**************************************************************************/
1021/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1022
1023"use strict";
1024__webpack_require__.r(__webpack_exports__);
1025/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1026/* harmony export */   "default": () => (/* binding */ getWindowScrollBarX)
1027/* harmony export */ });
1028/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js");
1029/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");
1030/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindowScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js");
1031
1032
1033
1034function getWindowScrollBarX(element) {
1035  // If <html> has a CSS width greater than the viewport, then this will be
1036  // incorrect for RTL.
1037  // Popper 1 is broken in this case and never had a bug report so let's assume
1038  // it's not an issue. I don't think anyone ever specifies width on <html>
1039  // anyway.
1040  // Browsers where the left scrollbar doesn't cause an issue report `0` for
1041  // this (e.g. Edge 2019, IE11, Safari)
1042  return (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element)).left + (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element).scrollLeft;
1043}
1044
1045/***/ }),
1046
vendor: 1,591 bytes, lines 1047-1086
1047/***/ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js":
1048/*!*****************************************************************!*\
1049  !*** ./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js ***!
1050  \*****************************************************************/
1051/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1052
1053"use strict";
1054__webpack_require__.r(__webpack_exports__);
1055/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1056/* harmony export */   "isElement": () => (/* binding */ isElement),
1057/* harmony export */   "isHTMLElement": () => (/* binding */ isHTMLElement),
1058/* harmony export */   "isShadowRoot": () => (/* binding */ isShadowRoot)
1059/* harmony export */ });
1060/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");
1061
1062
1063function isElement(node) {
1064  var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node).Element;
1065  return node instanceof OwnElement || node instanceof Element;
1066}
1067
1068function isHTMLElement(node) {
1069  var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node).HTMLElement;
1070  return node instanceof OwnElement || node instanceof HTMLElement;
1071}
1072
1073function isShadowRoot(node) {
1074  // IE 11 has no ShadowRoot
1075  if (typeof ShadowRoot === 'undefined') {
1076    return false;
1077  }
1078
1079  var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node).ShadowRoot;
1080  return node instanceof OwnElement || node instanceof ShadowRoot;
1081}
1082
1083
1084
1085/***/ }),
1086
vendor: 1,223 bytes, lines 1087-1111
1087/***/ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js":
1088/*!*********************************************************************!*\
1089  !*** ./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js ***!
1090  \*********************************************************************/
1091/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1092
1093"use strict";
1094__webpack_require__.r(__webpack_exports__);
1095/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1096/* harmony export */   "default": () => (/* binding */ isScrollParent)
1097/* harmony export */ });
1098/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js");
1099
1100function isScrollParent(element) {
1101  // Firefox wants us to check `-x` and `-y` variations as well
1102  var _getComputedStyle = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element),
1103      overflow = _getComputedStyle.overflow,
1104      overflowX = _getComputedStyle.overflowX,
1105      overflowY = _getComputedStyle.overflowY;
1106
1107  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);
1108}
1109
1110/***/ }),
1111
vendor: 940 bytes, lines 1112-1130
1112/***/ "./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js":
1113/*!*********************************************************************!*\
1114  !*** ./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js ***!
1115  \*********************************************************************/
1116/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1117
1118"use strict";
1119__webpack_require__.r(__webpack_exports__);
1120/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1121/* harmony export */   "default": () => (/* binding */ isTableElement)
1122/* harmony export */ });
1123/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js");
1124
1125function isTableElement(element) {
1126  return ['table', 'td', 'th'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element)) >= 0;
1127}
1128
1129/***/ }),
1130
vendor: 2,529 bytes, lines 1131-1174
1131/***/ "./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js":
1132/*!************************************************************************!*\
1133  !*** ./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js ***!
1134  \************************************************************************/
1135/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1136
1137"use strict";
1138__webpack_require__.r(__webpack_exports__);
1139/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1140/* harmony export */   "default": () => (/* binding */ listScrollParents)
1141/* harmony export */ });
1142/* harmony import */ var _getScrollParent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js");
1143/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js");
1144/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");
1145/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js");
1146
1147
1148
1149
1150/*
1151given a DOM element, return the list of all scroll parents, up the list of ancesors
1152until we get to the top window object. This list is what we attach scroll listeners
1153to, because if any of these parent elements scroll, we'll need to re-calculate the
1154reference element's position.
1155*/
1156
1157function listScrollParents(element, list) {
1158  var _element$ownerDocumen;
1159
1160  if (list === void 0) {
1161    list = [];
1162  }
1163
1164  var scrollParent = (0,_getScrollParent_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element);
1165  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);
1166  var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scrollParent);
1167  var target = isBody ? [win].concat(win.visualViewport || [], (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__["default"])(scrollParent) ? scrollParent : []) : scrollParent;
1168  var updatedList = list.concat(target);
1169  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here
1170  updatedList.concat(listScrollParents((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__["default"])(target)));
1171}
1172
1173/***/ }),
1174
vendor: 3,246 bytes, lines 1175-1242
1175/***/ "./node_modules/@popperjs/core/lib/enums.js":
1176/*!**************************************************!*\
1177  !*** ./node_modules/@popperjs/core/lib/enums.js ***!
1178  \**************************************************/
1179/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1180
1181"use strict";
1182__webpack_require__.r(__webpack_exports__);
1183/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1184/* harmony export */   "top": () => (/* binding */ top),
1185/* harmony export */   "bottom": () => (/* binding */ bottom),
1186/* harmony export */   "right": () => (/* binding */ right),
1187/* harmony export */   "left": () => (/* binding */ left),
1188/* harmony export */   "auto": () => (/* binding */ auto),
1189/* harmony export */   "basePlacements": () => (/* binding */ basePlacements),
1190/* harmony export */   "start": () => (/* binding */ start),
1191/* harmony export */   "end": () => (/* binding */ end),
1192/* harmony export */   "clippingParents": () => (/* binding */ clippingParents),
1193/* harmony export */   "viewport": () => (/* binding */ viewport),
1194/* harmony export */   "popper": () => (/* binding */ popper),
1195/* harmony export */   "reference": () => (/* binding */ reference),
1196/* harmony export */   "variationPlacements": () => (/* binding */ variationPlacements),
1197/* harmony export */   "placements": () => (/* binding */ placements),
1198/* harmony export */   "beforeRead": () => (/* binding */ beforeRead),
1199/* harmony export */   "read": () => (/* binding */ read),
1200/* harmony export */   "afterRead": () => (/* binding */ afterRead),
1201/* harmony export */   "beforeMain": () => (/* binding */ beforeMain),
1202/* harmony export */   "main": () => (/* binding */ main),
1203/* harmony export */   "afterMain": () => (/* binding */ afterMain),
1204/* harmony export */   "beforeWrite": () => (/* binding */ beforeWrite),
1205/* harmony export */   "write": () => (/* binding */ write),
1206/* harmony export */   "afterWrite": () => (/* binding */ afterWrite),
1207/* harmony export */   "modifierPhases": () => (/* binding */ modifierPhases)
1208/* harmony export */ });
1209var top = 'top';
1210var bottom = 'bottom';
1211var right = 'right';
1212var left = 'left';
1213var auto = 'auto';
1214var basePlacements = [top, bottom, right, left];
1215var start = 'start';
1216var end = 'end';
1217var clippingParents = 'clippingParents';
1218var viewport = 'viewport';
1219var popper = 'popper';
1220var reference = 'reference';
1221var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {
1222  return acc.concat([placement + "-" + start, placement + "-" + end]);
1223}, []);
1224var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {
1225  return acc.concat([placement, placement + "-" + start, placement + "-" + end]);
1226}, []); // modifiers that need to read the DOM
1227
1228var beforeRead = 'beforeRead';
1229var read = 'read';
1230var afterRead = 'afterRead'; // pure-logic modifiers
1231
1232var beforeMain = 'beforeMain';
1233var main = 'main';
1234var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)
1235
1236var beforeWrite = 'beforeWrite';
1237var write = 'write';
1238var afterWrite = 'afterWrite';
1239var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];
1240
1241/***/ }),
1242
vendor: 6,098 bytes, lines 1243-1307
1243/***/ "./node_modules/@popperjs/core/lib/index.js":
1244/*!**************************************************!*\
1245  !*** ./node_modules/@popperjs/core/lib/index.js ***!
1246  \**************************************************/
1247/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1248
1249"use strict";
1250__webpack_require__.r(__webpack_exports__);
1251/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1252/* harmony export */   "afterMain": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.afterMain),
1253/* harmony export */   "afterRead": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.afterRead),
1254/* harmony export */   "afterWrite": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.afterWrite),
1255/* harmony export */   "auto": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.auto),
1256/* harmony export */   "basePlacements": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.basePlacements),
1257/* harmony export */   "beforeMain": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.beforeMain),
1258/* harmony export */   "beforeRead": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.beforeRead),
1259/* harmony export */   "beforeWrite": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.beforeWrite),
1260/* harmony export */   "bottom": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom),
1261/* harmony export */   "clippingParents": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.clippingParents),
1262/* harmony export */   "end": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.end),
1263/* harmony export */   "left": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.left),
1264/* harmony export */   "main": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.main),
1265/* harmony export */   "modifierPhases": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.modifierPhases),
1266/* harmony export */   "placements": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.placements),
1267/* harmony export */   "popper": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper),
1268/* harmony export */   "read": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.read),
1269/* harmony export */   "reference": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.reference),
1270/* harmony export */   "right": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.right),
1271/* harmony export */   "start": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.start),
1272/* harmony export */   "top": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.top),
1273/* harmony export */   "variationPlacements": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.variationPlacements),
1274/* harmony export */   "viewport": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.viewport),
1275/* harmony export */   "write": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.write),
1276/* harmony export */   "applyStyles": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.applyStyles),
1277/* harmony export */   "arrow": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.arrow),
1278/* harmony export */   "computeStyles": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.computeStyles),
1279/* harmony export */   "eventListeners": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.eventListeners),
1280/* harmony export */   "flip": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.flip),
1281/* harmony export */   "hide": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.hide),
1282/* harmony export */   "offset": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.offset),
1283/* harmony export */   "popperOffsets": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.popperOffsets),
1284/* harmony export */   "preventOverflow": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.preventOverflow),
1285/* harmony export */   "popperGenerator": () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_2__.popperGenerator),
1286/* harmony export */   "detectOverflow": () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_3__["default"]),
1287/* harmony export */   "createPopperBase": () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_2__.createPopper),
1288/* harmony export */   "createPopper": () => (/* reexport safe */ _popper_js__WEBPACK_IMPORTED_MODULE_4__.createPopper),
1289/* harmony export */   "createPopperLite": () => (/* reexport safe */ _popper_lite_js__WEBPACK_IMPORTED_MODULE_5__.createPopper)
1290/* harmony export */ });
1291/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
1292/* harmony import */ var _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/index.js */ "./node_modules/@popperjs/core/lib/modifiers/index.js");
1293/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/createPopper.js");
1294/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js");
1295/* harmony import */ var _popper_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./popper.js */ "./node_modules/@popperjs/core/lib/popper.js");
1296/* harmony import */ var _popper_lite_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./popper-lite.js */ "./node_modules/@popperjs/core/lib/popper-lite.js");
1297
1298 // eslint-disable-next-line import/no-unused-modules
1299
1300 // eslint-disable-next-line import/no-unused-modules
1301
1302 // eslint-disable-next-line import/no-unused-modules
1303
1304
1305
1306/***/ }),
1307
vendor: 3,689 bytes, lines 1308-1407
1308/***/ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js":
1309/*!******************************************************************!*\
1310  !*** ./node_modules/@popperjs/core/lib/modifiers/applyStyles.js ***!
1311  \******************************************************************/
1312/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1313
1314"use strict";
1315__webpack_require__.r(__webpack_exports__);
1316/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1317/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
1318/* harmony export */ });
1319/* harmony import */ var _dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom-utils/getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js");
1320/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-utils/instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
1321
1322 // This modifier takes the styles prepared by the `computeStyles` modifier
1323// and applies them to the HTMLElements such as popper and arrow
1324
1325function applyStyles(_ref) {
1326  var state = _ref.state;
1327  Object.keys(state.elements).forEach(function (name) {
1328    var style = state.styles[name] || {};
1329    var attributes = state.attributes[name] || {};
1330    var element = state.elements[name]; // arrow is optional + virtual elements
1331
1332    if (!(0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || !(0,_dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element)) {
1333      return;
1334    } // Flow doesn't support to extend this property, but it's the most
1335    // effective way to apply styles to an HTMLElement
1336    // $FlowFixMe[cannot-write]
1337
1338
1339    Object.assign(element.style, style);
1340    Object.keys(attributes).forEach(function (name) {
1341      var value = attributes[name];
1342
1343      if (value === false) {
1344        element.removeAttribute(name);
1345      } else {
1346        element.setAttribute(name, value === true ? '' : value);
1347      }
1348    });
1349  });
1350}
1351
1352function effect(_ref2) {
1353  var state = _ref2.state;
1354  var initialStyles = {
1355    popper: {
1356      position: state.options.strategy,
1357      left: '0',
1358      top: '0',
1359      margin: '0'
1360    },
1361    arrow: {
1362      position: 'absolute'
1363    },
1364    reference: {}
1365  };
1366  Object.assign(state.elements.popper.style, initialStyles.popper);
1367  state.styles = initialStyles;
1368
1369  if (state.elements.arrow) {
1370    Object.assign(state.elements.arrow.style, initialStyles.arrow);
1371  }
1372
1373  return function () {
1374    Object.keys(state.elements).forEach(function (name) {
1375      var element = state.elements[name];
1376      var attributes = state.attributes[name] || {};
1377      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them
1378
1379      var style = styleProperties.reduce(function (style, property) {
1380        style[property] = '';
1381        return style;
1382      }, {}); // arrow is optional + virtual elements
1383
1384      if (!(0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || !(0,_dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element)) {
1385        return;
1386      }
1387
1388      Object.assign(element.style, style);
1389      Object.keys(attributes).forEach(function (attribute) {
1390        element.removeAttribute(attribute);
1391      });
1392    });
1393  };
1394} // eslint-disable-next-line import/no-unused-modules
1395
1396
1397/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
1398  name: 'applyStyles',
1399  enabled: true,
1400  phase: 'write',
1401  fn: applyStyles,
1402  effect: effect,
1403  requires: ['computeStyles']
1404});
1405
1406/***/ }),
1407
vendor: 6,639 bytes, lines 1408-1532
1408/***/ "./node_modules/@popperjs/core/lib/modifiers/arrow.js":
1409/*!************************************************************!*\
1410  !*** ./node_modules/@popperjs/core/lib/modifiers/arrow.js ***!
1411  \************************************************************/
1412/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1413
1414"use strict";
1415__webpack_require__.r(__webpack_exports__);
1416/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1417/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
1418/* harmony export */ });
1419/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js");
1420/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getLayoutRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js");
1421/* harmony import */ var _dom_utils_contains_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../dom-utils/contains.js */ "./node_modules/@popperjs/core/lib/dom-utils/contains.js");
1422/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js");
1423/* harmony import */ var _utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/getMainAxisFromPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js");
1424/* harmony import */ var _utils_within_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/within.js */ "./node_modules/@popperjs/core/lib/utils/within.js");
1425/* harmony import */ var _utils_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/mergePaddingObject.js */ "./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js");
1426/* harmony import */ var _utils_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/expandToHashMap.js */ "./node_modules/@popperjs/core/lib/utils/expandToHashMap.js");
1427/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
1428/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../dom-utils/instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438 // eslint-disable-next-line import/no-unused-modules
1439
1440var toPaddingObject = function toPaddingObject(padding, state) {
1441  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {
1442    placement: state.placement
1443  })) : padding;
1444  return (0,_utils_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_0__["default"])(typeof padding !== 'number' ? padding : (0,_utils_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_1__["default"])(padding, _enums_js__WEBPACK_IMPORTED_MODULE_2__.basePlacements));
1445};
1446
1447function arrow(_ref) {
1448  var _state$modifiersData$;
1449
1450  var state = _ref.state,
1451      name = _ref.name,
1452      options = _ref.options;
1453  var arrowElement = state.elements.arrow;
1454  var popperOffsets = state.modifiersData.popperOffsets;
1455  var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(state.placement);
1456  var axis = (0,_utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_4__["default"])(basePlacement);
1457  var isVertical = [_enums_js__WEBPACK_IMPORTED_MODULE_2__.left, _enums_js__WEBPACK_IMPORTED_MODULE_2__.right].indexOf(basePlacement) >= 0;
1458  var len = isVertical ? 'height' : 'width';
1459
1460  if (!arrowElement || !popperOffsets) {
1461    return;
1462  }
1463
1464  var paddingObject = toPaddingObject(options.padding, state);
1465  var arrowRect = (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_5__["default"])(arrowElement);
1466  var minProp = axis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_2__.top : _enums_js__WEBPACK_IMPORTED_MODULE_2__.left;
1467  var maxProp = axis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_2__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_2__.right;
1468  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];
1469  var startDiff = popperOffsets[axis] - state.rects.reference[axis];
1470  var arrowOffsetParent = (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_6__["default"])(arrowElement);
1471  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;
1472  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is
1473  // outside of the popper bounds
1474
1475  var min = paddingObject[minProp];
1476  var max = clientSize - arrowRect[len] - paddingObject[maxProp];
1477  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;
1478  var offset = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_7__.within)(min, center, max); // Prevents breaking syntax highlighting...
1479
1480  var axisProp = axis;
1481  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);
1482}
1483
1484function effect(_ref2) {
1485  var state = _ref2.state,
1486      options = _ref2.options;
1487  var _options$element = options.element,
1488      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;
1489
1490  if (arrowElement == null) {
1491    return;
1492  } // CSS selector
1493
1494
1495  if (typeof arrowElement === 'string') {
1496    arrowElement = state.elements.popper.querySelector(arrowElement);
1497
1498    if (!arrowElement) {
1499      return;
1500    }
1501  }
1502
1503  if (true) {
1504    if (!(0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_8__.isHTMLElement)(arrowElement)) {
1505      console.error(['Popper: "arrow" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));
1506    }
1507  }
1508
1509  if (!(0,_dom_utils_contains_js__WEBPACK_IMPORTED_MODULE_9__["default"])(state.elements.popper, arrowElement)) {
1510    if (true) {
1511      console.error(['Popper: "arrow" modifier\'s `element` must be a child of the popper', 'element.'].join(' '));
1512    }
1513
1514    return;
1515  }
1516
1517  state.elements.arrow = arrowElement;
1518} // eslint-disable-next-line import/no-unused-modules
1519
1520
1521/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
1522  name: 'arrow',
1523  enabled: true,
1524  phase: 'main',
1525  fn: arrow,
1526  effect: effect,
1527  requires: ['popperOffsets'],
1528  requiresIfExists: ['preventOverflow']
1529});
1530
1531/***/ }),
1532
vendor: 9,297 bytes, lines 1533-1736
1533/***/ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js":
1534/*!********************************************************************!*\
1535  !*** ./node_modules/@popperjs/core/lib/modifiers/computeStyles.js ***!
1536  \********************************************************************/
1537/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1538
1539"use strict";
1540__webpack_require__.r(__webpack_exports__);
1541/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1542/* harmony export */   "mapToStyles": () => (/* binding */ mapToStyles),
1543/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
1544/* harmony export */ });
1545/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
1546/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js");
1547/* harmony import */ var _dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom-utils/getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");
1548/* harmony import */ var _dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dom-utils/getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");
1549/* harmony import */ var _dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js");
1550/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js");
1551/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js");
1552/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js");
1553
1554
1555
1556
1557
1558
1559
1560 // eslint-disable-next-line import/no-unused-modules
1561
1562var unsetSides = {
1563  top: 'auto',
1564  right: 'auto',
1565  bottom: 'auto',
1566  left: 'auto'
1567}; // Round the offsets to the nearest suitable subpixel based on the DPR.
1568// Zooming can change the DPR, but it seems to report a value that will
1569// cleanly divide the values into the appropriate subpixels.
1570
1571function roundOffsetsByDPR(_ref) {
1572  var x = _ref.x,
1573      y = _ref.y;
1574  var win = window;
1575  var dpr = win.devicePixelRatio || 1;
1576  return {
1577    x: (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(x * dpr) / dpr || 0,
1578    y: (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(y * dpr) / dpr || 0
1579  };
1580}
1581
1582function mapToStyles(_ref2) {
1583  var _Object$assign2;
1584
1585  var popper = _ref2.popper,
1586      popperRect = _ref2.popperRect,
1587      placement = _ref2.placement,
1588      variation = _ref2.variation,
1589      offsets = _ref2.offsets,
1590      position = _ref2.position,
1591      gpuAcceleration = _ref2.gpuAcceleration,
1592      adaptive = _ref2.adaptive,
1593      roundOffsets = _ref2.roundOffsets,
1594      isFixed = _ref2.isFixed;
1595  var _offsets$x = offsets.x,
1596      x = _offsets$x === void 0 ? 0 : _offsets$x,
1597      _offsets$y = offsets.y,
1598      y = _offsets$y === void 0 ? 0 : _offsets$y;
1599
1600  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({
1601    x: x,
1602    y: y
1603  }) : {
1604    x: x,
1605    y: y
1606  };
1607
1608  x = _ref3.x;
1609  y = _ref3.y;
1610  var hasX = offsets.hasOwnProperty('x');
1611  var hasY = offsets.hasOwnProperty('y');
1612  var sideX = _enums_js__WEBPACK_IMPORTED_MODULE_1__.left;
1613  var sideY = _enums_js__WEBPACK_IMPORTED_MODULE_1__.top;
1614  var win = window;
1615
1616  if (adaptive) {
1617    var offsetParent = (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_2__["default"])(popper);
1618    var heightProp = 'clientHeight';
1619    var widthProp = 'clientWidth';
1620
1621    if (offsetParent === (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_3__["default"])(popper)) {
1622      offsetParent = (0,_dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_4__["default"])(popper);
1623
1624      if ((0,_dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_5__["default"])(offsetParent).position !== 'static' && position === 'absolute') {
1625        heightProp = 'scrollHeight';
1626        widthProp = 'scrollWidth';
1627      }
1628    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it
1629
1630
1631    offsetParent = offsetParent;
1632
1633    if (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.top || (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.left || placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.right) && variation === _enums_js__WEBPACK_IMPORTED_MODULE_1__.end) {
1634      sideY = _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom;
1635      var offsetY = isFixed && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]
1636      offsetParent[heightProp];
1637      y -= offsetY - popperRect.height;
1638      y *= gpuAcceleration ? 1 : -1;
1639    }
1640
1641    if (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.left || (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.top || placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom) && variation === _enums_js__WEBPACK_IMPORTED_MODULE_1__.end) {
1642      sideX = _enums_js__WEBPACK_IMPORTED_MODULE_1__.right;
1643      var offsetX = isFixed && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]
1644      offsetParent[widthProp];
1645      x -= offsetX - popperRect.width;
1646      x *= gpuAcceleration ? 1 : -1;
1647    }
1648  }
1649
1650  var commonStyles = Object.assign({
1651    position: position
1652  }, adaptive && unsetSides);
1653
1654  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({
1655    x: x,
1656    y: y
1657  }) : {
1658    x: x,
1659    y: y
1660  };
1661
1662  x = _ref4.x;
1663  y = _ref4.y;
1664
1665  if (gpuAcceleration) {
1666    var _Object$assign;
1667
1668    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign));
1669  }
1670
1671  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2));
1672}
1673
1674function computeStyles(_ref5) {
1675  var state = _ref5.state,
1676      options = _ref5.options;
1677  var _options$gpuAccelerat = options.gpuAcceleration,
1678      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,
1679      _options$adaptive = options.adaptive,
1680      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,
1681      _options$roundOffsets = options.roundOffsets,
1682      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;
1683
1684  if (true) {
1685    var transitionProperty = (0,_dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_5__["default"])(state.elements.popper).transitionProperty || '';
1686
1687    if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {
1688      return transitionProperty.indexOf(property) >= 0;
1689    })) {
1690      console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: "transform", "top", "right", "bottom", "left".', '\n\n', 'Disable the "computeStyles" modifier\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\n\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));
1691    }
1692  }
1693
1694  var commonStyles = {
1695    placement: (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_6__["default"])(state.placement),
1696    variation: (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_7__["default"])(state.placement),
1697    popper: state.elements.popper,
1698    popperRect: state.rects.popper,
1699    gpuAcceleration: gpuAcceleration,
1700    isFixed: state.options.strategy === 'fixed'
1701  };
1702
1703  if (state.modifiersData.popperOffsets != null) {
1704    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {
1705      offsets: state.modifiersData.popperOffsets,
1706      position: state.options.strategy,
1707      adaptive: adaptive,
1708      roundOffsets: roundOffsets
1709    })));
1710  }
1711
1712  if (state.modifiersData.arrow != null) {
1713    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {
1714      offsets: state.modifiersData.arrow,
1715      position: 'absolute',
1716      adaptive: false,
1717      roundOffsets: roundOffsets
1718    })));
1719  }
1720
1721  state.attributes.popper = Object.assign({}, state.attributes.popper, {
1722    'data-popper-placement': state.placement
1723  });
1724} // eslint-disable-next-line import/no-unused-modules
1725
1726
1727/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
1728  name: 'computeStyles',
1729  enabled: true,
1730  phase: 'beforeWrite',
1731  fn: computeStyles,
1732  data: {}
1733});
1734
1735/***/ }),
1736
vendor: 2,190 bytes, lines 1737-1800
1737/***/ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js":
1738/*!*********************************************************************!*\
1739  !*** ./node_modules/@popperjs/core/lib/modifiers/eventListeners.js ***!
1740  \*********************************************************************/
1741/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1742
1743"use strict";
1744__webpack_require__.r(__webpack_exports__);
1745/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1746/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
1747/* harmony export */ });
1748/* harmony import */ var _dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-utils/getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");
1749 // eslint-disable-next-line import/no-unused-modules
1750
1751var passive = {
1752  passive: true
1753};
1754
1755function effect(_ref) {
1756  var state = _ref.state,
1757      instance = _ref.instance,
1758      options = _ref.options;
1759  var _options$scroll = options.scroll,
1760      scroll = _options$scroll === void 0 ? true : _options$scroll,
1761      _options$resize = options.resize,
1762      resize = _options$resize === void 0 ? true : _options$resize;
1763  var window = (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(state.elements.popper);
1764  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);
1765
1766  if (scroll) {
1767    scrollParents.forEach(function (scrollParent) {
1768      scrollParent.addEventListener('scroll', instance.update, passive);
1769    });
1770  }
1771
1772  if (resize) {
1773    window.addEventListener('resize', instance.update, passive);
1774  }
1775
1776  return function () {
1777    if (scroll) {
1778      scrollParents.forEach(function (scrollParent) {
1779        scrollParent.removeEventListener('scroll', instance.update, passive);
1780      });
1781    }
1782
1783    if (resize) {
1784      window.removeEventListener('resize', instance.update, passive);
1785    }
1786  };
1787} // eslint-disable-next-line import/no-unused-modules
1788
1789
1790/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
1791  name: 'eventListeners',
1792  enabled: true,
1793  phase: 'write',
1794  fn: function fn() {},
1795  effect: effect,
1796  data: {}
1797});
1798
1799/***/ }),
1800
vendor: 7,538 bytes, lines 1801-1968
1801/***/ "./node_modules/@popperjs/core/lib/modifiers/flip.js":
1802/*!***********************************************************!*\
1803  !*** ./node_modules/@popperjs/core/lib/modifiers/flip.js ***!
1804  \***********************************************************/
1805/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1806
1807"use strict";
1808__webpack_require__.r(__webpack_exports__);
1809/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1810/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
1811/* harmony export */ });
1812/* harmony import */ var _utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/getOppositePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js");
1813/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js");
1814/* harmony import */ var _utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getOppositeVariationPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js");
1815/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js");
1816/* harmony import */ var _utils_computeAutoPlacement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/computeAutoPlacement.js */ "./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js");
1817/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
1818/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js");
1819
1820
1821
1822
1823
1824
1825 // eslint-disable-next-line import/no-unused-modules
1826
1827function getExpandedFallbackPlacements(placement) {
1828  if ((0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_1__.auto) {
1829    return [];
1830  }
1831
1832  var oppositePlacement = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(placement);
1833  return [(0,_utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(placement), oppositePlacement, (0,_utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(oppositePlacement)];
1834}
1835
1836function flip(_ref) {
1837  var state = _ref.state,
1838      options = _ref.options,
1839      name = _ref.name;
1840
1841  if (state.modifiersData[name]._skip) {
1842    return;
1843  }
1844
1845  var _options$mainAxis = options.mainAxis,
1846      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
1847      _options$altAxis = options.altAxis,
1848      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,
1849      specifiedFallbackPlacements = options.fallbackPlacements,
1850      padding = options.padding,
1851      boundary = options.boundary,
1852      rootBoundary = options.rootBoundary,
1853      altBoundary = options.altBoundary,
1854      _options$flipVariatio = options.flipVariations,
1855      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,
1856      allowedAutoPlacements = options.allowedAutoPlacements;
1857  var preferredPlacement = state.options.placement;
1858  var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(preferredPlacement);
1859  var isBasePlacement = basePlacement === preferredPlacement;
1860  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [(0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));
1861  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {
1862    return acc.concat((0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_1__.auto ? (0,_utils_computeAutoPlacement_js__WEBPACK_IMPORTED_MODULE_4__["default"])(state, {
1863      placement: placement,
1864      boundary: boundary,
1865      rootBoundary: rootBoundary,
1866      padding: padding,
1867      flipVariations: flipVariations,
1868      allowedAutoPlacements: allowedAutoPlacements
1869    }) : placement);
1870  }, []);
1871  var referenceRect = state.rects.reference;
1872  var popperRect = state.rects.popper;
1873  var checksMap = new Map();
1874  var makeFallbackChecks = true;
1875  var firstFittingPlacement = placements[0];
1876
1877  for (var i = 0; i < placements.length; i++) {
1878    var placement = placements[i];
1879
1880    var _basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement);
1881
1882    var isStartVariation = (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_5__["default"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_1__.start;
1883    var isVertical = [_enums_js__WEBPACK_IMPORTED_MODULE_1__.top, _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom].indexOf(_basePlacement) >= 0;
1884    var len = isVertical ? 'width' : 'height';
1885    var overflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_6__["default"])(state, {
1886      placement: placement,
1887      boundary: boundary,
1888      rootBoundary: rootBoundary,
1889      altBoundary: altBoundary,
1890      padding: padding
1891    });
1892    var mainVariationSide = isVertical ? isStartVariation ? _enums_js__WEBPACK_IMPORTED_MODULE_1__.right : _enums_js__WEBPACK_IMPORTED_MODULE_1__.left : isStartVariation ? _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_1__.top;
1893
1894    if (referenceRect[len] > popperRect[len]) {
1895      mainVariationSide = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(mainVariationSide);
1896    }
1897
1898    var altVariationSide = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(mainVariationSide);
1899    var checks = [];
1900
1901    if (checkMainAxis) {
1902      checks.push(overflow[_basePlacement] <= 0);
1903    }
1904
1905    if (checkAltAxis) {
1906      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);
1907    }
1908
1909    if (checks.every(function (check) {
1910      return check;
1911    })) {
1912      firstFittingPlacement = placement;
1913      makeFallbackChecks = false;
1914      break;
1915    }
1916
1917    checksMap.set(placement, checks);
1918  }
1919
1920  if (makeFallbackChecks) {
1921    // `2` may be desired in some cases – research later
1922    var numberOfChecks = flipVariations ? 3 : 1;
1923
1924    var _loop = function _loop(_i) {
1925      var fittingPlacement = placements.find(function (placement) {
1926        var checks = checksMap.get(placement);
1927
1928        if (checks) {
1929          return checks.slice(0, _i).every(function (check) {
1930            return check;
1931          });
1932        }
1933      });
1934
1935      if (fittingPlacement) {
1936        firstFittingPlacement = fittingPlacement;
1937        return "break";
1938      }
1939    };
1940
1941    for (var _i = numberOfChecks; _i > 0; _i--) {
1942      var _ret = _loop(_i);
1943
1944      if (_ret === "break") break;
1945    }
1946  }
1947
1948  if (state.placement !== firstFittingPlacement) {
1949    state.modifiersData[name]._skip = true;
1950    state.placement = firstFittingPlacement;
1951    state.reset = true;
1952  }
1953} // eslint-disable-next-line import/no-unused-modules
1954
1955
1956/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
1957  name: 'flip',
1958  enabled: true,
1959  phase: 'main',
1960  fn: flip,
1961  requiresIfExists: ['offset'],
1962  data: {
1963    _skip: false
1964  }
1965});
1966
1967/***/ }),
1968
vendor: 3,074 bytes, lines 1969-2045
1969/***/ "./node_modules/@popperjs/core/lib/modifiers/hide.js":
1970/*!***********************************************************!*\
1971  !*** ./node_modules/@popperjs/core/lib/modifiers/hide.js ***!
1972  \***********************************************************/
1973/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1974
1975"use strict";
1976__webpack_require__.r(__webpack_exports__);
1977/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1978/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
1979/* harmony export */ });
1980/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
1981/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js");
1982
1983
1984
1985function getSideOffsets(overflow, rect, preventedOffsets) {
1986  if (preventedOffsets === void 0) {
1987    preventedOffsets = {
1988      x: 0,
1989      y: 0
1990    };
1991  }
1992
1993  return {
1994    top: overflow.top - rect.height - preventedOffsets.y,
1995    right: overflow.right - rect.width + preventedOffsets.x,
1996    bottom: overflow.bottom - rect.height + preventedOffsets.y,
1997    left: overflow.left - rect.width - preventedOffsets.x
1998  };
1999}
2000
2001function isAnySideFullyClipped(overflow) {
2002  return [_enums_js__WEBPACK_IMPORTED_MODULE_0__.top, _enums_js__WEBPACK_IMPORTED_MODULE_0__.right, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom, _enums_js__WEBPACK_IMPORTED_MODULE_0__.left].some(function (side) {
2003    return overflow[side] >= 0;
2004  });
2005}
2006
2007function hide(_ref) {
2008  var state = _ref.state,
2009      name = _ref.name;
2010  var referenceRect = state.rects.reference;
2011  var popperRect = state.rects.popper;
2012  var preventedOffsets = state.modifiersData.preventOverflow;
2013  var referenceOverflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__["default"])(state, {
2014    elementContext: 'reference'
2015  });
2016  var popperAltOverflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__["default"])(state, {
2017    altBoundary: true
2018  });
2019  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);
2020  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);
2021  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);
2022  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);
2023  state.modifiersData[name] = {
2024    referenceClippingOffsets: referenceClippingOffsets,
2025    popperEscapeOffsets: popperEscapeOffsets,
2026    isReferenceHidden: isReferenceHidden,
2027    hasPopperEscaped: hasPopperEscaped
2028  };
2029  state.attributes.popper = Object.assign({}, state.attributes.popper, {
2030    'data-popper-reference-hidden': isReferenceHidden,
2031    'data-popper-escaped': hasPopperEscaped
2032  });
2033} // eslint-disable-next-line import/no-unused-modules
2034
2035
2036/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
2037  name: 'hide',
2038  enabled: true,
2039  phase: 'main',
2040  requiresIfExists: ['preventOverflow'],
2041  fn: hide
2042});
2043
2044/***/ }),
2045
vendor: 3,157 bytes, lines 2046-2085
2046/***/ "./node_modules/@popperjs/core/lib/modifiers/index.js":
2047/*!************************************************************!*\
2048  !*** ./node_modules/@popperjs/core/lib/modifiers/index.js ***!
2049  \************************************************************/
2050/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2051
2052"use strict";
2053__webpack_require__.r(__webpack_exports__);
2054/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2055/* harmony export */   "applyStyles": () => (/* reexport safe */ _applyStyles_js__WEBPACK_IMPORTED_MODULE_0__["default"]),
2056/* harmony export */   "arrow": () => (/* reexport safe */ _arrow_js__WEBPACK_IMPORTED_MODULE_1__["default"]),
2057/* harmony export */   "computeStyles": () => (/* reexport safe */ _computeStyles_js__WEBPACK_IMPORTED_MODULE_2__["default"]),
2058/* harmony export */   "eventListeners": () => (/* reexport safe */ _eventListeners_js__WEBPACK_IMPORTED_MODULE_3__["default"]),
2059/* harmony export */   "flip": () => (/* reexport safe */ _flip_js__WEBPACK_IMPORTED_MODULE_4__["default"]),
2060/* harmony export */   "hide": () => (/* reexport safe */ _hide_js__WEBPACK_IMPORTED_MODULE_5__["default"]),
2061/* harmony export */   "offset": () => (/* reexport safe */ _offset_js__WEBPACK_IMPORTED_MODULE_6__["default"]),
2062/* harmony export */   "popperOffsets": () => (/* reexport safe */ _popperOffsets_js__WEBPACK_IMPORTED_MODULE_7__["default"]),
2063/* harmony export */   "preventOverflow": () => (/* reexport safe */ _preventOverflow_js__WEBPACK_IMPORTED_MODULE_8__["default"])
2064/* harmony export */ });
2065/* harmony import */ var _applyStyles_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./applyStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js");
2066/* harmony import */ var _arrow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./arrow.js */ "./node_modules/@popperjs/core/lib/modifiers/arrow.js");
2067/* harmony import */ var _computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./computeStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js");
2068/* harmony import */ var _eventListeners_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./eventListeners.js */ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js");
2069/* harmony import */ var _flip_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./flip.js */ "./node_modules/@popperjs/core/lib/modifiers/flip.js");
2070/* harmony import */ var _hide_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hide.js */ "./node_modules/@popperjs/core/lib/modifiers/hide.js");
2071/* harmony import */ var _offset_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./offset.js */ "./node_modules/@popperjs/core/lib/modifiers/offset.js");
2072/* harmony import */ var _popperOffsets_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./popperOffsets.js */ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js");
2073/* harmony import */ var _preventOverflow_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./preventOverflow.js */ "./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js");
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084/***/ }),
2085
vendor: 2,814 bytes, lines 2086-2156
2086/***/ "./node_modules/@popperjs/core/lib/modifiers/offset.js":
2087/*!*************************************************************!*\
2088  !*** ./node_modules/@popperjs/core/lib/modifiers/offset.js ***!
2089  \*************************************************************/
2090/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2091
2092"use strict";
2093__webpack_require__.r(__webpack_exports__);
2094/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2095/* harmony export */   "distanceAndSkiddingToXY": () => (/* binding */ distanceAndSkiddingToXY),
2096/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
2097/* harmony export */ });
2098/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js");
2099/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
2100
2101 // eslint-disable-next-line import/no-unused-modules
2102
2103function distanceAndSkiddingToXY(placement, rects, offset) {
2104  var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement);
2105  var invertDistance = [_enums_js__WEBPACK_IMPORTED_MODULE_1__.left, _enums_js__WEBPACK_IMPORTED_MODULE_1__.top].indexOf(basePlacement) >= 0 ? -1 : 1;
2106
2107  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {
2108    placement: placement
2109  })) : offset,
2110      skidding = _ref[0],
2111      distance = _ref[1];
2112
2113  skidding = skidding || 0;
2114  distance = (distance || 0) * invertDistance;
2115  return [_enums_js__WEBPACK_IMPORTED_MODULE_1__.left, _enums_js__WEBPACK_IMPORTED_MODULE_1__.right].indexOf(basePlacement) >= 0 ? {
2116    x: distance,
2117    y: skidding
2118  } : {
2119    x: skidding,
2120    y: distance
2121  };
2122}
2123
2124function offset(_ref2) {
2125  var state = _ref2.state,
2126      options = _ref2.options,
2127      name = _ref2.name;
2128  var _options$offset = options.offset,
2129      offset = _options$offset === void 0 ? [0, 0] : _options$offset;
2130  var data = _enums_js__WEBPACK_IMPORTED_MODULE_1__.placements.reduce(function (acc, placement) {
2131    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);
2132    return acc;
2133  }, {});
2134  var _data$state$placement = data[state.placement],
2135      x = _data$state$placement.x,
2136      y = _data$state$placement.y;
2137
2138  if (state.modifiersData.popperOffsets != null) {
2139    state.modifiersData.popperOffsets.x += x;
2140    state.modifiersData.popperOffsets.y += y;
2141  }
2142
2143  state.modifiersData[name] = data;
2144} // eslint-disable-next-line import/no-unused-modules
2145
2146
2147/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
2148  name: 'offset',
2149  enabled: true,
2150  phase: 'main',
2151  requires: ['popperOffsets'],
2152  fn: offset
2153});
2154
2155/***/ }),
2156
vendor: 1,555 bytes, lines 2157-2196
2157/***/ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js":
2158/*!********************************************************************!*\
2159  !*** ./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js ***!
2160  \********************************************************************/
2161/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2162
2163"use strict";
2164__webpack_require__.r(__webpack_exports__);
2165/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2166/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
2167/* harmony export */ });
2168/* harmony import */ var _utils_computeOffsets_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/computeOffsets.js */ "./node_modules/@popperjs/core/lib/utils/computeOffsets.js");
2169
2170
2171function popperOffsets(_ref) {
2172  var state = _ref.state,
2173      name = _ref.name;
2174  // Offsets are the actual position the popper needs to have to be
2175  // properly positioned near its reference element
2176  // This is the most basic placement, and will be adjusted by
2177  // the modifiers in the next step
2178  state.modifiersData[name] = (0,_utils_computeOffsets_js__WEBPACK_IMPORTED_MODULE_0__["default"])({
2179    reference: state.rects.reference,
2180    element: state.rects.popper,
2181    strategy: 'absolute',
2182    placement: state.placement
2183  });
2184} // eslint-disable-next-line import/no-unused-modules
2185
2186
2187/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
2188  name: 'popperOffsets',
2189  enabled: true,
2190  phase: 'read',
2191  fn: popperOffsets,
2192  data: {}
2193});
2194
2195/***/ }),
2196
vendor: 9,904 bytes, lines 2197-2363
2197/***/ "./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js":
2198/*!**********************************************************************!*\
2199  !*** ./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js ***!
2200  \**********************************************************************/
2201/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2202
2203"use strict";
2204__webpack_require__.r(__webpack_exports__);
2205/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2206/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
2207/* harmony export */ });
2208/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
2209/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js");
2210/* harmony import */ var _utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getMainAxisFromPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js");
2211/* harmony import */ var _utils_getAltAxis_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/getAltAxis.js */ "./node_modules/@popperjs/core/lib/utils/getAltAxis.js");
2212/* harmony import */ var _utils_within_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/within.js */ "./node_modules/@popperjs/core/lib/utils/within.js");
2213/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getLayoutRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js");
2214/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js");
2215/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js");
2216/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js");
2217/* harmony import */ var _utils_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/getFreshSideObject.js */ "./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js");
2218/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js");
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231function preventOverflow(_ref) {
2232  var state = _ref.state,
2233      options = _ref.options,
2234      name = _ref.name;
2235  var _options$mainAxis = options.mainAxis,
2236      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
2237      _options$altAxis = options.altAxis,
2238      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,
2239      boundary = options.boundary,
2240      rootBoundary = options.rootBoundary,
2241      altBoundary = options.altBoundary,
2242      padding = options.padding,
2243      _options$tether = options.tether,
2244      tether = _options$tether === void 0 ? true : _options$tether,
2245      _options$tetherOffset = options.tetherOffset,
2246      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;
2247  var overflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(state, {
2248    boundary: boundary,
2249    rootBoundary: rootBoundary,
2250    padding: padding,
2251    altBoundary: altBoundary
2252  });
2253  var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(state.placement);
2254  var variation = (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_2__["default"])(state.placement);
2255  var isBasePlacement = !variation;
2256  var mainAxis = (0,_utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(basePlacement);
2257  var altAxis = (0,_utils_getAltAxis_js__WEBPACK_IMPORTED_MODULE_4__["default"])(mainAxis);
2258  var popperOffsets = state.modifiersData.popperOffsets;
2259  var referenceRect = state.rects.reference;
2260  var popperRect = state.rects.popper;
2261  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {
2262    placement: state.placement
2263  })) : tetherOffset;
2264  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {
2265    mainAxis: tetherOffsetValue,
2266    altAxis: tetherOffsetValue
2267  } : Object.assign({
2268    mainAxis: 0,
2269    altAxis: 0
2270  }, tetherOffsetValue);
2271  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;
2272  var data = {
2273    x: 0,
2274    y: 0
2275  };
2276
2277  if (!popperOffsets) {
2278    return;
2279  }
2280
2281  if (checkMainAxis) {
2282    var _offsetModifierState$;
2283
2284    var mainSide = mainAxis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.top : _enums_js__WEBPACK_IMPORTED_MODULE_5__.left;
2285    var altSide = mainAxis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_5__.right;
2286    var len = mainAxis === 'y' ? 'height' : 'width';
2287    var offset = popperOffsets[mainAxis];
2288    var min = offset + overflow[mainSide];
2289    var max = offset - overflow[altSide];
2290    var additive = tether ? -popperRect[len] / 2 : 0;
2291    var minLen = variation === _enums_js__WEBPACK_IMPORTED_MODULE_5__.start ? referenceRect[len] : popperRect[len];
2292    var maxLen = variation === _enums_js__WEBPACK_IMPORTED_MODULE_5__.start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go
2293    // outside the reference bounds
2294
2295    var arrowElement = state.elements.arrow;
2296    var arrowRect = tether && arrowElement ? (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__["default"])(arrowElement) : {
2297      width: 0,
2298      height: 0
2299    };
2300    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : (0,_utils_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_7__["default"])();
2301    var arrowPaddingMin = arrowPaddingObject[mainSide];
2302    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want
2303    // to include its full size in the calculation. If the reference is small
2304    // and near the edge of a boundary, the popper can overflow even if the
2305    // reference is not overflowing as well (e.g. virtual elements with no
2306    // width or height)
2307
2308    var arrowLen = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.within)(0, referenceRect[len], arrowRect[len]);
2309    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;
2310    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;
2311    var arrowOffsetParent = state.elements.arrow && (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_9__["default"])(state.elements.arrow);
2312    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;
2313    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;
2314    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;
2315    var tetherMax = offset + maxOffset - offsetModifierValue;
2316    var preventedOffset = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.within)(tether ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_10__.min)(min, tetherMin) : min, offset, tether ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_10__.max)(max, tetherMax) : max);
2317    popperOffsets[mainAxis] = preventedOffset;
2318    data[mainAxis] = preventedOffset - offset;
2319  }
2320
2321  if (checkAltAxis) {
2322    var _offsetModifierState$2;
2323
2324    var _mainSide = mainAxis === 'x' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.top : _enums_js__WEBPACK_IMPORTED_MODULE_5__.left;
2325
2326    var _altSide = mainAxis === 'x' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_5__.right;
2327
2328    var _offset = popperOffsets[altAxis];
2329
2330    var _len = altAxis === 'y' ? 'height' : 'width';
2331
2332    var _min = _offset + overflow[_mainSide];
2333
2334    var _max = _offset - overflow[_altSide];
2335
2336    var isOriginSide = [_enums_js__WEBPACK_IMPORTED_MODULE_5__.top, _enums_js__WEBPACK_IMPORTED_MODULE_5__.left].indexOf(basePlacement) !== -1;
2337
2338    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;
2339
2340    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;
2341
2342    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;
2343
2344    var _preventedOffset = tether && isOriginSide ? (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.withinMaxClamp)(_tetherMin, _offset, _tetherMax) : (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.within)(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);
2345
2346    popperOffsets[altAxis] = _preventedOffset;
2347    data[altAxis] = _preventedOffset - _offset;
2348  }
2349
2350  state.modifiersData[name] = data;
2351} // eslint-disable-next-line import/no-unused-modules
2352
2353
2354/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
2355  name: 'preventOverflow',
2356  enabled: true,
2357  phase: 'main',
2358  fn: preventOverflow,
2359  requiresIfExists: ['offset']
2360});
2361
2362/***/ }),
2363
vendor: 2,572 bytes, lines 2364-2397
2364/***/ "./node_modules/@popperjs/core/lib/popper-lite.js":
2365/*!********************************************************!*\
2366  !*** ./node_modules/@popperjs/core/lib/popper-lite.js ***!
2367  \********************************************************/
2368/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2369
2370"use strict";
2371__webpack_require__.r(__webpack_exports__);
2372/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2373/* harmony export */   "createPopper": () => (/* binding */ createPopper),
2374/* harmony export */   "popperGenerator": () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_4__.popperGenerator),
2375/* harmony export */   "defaultModifiers": () => (/* binding */ defaultModifiers),
2376/* harmony export */   "detectOverflow": () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_5__["default"])
2377/* harmony export */ });
2378/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/createPopper.js");
2379/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js");
2380/* harmony import */ var _modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifiers/eventListeners.js */ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js");
2381/* harmony import */ var _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/popperOffsets.js */ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js");
2382/* harmony import */ var _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifiers/computeStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js");
2383/* harmony import */ var _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiers/applyStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js");
2384
2385
2386
2387
2388
2389var defaultModifiers = [_modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__["default"], _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__["default"], _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__["default"], _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__["default"]];
2390var createPopper = /*#__PURE__*/(0,_createPopper_js__WEBPACK_IMPORTED_MODULE_4__.popperGenerator)({
2391  defaultModifiers: defaultModifiers
2392}); // eslint-disable-next-line import/no-unused-modules
2393
2394
2395
2396/***/ }),
2397
vendor: 5,531 bytes, lines 2398-2457
2398/***/ "./node_modules/@popperjs/core/lib/popper.js":
2399/*!***************************************************!*\
2400  !*** ./node_modules/@popperjs/core/lib/popper.js ***!
2401  \***************************************************/
2402/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2403
2404"use strict";
2405__webpack_require__.r(__webpack_exports__);
2406/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2407/* harmony export */   "createPopper": () => (/* binding */ createPopper),
2408/* harmony export */   "popperGenerator": () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_9__.popperGenerator),
2409/* harmony export */   "defaultModifiers": () => (/* binding */ defaultModifiers),
2410/* harmony export */   "detectOverflow": () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_10__["default"]),
2411/* harmony export */   "createPopperLite": () => (/* reexport safe */ _popper_lite_js__WEBPACK_IMPORTED_MODULE_11__.createPopper),
2412/* harmony export */   "applyStyles": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.applyStyles),
2413/* harmony export */   "arrow": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.arrow),
2414/* harmony export */   "computeStyles": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.computeStyles),
2415/* harmony export */   "eventListeners": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.eventListeners),
2416/* harmony export */   "flip": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.flip),
2417/* harmony export */   "hide": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.hide),
2418/* harmony export */   "offset": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.offset),
2419/* harmony export */   "popperOffsets": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.popperOffsets),
2420/* harmony export */   "preventOverflow": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.preventOverflow)
2421/* harmony export */ });
2422/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/createPopper.js");
2423/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js");
2424/* harmony import */ var _modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifiers/eventListeners.js */ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js");
2425/* harmony import */ var _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/popperOffsets.js */ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js");
2426/* harmony import */ var _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifiers/computeStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js");
2427/* harmony import */ var _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiers/applyStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js");
2428/* harmony import */ var _modifiers_offset_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modifiers/offset.js */ "./node_modules/@popperjs/core/lib/modifiers/offset.js");
2429/* harmony import */ var _modifiers_flip_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modifiers/flip.js */ "./node_modules/@popperjs/core/lib/modifiers/flip.js");
2430/* harmony import */ var _modifiers_preventOverflow_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modifiers/preventOverflow.js */ "./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js");
2431/* harmony import */ var _modifiers_arrow_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./modifiers/arrow.js */ "./node_modules/@popperjs/core/lib/modifiers/arrow.js");
2432/* harmony import */ var _modifiers_hide_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./modifiers/hide.js */ "./node_modules/@popperjs/core/lib/modifiers/hide.js");
2433/* harmony import */ var _popper_lite_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./popper-lite.js */ "./node_modules/@popperjs/core/lib/popper-lite.js");
2434/* harmony import */ var _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./modifiers/index.js */ "./node_modules/@popperjs/core/lib/modifiers/index.js");
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445var defaultModifiers = [_modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__["default"], _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__["default"], _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__["default"], _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__["default"], _modifiers_offset_js__WEBPACK_IMPORTED_MODULE_4__["default"], _modifiers_flip_js__WEBPACK_IMPORTED_MODULE_5__["default"], _modifiers_preventOverflow_js__WEBPACK_IMPORTED_MODULE_6__["default"], _modifiers_arrow_js__WEBPACK_IMPORTED_MODULE_7__["default"], _modifiers_hide_js__WEBPACK_IMPORTED_MODULE_8__["default"]];
2446var createPopper = /*#__PURE__*/(0,_createPopper_js__WEBPACK_IMPORTED_MODULE_9__.popperGenerator)({
2447  defaultModifiers: defaultModifiers
2448}); // eslint-disable-next-line import/no-unused-modules
2449
2450 // eslint-disable-next-line import/no-unused-modules
2451
2452 // eslint-disable-next-line import/no-unused-modules
2453
2454
2455
2456/***/ }),
2457
vendor: 3,405 bytes, lines 2458-2522
2458/***/ "./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js":
2459/*!***********************************************************************!*\
2460  !*** ./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js ***!
2461  \***********************************************************************/
2462/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2463
2464"use strict";
2465__webpack_require__.r(__webpack_exports__);
2466/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2467/* harmony export */   "default": () => (/* binding */ computeAutoPlacement)
2468/* harmony export */ });
2469/* harmony import */ var _getVariation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js");
2470/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
2471/* harmony import */ var _detectOverflow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js");
2472/* harmony import */ var _getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js");
2473
2474
2475
2476
2477function computeAutoPlacement(state, options) {
2478  if (options === void 0) {
2479    options = {};
2480  }
2481
2482  var _options = options,
2483      placement = _options.placement,
2484      boundary = _options.boundary,
2485      rootBoundary = _options.rootBoundary,
2486      padding = _options.padding,
2487      flipVariations = _options.flipVariations,
2488      _options$allowedAutoP = _options.allowedAutoPlacements,
2489      allowedAutoPlacements = _options$allowedAutoP === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.placements : _options$allowedAutoP;
2490  var variation = (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__["default"])(placement);
2491  var placements = variation ? flipVariations ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.variationPlacements : _enums_js__WEBPACK_IMPORTED_MODULE_0__.variationPlacements.filter(function (placement) {
2492    return (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__["default"])(placement) === variation;
2493  }) : _enums_js__WEBPACK_IMPORTED_MODULE_0__.basePlacements;
2494  var allowedPlacements = placements.filter(function (placement) {
2495    return allowedAutoPlacements.indexOf(placement) >= 0;
2496  });
2497
2498  if (allowedPlacements.length === 0) {
2499    allowedPlacements = placements;
2500
2501    if (true) {
2502      console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, "auto" cannot be used to allow "bottom-start".', 'Use "auto-start" instead.'].join(' '));
2503    }
2504  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...
2505
2506
2507  var overflows = allowedPlacements.reduce(function (acc, placement) {
2508    acc[placement] = (0,_detectOverflow_js__WEBPACK_IMPORTED_MODULE_2__["default"])(state, {
2509      placement: placement,
2510      boundary: boundary,
2511      rootBoundary: rootBoundary,
2512      padding: padding
2513    })[(0,_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(placement)];
2514    return acc;
2515  }, {});
2516  return Object.keys(overflows).sort(function (a, b) {
2517    return overflows[a] - overflows[b];
2518  });
2519}
2520
2521/***/ }),
2522
vendor: 3,194 bytes, lines 2523-2610
2523/***/ "./node_modules/@popperjs/core/lib/utils/computeOffsets.js":
2524/*!*****************************************************************!*\
2525  !*** ./node_modules/@popperjs/core/lib/utils/computeOffsets.js ***!
2526  \*****************************************************************/
2527/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2528
2529"use strict";
2530__webpack_require__.r(__webpack_exports__);
2531/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2532/* harmony export */   "default": () => (/* binding */ computeOffsets)
2533/* harmony export */ });
2534/* harmony import */ var _getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js");
2535/* harmony import */ var _getVariation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js");
2536/* harmony import */ var _getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getMainAxisFromPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js");
2537/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
2538
2539
2540
2541
2542function computeOffsets(_ref) {
2543  var reference = _ref.reference,
2544      element = _ref.element,
2545      placement = _ref.placement;
2546  var basePlacement = placement ? (0,_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement) : null;
2547  var variation = placement ? (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__["default"])(placement) : null;
2548  var commonX = reference.x + reference.width / 2 - element.width / 2;
2549  var commonY = reference.y + reference.height / 2 - element.height / 2;
2550  var offsets;
2551
2552  switch (basePlacement) {
2553    case _enums_js__WEBPACK_IMPORTED_MODULE_2__.top:
2554      offsets = {
2555        x: commonX,
2556        y: reference.y - element.height
2557      };
2558      break;
2559
2560    case _enums_js__WEBPACK_IMPORTED_MODULE_2__.bottom:
2561      offsets = {
2562        x: commonX,
2563        y: reference.y + reference.height
2564      };
2565      break;
2566
2567    case _enums_js__WEBPACK_IMPORTED_MODULE_2__.right:
2568      offsets = {
2569        x: reference.x + reference.width,
2570        y: commonY
2571      };
2572      break;
2573
2574    case _enums_js__WEBPACK_IMPORTED_MODULE_2__.left:
2575      offsets = {
2576        x: reference.x - element.width,
2577        y: commonY
2578      };
2579      break;
2580
2581    default:
2582      offsets = {
2583        x: reference.x,
2584        y: reference.y
2585      };
2586  }
2587
2588  var mainAxis = basePlacement ? (0,_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(basePlacement) : null;
2589
2590  if (mainAxis != null) {
2591    var len = mainAxis === 'y' ? 'height' : 'width';
2592
2593    switch (variation) {
2594      case _enums_js__WEBPACK_IMPORTED_MODULE_2__.start:
2595        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);
2596        break;
2597
2598      case _enums_js__WEBPACK_IMPORTED_MODULE_2__.end:
2599        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);
2600        break;
2601
2602      default:
2603    }
2604  }
2605
2606  return offsets;
2607}
2608
2609/***/ }),
2610
vendor: 850 bytes, lines 2611-2639
2611/***/ "./node_modules/@popperjs/core/lib/utils/debounce.js":
2612/*!***********************************************************!*\
2613  !*** ./node_modules/@popperjs/core/lib/utils/debounce.js ***!
2614  \***********************************************************/
2615/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2616
2617"use strict";
2618__webpack_require__.r(__webpack_exports__);
2619/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2620/* harmony export */   "default": () => (/* binding */ debounce)
2621/* harmony export */ });
2622function debounce(fn) {
2623  var pending;
2624  return function () {
2625    if (!pending) {
2626      pending = new Promise(function (resolve) {
2627        Promise.resolve().then(function () {
2628          pending = undefined;
2629          resolve(fn());
2630        });
2631      });
2632    }
2633
2634    return pending;
2635  };
2636}
2637
2638/***/ }),
2639
vendor: 6,087 bytes, lines 2640-2725
2640/***/ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js":
2641/*!*****************************************************************!*\
2642  !*** ./node_modules/@popperjs/core/lib/utils/detectOverflow.js ***!
2643  \*****************************************************************/
2644/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2645
2646"use strict";
2647__webpack_require__.r(__webpack_exports__);
2648/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2649/* harmony export */   "default": () => (/* binding */ detectOverflow)
2650/* harmony export */ });
2651/* harmony import */ var _dom_utils_getClippingRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom-utils/getClippingRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js");
2652/* harmony import */ var _dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");
2653/* harmony import */ var _dom_utils_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js");
2654/* harmony import */ var _computeOffsets_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./computeOffsets.js */ "./node_modules/@popperjs/core/lib/utils/computeOffsets.js");
2655/* harmony import */ var _rectToClientRect_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./rectToClientRect.js */ "./node_modules/@popperjs/core/lib/utils/rectToClientRect.js");
2656/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
2657/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dom-utils/instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
2658/* harmony import */ var _mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mergePaddingObject.js */ "./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js");
2659/* harmony import */ var _expandToHashMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./expandToHashMap.js */ "./node_modules/@popperjs/core/lib/utils/expandToHashMap.js");
2660
2661
2662
2663
2664
2665
2666
2667
2668 // eslint-disable-next-line import/no-unused-modules
2669
2670function detectOverflow(state, options) {
2671  if (options === void 0) {
2672    options = {};
2673  }
2674
2675  var _options = options,
2676      _options$placement = _options.placement,
2677      placement = _options$placement === void 0 ? state.placement : _options$placement,
2678      _options$boundary = _options.boundary,
2679      boundary = _options$boundary === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.clippingParents : _options$boundary,
2680      _options$rootBoundary = _options.rootBoundary,
2681      rootBoundary = _options$rootBoundary === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.viewport : _options$rootBoundary,
2682      _options$elementConte = _options.elementContext,
2683      elementContext = _options$elementConte === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper : _options$elementConte,
2684      _options$altBoundary = _options.altBoundary,
2685      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,
2686      _options$padding = _options.padding,
2687      padding = _options$padding === void 0 ? 0 : _options$padding;
2688  var paddingObject = (0,_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_1__["default"])(typeof padding !== 'number' ? padding : (0,_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_2__["default"])(padding, _enums_js__WEBPACK_IMPORTED_MODULE_0__.basePlacements));
2689  var altContext = elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.reference : _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper;
2690  var popperRect = state.rects.popper;
2691  var element = state.elements[altBoundary ? altContext : elementContext];
2692  var clippingClientRect = (0,_dom_utils_getClippingRect_js__WEBPACK_IMPORTED_MODULE_3__["default"])((0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(element) ? element : element.contextElement || (0,_dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_5__["default"])(state.elements.popper), boundary, rootBoundary);
2693  var referenceClientRect = (0,_dom_utils_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_6__["default"])(state.elements.reference);
2694  var popperOffsets = (0,_computeOffsets_js__WEBPACK_IMPORTED_MODULE_7__["default"])({
2695    reference: referenceClientRect,
2696    element: popperRect,
2697    strategy: 'absolute',
2698    placement: placement
2699  });
2700  var popperClientRect = (0,_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_8__["default"])(Object.assign({}, popperRect, popperOffsets));
2701  var elementClientRect = elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect
2702  // 0 or negative = within the clipping rect
2703
2704  var overflowOffsets = {
2705    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,
2706    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,
2707    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,
2708    right: elementClientRect.right - clippingClientRect.right + paddingObject.right
2709  };
2710  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element
2711
2712  if (elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper && offsetData) {
2713    var offset = offsetData[placement];
2714    Object.keys(overflowOffsets).forEach(function (key) {
2715      var multiply = [_enums_js__WEBPACK_IMPORTED_MODULE_0__.right, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom].indexOf(key) >= 0 ? 1 : -1;
2716      var axis = [_enums_js__WEBPACK_IMPORTED_MODULE_0__.top, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom].indexOf(key) >= 0 ? 'y' : 'x';
2717      overflowOffsets[key] += offset[axis] * multiply;
2718    });
2719  }
2720
2721  return overflowOffsets;
2722}
2723
2724/***/ }),
2725
vendor: 742 bytes, lines 2726-2745
2726/***/ "./node_modules/@popperjs/core/lib/utils/expandToHashMap.js":
2727/*!******************************************************************!*\
2728  !*** ./node_modules/@popperjs/core/lib/utils/expandToHashMap.js ***!
2729  \******************************************************************/
2730/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2731
2732"use strict";
2733__webpack_require__.r(__webpack_exports__);
2734/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2735/* harmony export */   "default": () => (/* binding */ expandToHashMap)
2736/* harmony export */ });
2737function expandToHashMap(value, keys) {
2738  return keys.reduce(function (hashMap, key) {
2739    hashMap[key] = value;
2740    return hashMap;
2741  }, {});
2742}
2743
2744/***/ }),
2745
vendor: 824 bytes, lines 2746-2768
2746/***/ "./node_modules/@popperjs/core/lib/utils/format.js":
2747/*!*********************************************************!*\
2748  !*** ./node_modules/@popperjs/core/lib/utils/format.js ***!
2749  \*********************************************************/
2750/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2751
2752"use strict";
2753__webpack_require__.r(__webpack_exports__);
2754/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2755/* harmony export */   "default": () => (/* binding */ format)
2756/* harmony export */ });
2757function format(str) {
2758  for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
2759    args[_key - 1] = arguments[_key];
2760  }
2761
2762  return [].concat(args).reduce(function (p, c) {
2763    return p.replace(/%s/, c);
2764  }, str);
2765}
2766
2767/***/ }),
2768
vendor: 637 bytes, lines 2769-2785
2769/***/ "./node_modules/@popperjs/core/lib/utils/getAltAxis.js":
2770/*!*************************************************************!*\
2771  !*** ./node_modules/@popperjs/core/lib/utils/getAltAxis.js ***!
2772  \*************************************************************/
2773/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2774
2775"use strict";
2776__webpack_require__.r(__webpack_exports__);
2777/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2778/* harmony export */   "default": () => (/* binding */ getAltAxis)
2779/* harmony export */ });
2780function getAltAxis(axis) {
2781  return axis === 'x' ? 'y' : 'x';
2782}
2783
2784/***/ }),
2785
vendor: 678 bytes, lines 2786-2803
2786/***/ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js":
2787/*!*******************************************************************!*\
2788  !*** ./node_modules/@popperjs/core/lib/utils/getBasePlacement.js ***!
2789  \*******************************************************************/
2790/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2791
2792"use strict";
2793__webpack_require__.r(__webpack_exports__);
2794/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2795/* harmony export */   "default": () => (/* binding */ getBasePlacement)
2796/* harmony export */ });
2797
2798function getBasePlacement(placement) {
2799  return placement.split('-')[0];
2800}
2801
2802/***/ }),
2803
vendor: 715 bytes, lines 2804-2825
2804/***/ "./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js":
2805/*!*********************************************************************!*\
2806  !*** ./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js ***!
2807  \*********************************************************************/
2808/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2809
2810"use strict";
2811__webpack_require__.r(__webpack_exports__);
2812/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2813/* harmony export */   "default": () => (/* binding */ getFreshSideObject)
2814/* harmony export */ });
2815function getFreshSideObject() {
2816  return {
2817    top: 0,
2818    right: 0,
2819    bottom: 0,
2820    left: 0
2821  };
2822}
2823
2824/***/ }),
2825
vendor: 755 bytes, lines 2826-2842
2826/***/ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js":
2827/*!***************************************************************************!*\
2828  !*** ./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js ***!
2829  \***************************************************************************/
2830/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2831
2832"use strict";
2833__webpack_require__.r(__webpack_exports__);
2834/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2835/* harmony export */   "default": () => (/* binding */ getMainAxisFromPlacement)
2836/* harmony export */ });
2837function getMainAxisFromPlacement(placement) {
2838  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';
2839}
2840
2841/***/ }),
2842
vendor: 856 bytes, lines 2843-2867
2843/***/ "./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js":
2844/*!***********************************************************************!*\
2845  !*** ./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js ***!
2846  \***********************************************************************/
2847/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2848
2849"use strict";
2850__webpack_require__.r(__webpack_exports__);
2851/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2852/* harmony export */   "default": () => (/* binding */ getOppositePlacement)
2853/* harmony export */ });
2854var hash = {
2855  left: 'right',
2856  right: 'left',
2857  bottom: 'top',
2858  top: 'bottom'
2859};
2860function getOppositePlacement(placement) {
2861  return placement.replace(/left|right|bottom|top/g, function (matched) {
2862    return hash[matched];
2863  });
2864}
2865
2866/***/ }),
2867
vendor: 862 bytes, lines 2868-2890
2868/***/ "./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js":
2869/*!********************************************************************************!*\
2870  !*** ./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js ***!
2871  \********************************************************************************/
2872/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2873
2874"use strict";
2875__webpack_require__.r(__webpack_exports__);
2876/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2877/* harmony export */   "default": () => (/* binding */ getOppositeVariationPlacement)
2878/* harmony export */ });
2879var hash = {
2880  start: 'end',
2881  end: 'start'
2882};
2883function getOppositeVariationPlacement(placement) {
2884  return placement.replace(/start|end/g, function (matched) {
2885    return hash[matched];
2886  });
2887}
2888
2889/***/ }),
2890
vendor: 653 bytes, lines 2891-2907
2891/***/ "./node_modules/@popperjs/core/lib/utils/getVariation.js":
2892/*!***************************************************************!*\
2893  !*** ./node_modules/@popperjs/core/lib/utils/getVariation.js ***!
2894  \***************************************************************/
2895/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2896
2897"use strict";
2898__webpack_require__.r(__webpack_exports__);
2899/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2900/* harmony export */   "default": () => (/* binding */ getVariation)
2901/* harmony export */ });
2902function getVariation(placement) {
2903  return placement.split('-')[1];
2904}
2905
2906/***/ }),
2907
vendor: 719 bytes, lines 2908-2926
2908/***/ "./node_modules/@popperjs/core/lib/utils/math.js":
2909/*!*******************************************************!*\
2910  !*** ./node_modules/@popperjs/core/lib/utils/math.js ***!
2911  \*******************************************************/
2912/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2913
2914"use strict";
2915__webpack_require__.r(__webpack_exports__);
2916/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2917/* harmony export */   "max": () => (/* binding */ max),
2918/* harmony export */   "min": () => (/* binding */ min),
2919/* harmony export */   "round": () => (/* binding */ round)
2920/* harmony export */ });
2921var max = Math.max;
2922var min = Math.min;
2923var round = Math.round;
2924
2925/***/ }),
2926
vendor: 1,087 bytes, lines 2927-2954
2927/***/ "./node_modules/@popperjs/core/lib/utils/mergeByName.js":
2928/*!**************************************************************!*\
2929  !*** ./node_modules/@popperjs/core/lib/utils/mergeByName.js ***!
2930  \**************************************************************/
2931/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2932
2933"use strict";
2934__webpack_require__.r(__webpack_exports__);
2935/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2936/* harmony export */   "default": () => (/* binding */ mergeByName)
2937/* harmony export */ });
2938function mergeByName(modifiers) {
2939  var merged = modifiers.reduce(function (merged, current) {
2940    var existing = merged[current.name];
2941    merged[current.name] = existing ? Object.assign({}, existing, current, {
2942      options: Object.assign({}, existing.options, current.options),
2943      data: Object.assign({}, existing.data, current.data)
2944    }) : current;
2945    return merged;
2946  }, {}); // IE11 does not support Object.values
2947
2948  return Object.keys(merged).map(function (key) {
2949    return merged[key];
2950  });
2951}
2952
2953/***/ }),
2954
vendor: 969 bytes, lines 2955-2973
2955/***/ "./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js":
2956/*!*********************************************************************!*\
2957  !*** ./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js ***!
2958  \*********************************************************************/
2959/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2960
2961"use strict";
2962__webpack_require__.r(__webpack_exports__);
2963/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2964/* harmony export */   "default": () => (/* binding */ mergePaddingObject)
2965/* harmony export */ });
2966/* harmony import */ var _getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getFreshSideObject.js */ "./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js");
2967
2968function mergePaddingObject(paddingObject) {
2969  return Object.assign({}, (0,_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_0__["default"])(), paddingObject);
2970}
2971
2972/***/ }),
2973
vendor: 1,964 bytes, lines 2974-3032
2974/***/ "./node_modules/@popperjs/core/lib/utils/orderModifiers.js":
2975/*!*****************************************************************!*\
2976  !*** ./node_modules/@popperjs/core/lib/utils/orderModifiers.js ***!
2977  \*****************************************************************/
2978/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2979
2980"use strict";
2981__webpack_require__.r(__webpack_exports__);
2982/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2983/* harmony export */   "default": () => (/* binding */ orderModifiers)
2984/* harmony export */ });
2985/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
2986 // source: https://stackoverflow.com/questions/49875255
2987
2988function order(modifiers) {
2989  var map = new Map();
2990  var visited = new Set();
2991  var result = [];
2992  modifiers.forEach(function (modifier) {
2993    map.set(modifier.name, modifier);
2994  }); // On visiting object, check for its dependencies and visit them recursively
2995
2996  function sort(modifier) {
2997    visited.add(modifier.name);
2998    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);
2999    requires.forEach(function (dep) {
3000      if (!visited.has(dep)) {
3001        var depModifier = map.get(dep);
3002
3003        if (depModifier) {
3004          sort(depModifier);
3005        }
3006      }
3007    });
3008    result.push(modifier);
3009  }
3010
3011  modifiers.forEach(function (modifier) {
3012    if (!visited.has(modifier.name)) {
3013      // check for visited object
3014      sort(modifier);
3015    }
3016  });
3017  return result;
3018}
3019
3020function orderModifiers(modifiers) {
3021  // order based on dependencies
3022  var orderedModifiers = order(modifiers); // order based on phase
3023
3024  return _enums_js__WEBPACK_IMPORTED_MODULE_0__.modifierPhases.reduce(function (acc, phase) {
3025    return acc.concat(orderedModifiers.filter(function (modifier) {
3026      return modifier.phase === phase;
3027    }));
3028  }, []);
3029}
3030
3031/***/ }),
3032
vendor: 779 bytes, lines 3033-3054
3033/***/ "./node_modules/@popperjs/core/lib/utils/rectToClientRect.js":
3034/*!*******************************************************************!*\
3035  !*** ./node_modules/@popperjs/core/lib/utils/rectToClientRect.js ***!
3036  \*******************************************************************/
3037/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3038
3039"use strict";
3040__webpack_require__.r(__webpack_exports__);
3041/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3042/* harmony export */   "default": () => (/* binding */ rectToClientRect)
3043/* harmony export */ });
3044function rectToClientRect(rect) {
3045  return Object.assign({}, rect, {
3046    left: rect.x,
3047    top: rect.y,
3048    right: rect.x + rect.width,
3049    bottom: rect.y + rect.height
3050  });
3051}
3052
3053/***/ }),
3054
vendor: 800 bytes, lines 3055-3079
3055/***/ "./node_modules/@popperjs/core/lib/utils/uniqueBy.js":
3056/*!***********************************************************!*\
3057  !*** ./node_modules/@popperjs/core/lib/utils/uniqueBy.js ***!
3058  \***********************************************************/
3059/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3060
3061"use strict";
3062__webpack_require__.r(__webpack_exports__);
3063/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3064/* harmony export */   "default": () => (/* binding */ uniqueBy)
3065/* harmony export */ });
3066function uniqueBy(arr, fn) {
3067  var identifiers = new Set();
3068  return arr.filter(function (item) {
3069    var identifier = fn(item);
3070
3071    if (!identifiers.has(identifier)) {
3072      identifiers.add(identifier);
3073      return true;
3074    }
3075  });
3076}
3077
3078/***/ }),
3079
vendor: 4,550 bytes, lines 3080-3176
3080/***/ "./node_modules/@popperjs/core/lib/utils/validateModifiers.js":
3081/*!********************************************************************!*\
3082  !*** ./node_modules/@popperjs/core/lib/utils/validateModifiers.js ***!
3083  \********************************************************************/
3084/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3085
3086"use strict";
3087__webpack_require__.r(__webpack_exports__);
3088/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3089/* harmony export */   "default": () => (/* binding */ validateModifiers)
3090/* harmony export */ });
3091/* harmony import */ var _format_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./format.js */ "./node_modules/@popperjs/core/lib/utils/format.js");
3092/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
3093
3094
3095var INVALID_MODIFIER_ERROR = 'Popper: modifier "%s" provided an invalid %s property, expected %s but got %s';
3096var MISSING_DEPENDENCY_ERROR = 'Popper: modifier "%s" requires "%s", but "%s" modifier is not available';
3097var VALID_PROPERTIES = ['name', 'enabled', 'phase', 'fn', 'effect', 'requires', 'options'];
3098function validateModifiers(modifiers) {
3099  modifiers.forEach(function (modifier) {
3100    [].concat(Object.keys(modifier), VALID_PROPERTIES) // IE11-compatible replacement for `new Set(iterable)`
3101    .filter(function (value, index, self) {
3102      return self.indexOf(value) === index;
3103    }).forEach(function (key) {
3104      switch (key) {
3105        case 'name':
3106          if (typeof modifier.name !== 'string') {
3107            console.error((0,_format_js__WEBPACK_IMPORTED_MODULE_0__["default"])(INVALID_MODIFIER_ERROR, String(modifier.name), '"name"', '"string"', "\"" + String(modifier.name) + "\""));
3108          }
3109
3110          break;
3111
3112        case 'enabled':
3113          if (typeof modifier.enabled !== 'boolean') {
3114            console.error((0,_format_js__WEBPACK_IMPORTED_MODULE_0__["default"])(INVALID_MODIFIER_ERROR, modifier.name, '"enabled"', '"boolean"', "\"" + String(modifier.enabled) + "\""));
3115          }
3116
3117          break;
3118
3119        case 'phase':
3120          if (_enums_js__WEBPACK_IMPORTED_MODULE_1__.modifierPhases.indexOf(modifier.phase) < 0) {
3121            console.error((0,_format_js__WEBPACK_IMPORTED_MODULE_0__["default"])(INVALID_MODIFIER_ERROR, modifier.name, '"phase"', "either " + _enums_js__WEBPACK_IMPORTED_MODULE_1__.modifierPhases.join(', '), "\"" + String(modifier.phase) + "\""));
3122          }
3123
3124          break;
3125
3126        case 'fn':
3127          if (typeof modifier.fn !== 'function') {
3128            console.error((0,_format_js__WEBPACK_IMPORTED_MODULE_0__["default"])(INVALID_MODIFIER_ERROR, modifier.name, '"fn"', '"function"', "\"" + String(modifier.fn) + "\""));
3129          }
3130
3131          break;
3132
3133        case 'effect':
3134          if (modifier.effect != null && typeof modifier.effect !== 'function') {
3135            console.error((0,_format_js__WEBPACK_IMPORTED_MODULE_0__["default"])(INVALID_MODIFIER_ERROR, modifier.name, '"effect"', '"function"', "\"" + String(modifier.fn) + "\""));
3136          }
3137
3138          break;
3139
3140        case 'requires':
3141          if (modifier.requires != null && !Array.isArray(modifier.requires)) {
3142            console.error((0,_format_js__WEBPACK_IMPORTED_MODULE_0__["default"])(INVALID_MODIFIER_ERROR, modifier.name, '"requires"', '"array"', "\"" + String(modifier.requires) + "\""));
3143          }
3144
3145          break;
3146
3147        case 'requiresIfExists':
3148          if (!Array.isArray(modifier.requiresIfExists)) {
3149            console.error((0,_format_js__WEBPACK_IMPORTED_MODULE_0__["default"])(INVALID_MODIFIER_ERROR, modifier.name, '"requiresIfExists"', '"array"', "\"" + String(modifier.requiresIfExists) + "\""));
3150          }
3151
3152          break;
3153
3154        case 'options':
3155        case 'data':
3156          break;
3157
3158        default:
3159          console.error("PopperJS: an invalid property has been provided to the \"" + modifier.name + "\" modifier, valid properties are " + VALID_PROPERTIES.map(function (s) {
3160            return "\"" + s + "\"";
3161          }).join(', ') + "; but \"" + key + "\" was provided.");
3162      }
3163
3164      modifier.requires && modifier.requires.forEach(function (requirement) {
3165        if (modifiers.find(function (mod) {
3166          return mod.name === requirement;
3167        }) == null) {
3168          console.error((0,_format_js__WEBPACK_IMPORTED_MODULE_0__["default"])(MISSING_DEPENDENCY_ERROR, String(modifier.name), requirement, requirement));
3169        }
3170      });
3171    });
3172  });
3173}
3174
3175/***/ }),
3176
vendor: 1,050 bytes, lines 3177-3200
3177/***/ "./node_modules/@popperjs/core/lib/utils/within.js":
3178/*!*********************************************************!*\
3179  !*** ./node_modules/@popperjs/core/lib/utils/within.js ***!
3180  \*********************************************************/
3181/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3182
3183"use strict";
3184__webpack_require__.r(__webpack_exports__);
3185/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3186/* harmony export */   "within": () => (/* binding */ within),
3187/* harmony export */   "withinMaxClamp": () => (/* binding */ withinMaxClamp)
3188/* harmony export */ });
3189/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ "./node_modules/@popperjs/core/lib/utils/math.js");
3190
3191function within(min, value, max) {
3192  return (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.max)(min, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.min)(value, max));
3193}
3194function withinMaxClamp(min, value, max) {
3195  var v = within(min, value, max);
3196  return v > max ? max : v;
3197}
3198
3199/***/ }),
3200
vendor: 342 bytes, lines 3201-3210
3201/***/ "./node_modules/axios/index.js":
3202/*!*************************************!*\
3203  !*** ./node_modules/axios/index.js ***!
3204  \*************************************/
3205/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
3206
3207module.exports = __webpack_require__(/*! ./lib/axios */ "./node_modules/axios/lib/axios.js");
3208
3209/***/ }),
3210
vendor: 7,873 bytes, lines 3211-3433
3211/***/ "./node_modules/axios/lib/adapters/xhr.js":
3212/*!************************************************!*\
3213  !*** ./node_modules/axios/lib/adapters/xhr.js ***!
3214  \************************************************/
3215/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
3216
3217"use strict";
3218
3219
3220var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
3221var settle = __webpack_require__(/*! ./../core/settle */ "./node_modules/axios/lib/core/settle.js");
3222var cookies = __webpack_require__(/*! ./../helpers/cookies */ "./node_modules/axios/lib/helpers/cookies.js");
3223var buildURL = __webpack_require__(/*! ./../helpers/buildURL */ "./node_modules/axios/lib/helpers/buildURL.js");
3224var buildFullPath = __webpack_require__(/*! ../core/buildFullPath */ "./node_modules/axios/lib/core/buildFullPath.js");
3225var parseHeaders = __webpack_require__(/*! ./../helpers/parseHeaders */ "./node_modules/axios/lib/helpers/parseHeaders.js");
3226var isURLSameOrigin = __webpack_require__(/*! ./../helpers/isURLSameOrigin */ "./node_modules/axios/lib/helpers/isURLSameOrigin.js");
3227var createError = __webpack_require__(/*! ../core/createError */ "./node_modules/axios/lib/core/createError.js");
3228var defaults = __webpack_require__(/*! ../defaults */ "./node_modules/axios/lib/defaults.js");
3229var Cancel = __webpack_require__(/*! ../cancel/Cancel */ "./node_modules/axios/lib/cancel/Cancel.js");
3230
3231module.exports = function xhrAdapter(config) {
3232  return new Promise(function dispatchXhrRequest(resolve, reject) {
3233    var requestData = config.data;
3234    var requestHeaders = config.headers;
3235    var responseType = config.responseType;
3236    var onCanceled;
3237    function done() {
3238      if (config.cancelToken) {
3239        config.cancelToken.unsubscribe(onCanceled);
3240      }
3241
3242      if (config.signal) {
3243        config.signal.removeEventListener('abort', onCanceled);
3244      }
3245    }
3246
3247    if (utils.isFormData(requestData)) {
3248      delete requestHeaders['Content-Type']; // Let the browser set it
3249    }
3250
3251    var request = new XMLHttpRequest();
3252
3253    // HTTP basic authentication
3254    if (config.auth) {
3255      var username = config.auth.username || '';
3256      var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';
3257      requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);
3258    }
3259
3260    var fullPath = buildFullPath(config.baseURL, config.url);
3261    request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);
3262
3263    // Set the request timeout in MS
3264    request.timeout = config.timeout;
3265
3266    function onloadend() {
3267      if (!request) {
3268        return;
3269      }
3270      // Prepare the response
3271      var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;
3272      var responseData = !responseType || responseType === 'text' ||  responseType === 'json' ?
3273        request.responseText : request.response;
3274      var response = {
3275        data: responseData,
3276        status: request.status,
3277        statusText: request.statusText,
3278        headers: responseHeaders,
3279        config: config,
3280        request: request
3281      };
3282
3283      settle(function _resolve(value) {
3284        resolve(value);
3285        done();
3286      }, function _reject(err) {
3287        reject(err);
3288        done();
3289      }, response);
3290
3291      // Clean up request
3292      request = null;
3293    }
3294
3295    if ('onloadend' in request) {
3296      // Use onloadend if available
3297      request.onloadend = onloadend;
3298    } else {
3299      // Listen for ready state to emulate onloadend
3300      request.onreadystatechange = function handleLoad() {
3301        if (!request || request.readyState !== 4) {
3302          return;
3303        }
3304
3305        // The request errored out and we didn't get a response, this will be
3306        // handled by onerror instead
3307        // With one exception: request that using file: protocol, most browsers
3308        // will return status as 0 even though it's a successful request
3309        if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {
3310          return;
3311        }
3312        // readystate handler is calling before onerror or ontimeout handlers,
3313        // so we should call onloadend on the next 'tick'
3314        setTimeout(onloadend);
3315      };
3316    }
3317
3318    // Handle browser request cancellation (as opposed to a manual cancellation)
3319    request.onabort = function handleAbort() {
3320      if (!request) {
3321        return;
3322      }
3323
3324      reject(createError('Request aborted', config, 'ECONNABORTED', request));
3325
3326      // Clean up request
3327      request = null;
3328    };
3329
3330    // Handle low level network errors
3331    request.onerror = function handleError() {
3332      // Real errors are hidden from us by the browser
3333      // onerror should only fire if it's a network error
3334      reject(createError('Network Error', config, null, request));
3335
3336      // Clean up request
3337      request = null;
3338    };
3339
3340    // Handle timeout
3341    request.ontimeout = function handleTimeout() {
3342      var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';
3343      var transitional = config.transitional || defaults.transitional;
3344      if (config.timeoutErrorMessage) {
3345        timeoutErrorMessage = config.timeoutErrorMessage;
3346      }
3347      reject(createError(
3348        timeoutErrorMessage,
3349        config,
3350        transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED',
3351        request));
3352
3353      // Clean up request
3354      request = null;
3355    };
3356
3357    // Add xsrf header
3358    // This is only done if running in a standard browser environment.
3359    // Specifically not if we're in a web worker, or react-native.
3360    if (utils.isStandardBrowserEnv()) {
3361      // Add xsrf header
3362      var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?
3363        cookies.read(config.xsrfCookieName) :
3364        undefined;
3365
3366      if (xsrfValue) {
3367        requestHeaders[config.xsrfHeaderName] = xsrfValue;
3368      }
3369    }
3370
3371    // Add headers to the request
3372    if ('setRequestHeader' in request) {
3373      utils.forEach(requestHeaders, function setRequestHeader(val, key) {
3374        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
3375          // Remove Content-Type if data is undefined
3376          delete requestHeaders[key];
3377        } else {
3378          // Otherwise add header to the request
3379          request.setRequestHeader(key, val);
3380        }
3381      });
3382    }
3383
3384    // Add withCredentials to request if needed
3385    if (!utils.isUndefined(config.withCredentials)) {
3386      request.withCredentials = !!config.withCredentials;
3387    }
3388
3389    // Add responseType to request if needed
3390    if (responseType && responseType !== 'json') {
3391      request.responseType = config.responseType;
3392    }
3393
3394    // Handle progress if needed
3395    if (typeof config.onDownloadProgress === 'function') {
3396      request.addEventListener('progress', config.onDownloadProgress);
3397    }
3398
3399    // Not all browsers support upload events
3400    if (typeof config.onUploadProgress === 'function' && request.upload) {
3401      request.upload.addEventListener('progress', config.onUploadProgress);
3402    }
3403
3404    if (config.cancelToken || config.signal) {
3405      // Handle cancellation
3406      // eslint-disable-next-line func-names
3407      onCanceled = function(cancel) {
3408        if (!request) {
3409          return;
3410        }
3411        reject(!cancel || (cancel && cancel.type) ? new Cancel('canceled') : cancel);
3412        request.abort();
3413        request = null;
3414      };
3415
3416      config.cancelToken && config.cancelToken.subscribe(onCanceled);
3417      if (config.signal) {
3418        config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);
3419      }
3420    }
3421
3422    if (!requestData) {
3423      requestData = null;
3424    }
3425
3426    // Send the request
3427    request.send(requestData);
3428  });
3429};
3430
3431
3432/***/ }),
3433
vendor: 2,498 bytes, lines 3434-3501
3434/***/ "./node_modules/axios/lib/axios.js":
3435/*!*****************************************!*\
3436  !*** ./node_modules/axios/lib/axios.js ***!
3437  \*****************************************/
3438/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
3439
3440"use strict";
3441
3442
3443var utils = __webpack_require__(/*! ./utils */ "./node_modules/axios/lib/utils.js");
3444var bind = __webpack_require__(/*! ./helpers/bind */ "./node_modules/axios/lib/helpers/bind.js");
3445var Axios = __webpack_require__(/*! ./core/Axios */ "./node_modules/axios/lib/core/Axios.js");
3446var mergeConfig = __webpack_require__(/*! ./core/mergeConfig */ "./node_modules/axios/lib/core/mergeConfig.js");
3447var defaults = __webpack_require__(/*! ./defaults */ "./node_modules/axios/lib/defaults.js");
3448
3449/**
3450 * Create an instance of Axios
3451 *
3452 * @param {Object} defaultConfig The default config for the instance
3453 * @return {Axios} A new instance of Axios
3454 */
3455function createInstance(defaultConfig) {
3456  var context = new Axios(defaultConfig);
3457  var instance = bind(Axios.prototype.request, context);
3458
3459  // Copy axios.prototype to instance
3460  utils.extend(instance, Axios.prototype, context);
3461
3462  // Copy context to instance
3463  utils.extend(instance, context);
3464
3465  // Factory for creating new instances
3466  instance.create = function create(instanceConfig) {
3467    return createInstance(mergeConfig(defaultConfig, instanceConfig));
3468  };
3469
3470  return instance;
3471}
3472
3473// Create the default instance to be exported
3474var axios = createInstance(defaults);
3475
3476// Expose Axios class to allow class inheritance
3477axios.Axios = Axios;
3478
3479// Expose Cancel & CancelToken
3480axios.Cancel = __webpack_require__(/*! ./cancel/Cancel */ "./node_modules/axios/lib/cancel/Cancel.js");
3481axios.CancelToken = __webpack_require__(/*! ./cancel/CancelToken */ "./node_modules/axios/lib/cancel/CancelToken.js");
3482axios.isCancel = __webpack_require__(/*! ./cancel/isCancel */ "./node_modules/axios/lib/cancel/isCancel.js");
3483axios.VERSION = (__webpack_require__(/*! ./env/data */ "./node_modules/axios/lib/env/data.js").version);
3484
3485// Expose all/spread
3486axios.all = function all(promises) {
3487  return Promise.all(promises);
3488};
3489axios.spread = __webpack_require__(/*! ./helpers/spread */ "./node_modules/axios/lib/helpers/spread.js");
3490
3491// Expose isAxiosError
3492axios.isAxiosError = __webpack_require__(/*! ./helpers/isAxiosError */ "./node_modules/axios/lib/helpers/isAxiosError.js");
3493
3494module.exports = axios;
3495
3496// Allow use of default import syntax in TypeScript
3497module.exports["default"] = axios;
3498
3499
3500/***/ }),
3501
vendor: 636 bytes, lines 3502-3531
3502/***/ "./node_modules/axios/lib/cancel/Cancel.js":
3503/*!*************************************************!*\
3504  !*** ./node_modules/axios/lib/cancel/Cancel.js ***!
3505  \*************************************************/
3506/***/ ((module) => {
3507
3508"use strict";
3509
3510
3511/**
3512 * A `Cancel` is an object that is thrown when an operation is canceled.
3513 *
3514 * @class
3515 * @param {string=} message The message.
3516 */
3517function Cancel(message) {
3518  this.message = message;
3519}
3520
3521Cancel.prototype.toString = function toString() {
3522  return 'Cancel' + (this.message ? ': ' + this.message : '');
3523};
3524
3525Cancel.prototype.__CANCEL__ = true;
3526
3527module.exports = Cancel;
3528
3529
3530/***/ }),
3531
vendor: 2,848 bytes, lines 3532-3661
3532/***/ "./node_modules/axios/lib/cancel/CancelToken.js":
3533/*!******************************************************!*\
3534  !*** ./node_modules/axios/lib/cancel/CancelToken.js ***!
3535  \******************************************************/
3536/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
3537
3538"use strict";
3539
3540
3541var Cancel = __webpack_require__(/*! ./Cancel */ "./node_modules/axios/lib/cancel/Cancel.js");
3542
3543/**
3544 * A `CancelToken` is an object that can be used to request cancellation of an operation.
3545 *
3546 * @class
3547 * @param {Function} executor The executor function.
3548 */
3549function CancelToken(executor) {
3550  if (typeof executor !== 'function') {
3551    throw new TypeError('executor must be a function.');
3552  }
3553
3554  var resolvePromise;
3555
3556  this.promise = new Promise(function promiseExecutor(resolve) {
3557    resolvePromise = resolve;
3558  });
3559
3560  var token = this;
3561
3562  // eslint-disable-next-line func-names
3563  this.promise.then(function(cancel) {
3564    if (!token._listeners) return;
3565
3566    var i;
3567    var l = token._listeners.length;
3568
3569    for (i = 0; i < l; i++) {
3570      token._listeners[i](cancel);
3571    }
3572    token._listeners = null;
3573  });
3574
3575  // eslint-disable-next-line func-names
3576  this.promise.then = function(onfulfilled) {
3577    var _resolve;
3578    // eslint-disable-next-line func-names
3579    var promise = new Promise(function(resolve) {
3580      token.subscribe(resolve);
3581      _resolve = resolve;
3582    }).then(onfulfilled);
3583
3584    promise.cancel = function reject() {
3585      token.unsubscribe(_resolve);
3586    };
3587
3588    return promise;
3589  };
3590
3591  executor(function cancel(message) {
3592    if (token.reason) {
3593      // Cancellation has already been requested
3594      return;
3595    }
3596
3597    token.reason = new Cancel(message);
3598    resolvePromise(token.reason);
3599  });
3600}
3601
3602/**
3603 * Throws a `Cancel` if cancellation has been requested.
3604 */
3605CancelToken.prototype.throwIfRequested = function throwIfRequested() {
3606  if (this.reason) {
3607    throw this.reason;
3608  }
3609};
3610
3611/**
3612 * Subscribe to the cancel signal
3613 */
3614
3615CancelToken.prototype.subscribe = function subscribe(listener) {
3616  if (this.reason) {
3617    listener(this.reason);
3618    return;
3619  }
3620
3621  if (this._listeners) {
3622    this._listeners.push(listener);
3623  } else {
3624    this._listeners = [listener];
3625  }
3626};
3627
3628/**
3629 * Unsubscribe from the cancel signal
3630 */
3631
3632CancelToken.prototype.unsubscribe = function unsubscribe(listener) {
3633  if (!this._listeners) {
3634    return;
3635  }
3636  var index = this._listeners.indexOf(listener);
3637  if (index !== -1) {
3638    this._listeners.splice(index, 1);
3639  }
3640};
3641
3642/**
3643 * Returns an object that contains a new `CancelToken` and a function that, when called,
3644 * cancels the `CancelToken`.
3645 */
3646CancelToken.source = function source() {
3647  var cancel;
3648  var token = new CancelToken(function executor(c) {
3649    cancel = c;
3650  });
3651  return {
3652    token: token,
3653    cancel: cancel
3654  };
3655};
3656
3657module.exports = CancelToken;
3658
3659
3660/***/ }),
3661
vendor: 361 bytes, lines 3662-3677
3662/***/ "./node_modules/axios/lib/cancel/isCancel.js":
3663/*!***************************************************!*\
3664  !*** ./node_modules/axios/lib/cancel/isCancel.js ***!
3665  \***************************************************/
3666/***/ ((module) => {
3667
3668"use strict";
3669
3670
3671module.exports = function isCancel(value) {
3672  return !!(value && value.__CANCEL__);
3673};
3674
3675
3676/***/ }),
3677
vendor: 5,073 bytes, lines 3678-3843
3678/***/ "./node_modules/axios/lib/core/Axios.js":
3679/*!**********************************************!*\
3680  !*** ./node_modules/axios/lib/core/Axios.js ***!
3681  \**********************************************/
3682/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
3683
3684"use strict";
3685
3686
3687var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
3688var buildURL = __webpack_require__(/*! ../helpers/buildURL */ "./node_modules/axios/lib/helpers/buildURL.js");
3689var InterceptorManager = __webpack_require__(/*! ./InterceptorManager */ "./node_modules/axios/lib/core/InterceptorManager.js");
3690var dispatchRequest = __webpack_require__(/*! ./dispatchRequest */ "./node_modules/axios/lib/core/dispatchRequest.js");
3691var mergeConfig = __webpack_require__(/*! ./mergeConfig */ "./node_modules/axios/lib/core/mergeConfig.js");
3692var validator = __webpack_require__(/*! ../helpers/validator */ "./node_modules/axios/lib/helpers/validator.js");
3693
3694var validators = validator.validators;
3695/**
3696 * Create a new instance of Axios
3697 *
3698 * @param {Object} instanceConfig The default config for the instance
3699 */
3700function Axios(instanceConfig) {
3701  this.defaults = instanceConfig;
3702  this.interceptors = {
3703    request: new InterceptorManager(),
3704    response: new InterceptorManager()
3705  };
3706}
3707
3708/**
3709 * Dispatch a request
3710 *
3711 * @param {Object} config The config specific for this request (merged with this.defaults)
3712 */
3713Axios.prototype.request = function request(configOrUrl, config) {
3714  /*eslint no-param-reassign:0*/
3715  // Allow for axios('example/url'[, config]) a la fetch API
3716  if (typeof configOrUrl === 'string') {
3717    config = config || {};
3718    config.url = configOrUrl;
3719  } else {
3720    config = configOrUrl || {};
3721  }
3722
3723  if (!config.url) {
3724    throw new Error('Provided config url is not valid');
3725  }
3726
3727  config = mergeConfig(this.defaults, config);
3728
3729  // Set config.method
3730  if (config.method) {
3731    config.method = config.method.toLowerCase();
3732  } else if (this.defaults.method) {
3733    config.method = this.defaults.method.toLowerCase();
3734  } else {
3735    config.method = 'get';
3736  }
3737
3738  var transitional = config.transitional;
3739
3740  if (transitional !== undefined) {
3741    validator.assertOptions(transitional, {
3742      silentJSONParsing: validators.transitional(validators.boolean),
3743      forcedJSONParsing: validators.transitional(validators.boolean),
3744      clarifyTimeoutError: validators.transitional(validators.boolean)
3745    }, false);
3746  }
3747
3748  // filter out skipped interceptors
3749  var requestInterceptorChain = [];
3750  var synchronousRequestInterceptors = true;
3751  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
3752    if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {
3753      return;
3754    }
3755
3756    synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;
3757
3758    requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);
3759  });
3760
3761  var responseInterceptorChain = [];
3762  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
3763    responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);
3764  });
3765
3766  var promise;
3767
3768  if (!synchronousRequestInterceptors) {
3769    var chain = [dispatchRequest, undefined];
3770
3771    Array.prototype.unshift.apply(chain, requestInterceptorChain);
3772    chain = chain.concat(responseInterceptorChain);
3773
3774    promise = Promise.resolve(config);
3775    while (chain.length) {
3776      promise = promise.then(chain.shift(), chain.shift());
3777    }
3778
3779    return promise;
3780  }
3781
3782
3783  var newConfig = config;
3784  while (requestInterceptorChain.length) {
3785    var onFulfilled = requestInterceptorChain.shift();
3786    var onRejected = requestInterceptorChain.shift();
3787    try {
3788      newConfig = onFulfilled(newConfig);
3789    } catch (error) {
3790      onRejected(error);
3791      break;
3792    }
3793  }
3794
3795  try {
3796    promise = dispatchRequest(newConfig);
3797  } catch (error) {
3798    return Promise.reject(error);
3799  }
3800
3801  while (responseInterceptorChain.length) {
3802    promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());
3803  }
3804
3805  return promise;
3806};
3807
3808Axios.prototype.getUri = function getUri(config) {
3809  if (!config.url) {
3810    throw new Error('Provided config url is not valid');
3811  }
3812  config = mergeConfig(this.defaults, config);
3813  return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\?/, '');
3814};
3815
3816// Provide aliases for supported request methods
3817utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {
3818  /*eslint func-names:0*/
3819  Axios.prototype[method] = function(url, config) {
3820    return this.request(mergeConfig(config || {}, {
3821      method: method,
3822      url: url,
3823      data: (config || {}).data
3824    }));
3825  };
3826});
3827
3828utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
3829  /*eslint func-names:0*/
3830  Axios.prototype[method] = function(url, data, config) {
3831    return this.request(mergeConfig(config || {}, {
3832      method: method,
3833      url: url,
3834      data: data
3835    }));
3836  };
3837});
3838
3839module.exports = Axios;
3840
3841
3842/***/ }),
3843
vendor: 1,754 bytes, lines 3844-3908
3844/***/ "./node_modules/axios/lib/core/InterceptorManager.js":
3845/*!***********************************************************!*\
3846  !*** ./node_modules/axios/lib/core/InterceptorManager.js ***!
3847  \***********************************************************/
3848/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
3849
3850"use strict";
3851
3852
3853var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
3854
3855function InterceptorManager() {
3856  this.handlers = [];
3857}
3858
3859/**
3860 * Add a new interceptor to the stack
3861 *
3862 * @param {Function} fulfilled The function to handle `then` for a `Promise`
3863 * @param {Function} rejected The function to handle `reject` for a `Promise`
3864 *
3865 * @return {Number} An ID used to remove interceptor later
3866 */
3867InterceptorManager.prototype.use = function use(fulfilled, rejected, options) {
3868  this.handlers.push({
3869    fulfilled: fulfilled,
3870    rejected: rejected,
3871    synchronous: options ? options.synchronous : false,
3872    runWhen: options ? options.runWhen : null
3873  });
3874  return this.handlers.length - 1;
3875};
3876
3877/**
3878 * Remove an interceptor from the stack
3879 *
3880 * @param {Number} id The ID that was returned by `use`
3881 */
3882InterceptorManager.prototype.eject = function eject(id) {
3883  if (this.handlers[id]) {
3884    this.handlers[id] = null;
3885  }
3886};
3887
3888/**
3889 * Iterate over all the registered interceptors
3890 *
3891 * This method is particularly useful for skipping over any
3892 * interceptors that may have become `null` calling `eject`.
3893 *
3894 * @param {Function} fn The function to call for each interceptor
3895 */
3896InterceptorManager.prototype.forEach = function forEach(fn) {
3897  utils.forEach(this.handlers, function forEachHandler(h) {
3898    if (h !== null) {
3899      fn(h);
3900    }
3901  });
3902};
3903
3904module.exports = InterceptorManager;
3905
3906
3907/***/ }),
3908
vendor: 1,149 bytes, lines 3909-3939
3909/***/ "./node_modules/axios/lib/core/buildFullPath.js":
3910/*!******************************************************!*\
3911  !*** ./node_modules/axios/lib/core/buildFullPath.js ***!
3912  \******************************************************/
3913/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
3914
3915"use strict";
3916
3917
3918var isAbsoluteURL = __webpack_require__(/*! ../helpers/isAbsoluteURL */ "./node_modules/axios/lib/helpers/isAbsoluteURL.js");
3919var combineURLs = __webpack_require__(/*! ../helpers/combineURLs */ "./node_modules/axios/lib/helpers/combineURLs.js");
3920
3921/**
3922 * Creates a new URL by combining the baseURL with the requestedURL,
3923 * only when the requestedURL is not already an absolute URL.
3924 * If the requestURL is absolute, this function returns the requestedURL untouched.
3925 *
3926 * @param {string} baseURL The base URL
3927 * @param {string} requestedURL Absolute or relative URL to combine
3928 * @returns {string} The combined full path
3929 */
3930module.exports = function buildFullPath(baseURL, requestedURL) {
3931  if (baseURL && !isAbsoluteURL(requestedURL)) {
3932    return combineURLs(baseURL, requestedURL);
3933  }
3934  return requestedURL;
3935};
3936
3937
3938/***/ }),
3939
vendor: 1,000 bytes, lines 3940-3968
3940/***/ "./node_modules/axios/lib/core/createError.js":
3941/*!****************************************************!*\
3942  !*** ./node_modules/axios/lib/core/createError.js ***!
3943  \****************************************************/
3944/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
3945
3946"use strict";
3947
3948
3949var enhanceError = __webpack_require__(/*! ./enhanceError */ "./node_modules/axios/lib/core/enhanceError.js");
3950
3951/**
3952 * Create an Error with the specified message, config, error code, request and response.
3953 *
3954 * @param {string} message The error message.
3955 * @param {Object} config The config.
3956 * @param {string} [code] The error code (for example, 'ECONNABORTED').
3957 * @param {Object} [request] The request.
3958 * @param {Object} [response] The response.
3959 * @returns {Error} The created error.
3960 */
3961module.exports = function createError(message, config, code, request, response) {
3962  var error = new Error(message);
3963  return enhanceError(error, config, code, request, response);
3964};
3965
3966
3967/***/ }),
3968
vendor: 2,747 bytes, lines 3969-4066
3969/***/ "./node_modules/axios/lib/core/dispatchRequest.js":
3970/*!********************************************************!*\
3971  !*** ./node_modules/axios/lib/core/dispatchRequest.js ***!
3972  \********************************************************/
3973/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
3974
3975"use strict";
3976
3977
3978var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
3979var transformData = __webpack_require__(/*! ./transformData */ "./node_modules/axios/lib/core/transformData.js");
3980var isCancel = __webpack_require__(/*! ../cancel/isCancel */ "./node_modules/axios/lib/cancel/isCancel.js");
3981var defaults = __webpack_require__(/*! ../defaults */ "./node_modules/axios/lib/defaults.js");
3982var Cancel = __webpack_require__(/*! ../cancel/Cancel */ "./node_modules/axios/lib/cancel/Cancel.js");
3983
3984/**
3985 * Throws a `Cancel` if cancellation has been requested.
3986 */
3987function throwIfCancellationRequested(config) {
3988  if (config.cancelToken) {
3989    config.cancelToken.throwIfRequested();
3990  }
3991
3992  if (config.signal && config.signal.aborted) {
3993    throw new Cancel('canceled');
3994  }
3995}
3996
3997/**
3998 * Dispatch a request to the server using the configured adapter.
3999 *
4000 * @param {object} config The config that is to be used for the request
4001 * @returns {Promise} The Promise to be fulfilled
4002 */
4003module.exports = function dispatchRequest(config) {
4004  throwIfCancellationRequested(config);
4005
4006  // Ensure headers exist
4007  config.headers = config.headers || {};
4008
4009  // Transform request data
4010  config.data = transformData.call(
4011    config,
4012    config.data,
4013    config.headers,
4014    config.transformRequest
4015  );
4016
4017  // Flatten headers
4018  config.headers = utils.merge(
4019    config.headers.common || {},
4020    config.headers[config.method] || {},
4021    config.headers
4022  );
4023
4024  utils.forEach(
4025    ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],
4026    function cleanHeaderConfig(method) {
4027      delete config.headers[method];
4028    }
4029  );
4030
4031  var adapter = config.adapter || defaults.adapter;
4032
4033  return adapter(config).then(function onAdapterResolution(response) {
4034    throwIfCancellationRequested(config);
4035
4036    // Transform response data
4037    response.data = transformData.call(
4038      config,
4039      response.data,
4040      response.headers,
4041      config.transformResponse
4042    );
4043
4044    return response;
4045  }, function onAdapterRejection(reason) {
4046    if (!isCancel(reason)) {
4047      throwIfCancellationRequested(config);
4048
4049      // Transform response data
4050      if (reason && reason.response) {
4051        reason.response.data = transformData.call(
4052          config,
4053          reason.response.data,
4054          reason.response.headers,
4055          config.transformResponse
4056        );
4057      }
4058    }
4059
4060    return Promise.reject(reason);
4061  });
4062};
4063
4064
4065/***/ }),
4066
vendor: 1,399 bytes, lines 4067-4120
4067/***/ "./node_modules/axios/lib/core/enhanceError.js":
4068/*!*****************************************************!*\
4069  !*** ./node_modules/axios/lib/core/enhanceError.js ***!
4070  \*****************************************************/
4071/***/ ((module) => {
4072
4073"use strict";
4074
4075
4076/**
4077 * Update an Error with the specified config, error code, and response.
4078 *
4079 * @param {Error} error The error to update.
4080 * @param {Object} config The config.
4081 * @param {string} [code] The error code (for example, 'ECONNABORTED').
4082 * @param {Object} [request] The request.
4083 * @param {Object} [response] The response.
4084 * @returns {Error} The error.
4085 */
4086module.exports = function enhanceError(error, config, code, request, response) {
4087  error.config = config;
4088  if (code) {
4089    error.code = code;
4090  }
4091
4092  error.request = request;
4093  error.response = response;
4094  error.isAxiosError = true;
4095
4096  error.toJSON = function toJSON() {
4097    return {
4098      // Standard
4099      message: this.message,
4100      name: this.name,
4101      // Microsoft
4102      description: this.description,
4103      number: this.number,
4104      // Mozilla
4105      fileName: this.fileName,
4106      lineNumber: this.lineNumber,
4107      columnNumber: this.columnNumber,
4108      stack: this.stack,
4109      // Axios
4110      config: this.config,
4111      code: this.code,
4112      status: this.response && this.response.status ? this.response.status : null
4113    };
4114  };
4115  return error;
4116};
4117
4118
4119/***/ }),
4120
vendor: 3,558 bytes, lines 4121-4230
4121/***/ "./node_modules/axios/lib/core/mergeConfig.js":
4122/*!****************************************************!*\
4123  !*** ./node_modules/axios/lib/core/mergeConfig.js ***!
4124  \****************************************************/
4125/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
4126
4127"use strict";
4128
4129
4130var utils = __webpack_require__(/*! ../utils */ "./node_modules/axios/lib/utils.js");
4131
4132/**
4133 * Config-specific merge-function which creates a new config-object
4134 * by merging two configuration objects together.
4135 *
4136 * @param {Object} config1
4137 * @param {Object} config2
4138 * @returns {Object} New object resulting from merging config2 to config1
4139 */
4140module.exports = function mergeConfig(config1, config2) {
4141  // eslint-disable-next-line no-param-reassign
4142  config2 = config2 || {};
4143  var config = {};
4144
4145  function getMergedValue(target, source) {
4146    if (utils.isPlainObject(target) && utils.isPlainObject(source)) {
4147      return utils.merge(target, source);
4148    } else if (utils.isPlainObject(source)) {
4149      return utils.merge({}, source);
4150    } else if (utils.isArray(source)) {
4151      return source.slice();
4152    }
4153    return source;
4154  }
4155
4156  // eslint-disable-next-line consistent-return
4157  function mergeDeepProperties(prop) {
4158    if (!utils.isUndefined(config2[prop])) {
4159      return getMergedValue(config1[prop], config2[prop]);
4160    } else if (!utils.isUndefined(config1[prop])) {
4161      return getMergedValue(undefined, config1[prop]);
4162    }
4163  }
4164
4165  // eslint-disable-next-line consistent-return
4166  function valueFromConfig2(prop) {
4167    if (!utils.isUndefined(config2[prop])) {
4168      return getMergedValue(undefined, config2[prop]);
4169    }
4170  }
4171
4172  // eslint-disable-next-line consistent-return
4173  function defaultToConfig2(prop) {
4174    if (!utils.isUndefined(config2[prop])) {
4175      return getMergedValue(undefined, config2[prop]);
4176    } else if (!utils.isUndefined(config1[prop])) {
4177      return getMergedValue(undefined, config1[prop]);
4178    }
4179  }
4180
4181  // eslint-disable-next-line consistent-return
4182  function mergeDirectKeys(prop) {
4183    if (prop in config2) {
4184      return getMergedValue(config1[prop], config2[prop]);
4185    } else if (prop in config1) {
4186      return getMergedValue(undefined, config1[prop]);
4187    }
4188  }
4189
4190  var mergeMap = {
4191    'url': valueFromConfig2,
4192    'method': valueFromConfig2,
4193    'data': valueFromConfig2,
4194    'baseURL': defaultToConfig2,
4195    'transformRequest': defaultToConfig2,
4196    'transformResponse': defaultToConfig2,
4197    'paramsSerializer': defaultToConfig2,
4198    'timeout': defaultToConfig2,
4199    'timeoutMessage': defaultToConfig2,
4200    'withCredentials': defaultToConfig2,
4201    'adapter': defaultToConfig2,
4202    'responseType': defaultToConfig2,
4203    'xsrfCookieName': defaultToConfig2,
4204    'xsrfHeaderName': defaultToConfig2,
4205    'onUploadProgress': defaultToConfig2,
4206    'onDownloadProgress': defaultToConfig2,
4207    'decompress': defaultToConfig2,
4208    'maxContentLength': defaultToConfig2,
4209    'maxBodyLength': defaultToConfig2,
4210    'transport': defaultToConfig2,
4211    'httpAgent': defaultToConfig2,
4212    'httpsAgent': defaultToConfig2,
4213    'cancelToken': defaultToConfig2,
4214    'socketPath': defaultToConfig2,
4215    'responseEncoding': defaultToConfig2,
4216    'validateStatus': mergeDirectKeys
4217  };
4218
4219  utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {
4220    var merge = mergeMap[prop] || mergeDeepProperties;
4221    var configValue = merge(prop);
4222    (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);
4223  });
4224
4225  return config;
4226};
4227
4228
4229/***/ }),
4230
vendor: 1,060 bytes, lines 4231-4266
4231/***/ "./node_modules/axios/lib/core/settle.js":
4232/*!***********************************************!*\
4233  !*** ./node_modules/axios/lib/core/settle.js ***!
4234  \***********************************************/
4235/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
4236
4237"use strict";
4238
4239
4240var createError = __webpack_require__(/*! ./createError */ "./node_modules/axios/lib/core/createError.js");
4241
4242/**
4243 * Resolve or reject a Promise based on response status.
4244 *
4245 * @param {Function} resolve A function that resolves the promise.
4246 * @param {Function} reject A function that rejects the promise.
4247 * @param {object} response The response.
4248 */
4249module.exports = function settle(resolve, reject, response) {
4250  var validateStatus = response.config.validateStatus;
4251  if (!response.status || !validateStatus || validateStatus(response.status)) {
4252    resolve(response);
4253  } else {
4254    reject(createError(
4255      'Request failed with status code ' + response.status,
4256      response.config,
4257      null,
4258      response.request,
4259      response
4260    ));
4261  }
4262};
4263
4264
4265/***/ }),
4266
vendor: 1,066 bytes, lines 4267-4299
4267/***/ "./node_modules/axios/lib/core/transformData.js":
4268/*!******************************************************!*\
4269  !*** ./node_modules/axios/lib/core/transformData.js ***!
4270  \******************************************************/
4271/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
4272
4273"use strict";
4274
4275
4276var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
4277var defaults = __webpack_require__(/*! ./../defaults */ "./node_modules/axios/lib/defaults.js");
4278
4279/**
4280 * Transform the data for a request or a response
4281 *
4282 * @param {Object|String} data The data to be transformed
4283 * @param {Array} headers The headers for the request or response
4284 * @param {Array|Function} fns A single function or Array of functions
4285 * @returns {*} The resulting transformed data
4286 */
4287module.exports = function transformData(data, headers, fns) {
4288  var context = this || defaults;
4289  /*eslint no-param-reassign:0*/
4290  utils.forEach(fns, function transform(fn) {
4291    data = fn.call(context, data, headers);
4292  });
4293
4294  return data;
4295};
4296
4297
4298/***/ }),
4299
vendor: 4,297 bytes, lines 4300-4445
4300/***/ "./node_modules/axios/lib/defaults.js":
4301/*!********************************************!*\
4302  !*** ./node_modules/axios/lib/defaults.js ***!
4303  \********************************************/
4304/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
4305
4306"use strict";
4307/* provided dependency */ var process = __webpack_require__(/*! process/browser.js */ "./node_modules/process/browser.js");
4308
4309
4310var utils = __webpack_require__(/*! ./utils */ "./node_modules/axios/lib/utils.js");
4311var normalizeHeaderName = __webpack_require__(/*! ./helpers/normalizeHeaderName */ "./node_modules/axios/lib/helpers/normalizeHeaderName.js");
4312var enhanceError = __webpack_require__(/*! ./core/enhanceError */ "./node_modules/axios/lib/core/enhanceError.js");
4313
4314var DEFAULT_CONTENT_TYPE = {
4315  'Content-Type': 'application/x-www-form-urlencoded'
4316};
4317
4318function setContentTypeIfUnset(headers, value) {
4319  if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {
4320    headers['Content-Type'] = value;
4321  }
4322}
4323
4324function getDefaultAdapter() {
4325  var adapter;
4326  if (typeof XMLHttpRequest !== 'undefined') {
4327    // For browsers use XHR adapter
4328    adapter = __webpack_require__(/*! ./adapters/xhr */ "./node_modules/axios/lib/adapters/xhr.js");
4329  } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {
4330    // For node use HTTP adapter
4331    adapter = __webpack_require__(/*! ./adapters/http */ "./node_modules/axios/lib/adapters/xhr.js");
4332  }
4333  return adapter;
4334}
4335
4336function stringifySafely(rawValue, parser, encoder) {
4337  if (utils.isString(rawValue)) {
4338    try {
4339      (parser || JSON.parse)(rawValue);
4340      return utils.trim(rawValue);
4341    } catch (e) {
4342      if (e.name !== 'SyntaxError') {
4343        throw e;
4344      }
4345    }
4346  }
4347
4348  return (encoder || JSON.stringify)(rawValue);
4349}
4350
4351var defaults = {
4352
4353  transitional: {
4354    silentJSONParsing: true,
4355    forcedJSONParsing: true,
4356    clarifyTimeoutError: false
4357  },
4358
4359  adapter: getDefaultAdapter(),
4360
4361  transformRequest: [function transformRequest(data, headers) {
4362    normalizeHeaderName(headers, 'Accept');
4363    normalizeHeaderName(headers, 'Content-Type');
4364
4365    if (utils.isFormData(data) ||
4366      utils.isArrayBuffer(data) ||
4367      utils.isBuffer(data) ||
4368      utils.isStream(data) ||
4369      utils.isFile(data) ||
4370      utils.isBlob(data)
4371    ) {
4372      return data;
4373    }
4374    if (utils.isArrayBufferView(data)) {
4375      return data.buffer;
4376    }
4377    if (utils.isURLSearchParams(data)) {
4378      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
4379      return data.toString();
4380    }
4381    if (utils.isObject(data) || (headers && headers['Content-Type'] === 'application/json')) {
4382      setContentTypeIfUnset(headers, 'application/json');
4383      return stringifySafely(data);
4384    }
4385    return data;
4386  }],
4387
4388  transformResponse: [function transformResponse(data) {
4389    var transitional = this.transitional || defaults.transitional;
4390    var silentJSONParsing = transitional && transitional.silentJSONParsing;
4391    var forcedJSONParsing = transitional && transitional.forcedJSONParsing;
4392    var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';
4393
4394    if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {
4395      try {
4396        return JSON.parse(data);
4397      } catch (e) {
4398        if (strictJSONParsing) {
4399          if (e.name === 'SyntaxError') {
4400            throw enhanceError(e, this, 'E_JSON_PARSE');
4401          }
4402          throw e;
4403        }
4404      }
4405    }
4406
4407    return data;
4408  }],
4409
4410  /**
4411   * A timeout in milliseconds to abort a request. If set to 0 (default) a
4412   * timeout is not created.
4413   */
4414  timeout: 0,
4415
4416  xsrfCookieName: 'XSRF-TOKEN',
4417  xsrfHeaderName: 'X-XSRF-TOKEN',
4418
4419  maxContentLength: -1,
4420  maxBodyLength: -1,
4421
4422  validateStatus: function validateStatus(status) {
4423    return status >= 200 && status < 300;
4424  },
4425
4426  headers: {
4427    common: {
4428      'Accept': 'application/json, text/plain, */*'
4429    }
4430  }
4431};
4432
4433utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {
4434  defaults.headers[method] = {};
4435});
4436
4437utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
4438  defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);
4439});
4440
4441module.exports = defaults;
4442
4443
4444/***/ }),
4445
vendor: 273 bytes, lines 4446-4457
4446/***/ "./node_modules/axios/lib/env/data.js":
4447/*!********************************************!*\
4448  !*** ./node_modules/axios/lib/env/data.js ***!
4449  \********************************************/
4450/***/ ((module) => {
4451
4452module.exports = {
4453  "version": "0.25.0"
4454};
4455
4456/***/ }),
4457
vendor: 503 bytes, lines 4458-4479
4458/***/ "./node_modules/axios/lib/helpers/bind.js":
4459/*!************************************************!*\
4460  !*** ./node_modules/axios/lib/helpers/bind.js ***!
4461  \************************************************/
4462/***/ ((module) => {
4463
4464"use strict";
4465
4466
4467module.exports = function bind(fn, thisArg) {
4468  return function wrap() {
4469    var args = new Array(arguments.length);
4470    for (var i = 0; i < args.length; i++) {
4471      args[i] = arguments[i];
4472    }
4473    return fn.apply(thisArg, args);
4474  };
4475};
4476
4477
4478/***/ }),
4479
vendor: 2,007 bytes, lines 4480-4560
4480/***/ "./node_modules/axios/lib/helpers/buildURL.js":
4481/*!****************************************************!*\
4482  !*** ./node_modules/axios/lib/helpers/buildURL.js ***!
4483  \****************************************************/
4484/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
4485
4486"use strict";
4487
4488
4489var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
4490
4491function encode(val) {
4492  return encodeURIComponent(val).
4493    replace(/%3A/gi, ':').
4494    replace(/%24/g, '$').
4495    replace(/%2C/gi, ',').
4496    replace(/%20/g, '+').
4497    replace(/%5B/gi, '[').
4498    replace(/%5D/gi, ']');
4499}
4500
4501/**
4502 * Build a URL by appending params to the end
4503 *
4504 * @param {string} url The base of the url (e.g., http://www.google.com)
4505 * @param {object} [params] The params to be appended
4506 * @returns {string} The formatted url
4507 */
4508module.exports = function buildURL(url, params, paramsSerializer) {
4509  /*eslint no-param-reassign:0*/
4510  if (!params) {
4511    return url;
4512  }
4513
4514  var serializedParams;
4515  if (paramsSerializer) {
4516    serializedParams = paramsSerializer(params);
4517  } else if (utils.isURLSearchParams(params)) {
4518    serializedParams = params.toString();
4519  } else {
4520    var parts = [];
4521
4522    utils.forEach(params, function serialize(val, key) {
4523      if (val === null || typeof val === 'undefined') {
4524        return;
4525      }
4526
4527      if (utils.isArray(val)) {
4528        key = key + '[]';
4529      } else {
4530        val = [val];
4531      }
4532
4533      utils.forEach(val, function parseValue(v) {
4534        if (utils.isDate(v)) {
4535          v = v.toISOString();
4536        } else if (utils.isObject(v)) {
4537          v = JSON.stringify(v);
4538        }
4539        parts.push(encode(key) + '=' + encode(v));
4540      });
4541    });
4542
4543    serializedParams = parts.join('&');
4544  }
4545
4546  if (serializedParams) {
4547    var hashmarkIndex = url.indexOf('#');
4548    if (hashmarkIndex !== -1) {
4549      url = url.slice(0, hashmarkIndex);
4550    }
4551
4552    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;
4553  }
4554
4555  return url;
4556};
4557
4558
4559/***/ }),
4560
vendor: 655 bytes, lines 4561-4585
4561/***/ "./node_modules/axios/lib/helpers/combineURLs.js":
4562/*!*******************************************************!*\
4563  !*** ./node_modules/axios/lib/helpers/combineURLs.js ***!
4564  \*******************************************************/
4565/***/ ((module) => {
4566
4567"use strict";
4568
4569
4570/**
4571 * Creates a new URL by combining the specified URLs
4572 *
4573 * @param {string} baseURL The base URL
4574 * @param {string} relativeURL The relative URL
4575 * @returns {string} The combined URL
4576 */
4577module.exports = function combineURLs(baseURL, relativeURL) {
4578  return relativeURL
4579    ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '')
4580    : baseURL;
4581};
4582
4583
4584/***/ }),
4585
vendor: 1,794 bytes, lines 4586-4649
4586/***/ "./node_modules/axios/lib/helpers/cookies.js":
4587/*!***************************************************!*\
4588  !*** ./node_modules/axios/lib/helpers/cookies.js ***!
4589  \***************************************************/
4590/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
4591
4592"use strict";
4593
4594
4595var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
4596
4597module.exports = (
4598  utils.isStandardBrowserEnv() ?
4599
4600  // Standard browser envs support document.cookie
4601    (function standardBrowserEnv() {
4602      return {
4603        write: function write(name, value, expires, path, domain, secure) {
4604          var cookie = [];
4605          cookie.push(name + '=' + encodeURIComponent(value));
4606
4607          if (utils.isNumber(expires)) {
4608            cookie.push('expires=' + new Date(expires).toGMTString());
4609          }
4610
4611          if (utils.isString(path)) {
4612            cookie.push('path=' + path);
4613          }
4614
4615          if (utils.isString(domain)) {
4616            cookie.push('domain=' + domain);
4617          }
4618
4619          if (secure === true) {
4620            cookie.push('secure');
4621          }
4622
4623          document.cookie = cookie.join('; ');
4624        },
4625
4626        read: function read(name) {
4627          var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)'));
4628          return (match ? decodeURIComponent(match[3]) : null);
4629        },
4630
4631        remove: function remove(name) {
4632          this.write(name, '', Date.now() - 86400000);
4633        }
4634      };
4635    })() :
4636
4637  // Non standard browser env (web workers, react-native) lack needed support.
4638    (function nonStandardBrowserEnv() {
4639      return {
4640        write: function write() {},
4641        read: function read() { return null; },
4642        remove: function remove() {}
4643      };
4644    })()
4645);
4646
4647
4648/***/ }),
4649
vendor: 844 bytes, lines 4650-4674
4650/***/ "./node_modules/axios/lib/helpers/isAbsoluteURL.js":
4651/*!*********************************************************!*\
4652  !*** ./node_modules/axios/lib/helpers/isAbsoluteURL.js ***!
4653  \*********************************************************/
4654/***/ ((module) => {
4655
4656"use strict";
4657
4658
4659/**
4660 * Determines whether the specified URL is absolute
4661 *
4662 * @param {string} url The URL to test
4663 * @returns {boolean} True if the specified URL is absolute, otherwise false
4664 */
4665module.exports = function isAbsoluteURL(url) {
4666  // A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL).
4667  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
4668  // by any combination of letters, digits, plus, period, or hyphen.
4669  return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url);
4670};
4671
4672
4673/***/ }),
4674
vendor: 752 bytes, lines 4675-4698
4675/***/ "./node_modules/axios/lib/helpers/isAxiosError.js":
4676/*!********************************************************!*\
4677  !*** ./node_modules/axios/lib/helpers/isAxiosError.js ***!
4678  \********************************************************/
4679/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
4680
4681"use strict";
4682
4683
4684var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
4685
4686/**
4687 * Determines whether the payload is an error thrown by Axios
4688 *
4689 * @param {*} payload The value to test
4690 * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false
4691 */
4692module.exports = function isAxiosError(payload) {
4693  return utils.isObject(payload) && (payload.isAxiosError === true);
4694};
4695
4696
4697/***/ }),
4698
vendor: 2,696 bytes, lines 4699-4777
4699/***/ "./node_modules/axios/lib/helpers/isURLSameOrigin.js":
4700/*!***********************************************************!*\
4701  !*** ./node_modules/axios/lib/helpers/isURLSameOrigin.js ***!
4702  \***********************************************************/
4703/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
4704
4705"use strict";
4706
4707
4708var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
4709
4710module.exports = (
4711  utils.isStandardBrowserEnv() ?
4712
4713  // Standard browser envs have full support of the APIs needed to test
4714  // whether the request URL is of the same origin as current location.
4715    (function standardBrowserEnv() {
4716      var msie = /(msie|trident)/i.test(navigator.userAgent);
4717      var urlParsingNode = document.createElement('a');
4718      var originURL;
4719
4720      /**
4721    * Parse a URL to discover it's components
4722    *
4723    * @param {String} url The URL to be parsed
4724    * @returns {Object}
4725    */
4726      function resolveURL(url) {
4727        var href = url;
4728
4729        if (msie) {
4730        // IE needs attribute set twice to normalize properties
4731          urlParsingNode.setAttribute('href', href);
4732          href = urlParsingNode.href;
4733        }
4734
4735        urlParsingNode.setAttribute('href', href);
4736
4737        // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils
4738        return {
4739          href: urlParsingNode.href,
4740          protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
4741          host: urlParsingNode.host,
4742          search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
4743          hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
4744          hostname: urlParsingNode.hostname,
4745          port: urlParsingNode.port,
4746          pathname: (urlParsingNode.pathname.charAt(0) === '/') ?
4747            urlParsingNode.pathname :
4748            '/' + urlParsingNode.pathname
4749        };
4750      }
4751
4752      originURL = resolveURL(window.location.href);
4753
4754      /**
4755    * Determine if a URL shares the same origin as the current location
4756    *
4757    * @param {String} requestURL The URL to test
4758    * @returns {boolean} True if URL shares the same origin, otherwise false
4759    */
4760      return function isURLSameOrigin(requestURL) {
4761        var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;
4762        return (parsed.protocol === originURL.protocol &&
4763            parsed.host === originURL.host);
4764      };
4765    })() :
4766
4767  // Non standard browser envs (web workers, react-native) lack needed support.
4768    (function nonStandardBrowserEnv() {
4769      return function isURLSameOrigin() {
4770        return true;
4771      };
4772    })()
4773);
4774
4775
4776/***/ }),
4777
vendor: 764 bytes, lines 4778-4800
4778/***/ "./node_modules/axios/lib/helpers/normalizeHeaderName.js":
4779/*!***************************************************************!*\
4780  !*** ./node_modules/axios/lib/helpers/normalizeHeaderName.js ***!
4781  \***************************************************************/
4782/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
4783
4784"use strict";
4785
4786
4787var utils = __webpack_require__(/*! ../utils */ "./node_modules/axios/lib/utils.js");
4788
4789module.exports = function normalizeHeaderName(headers, normalizedName) {
4790  utils.forEach(headers, function processHeader(value, name) {
4791    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {
4792      headers[normalizedName] = value;
4793      delete headers[name];
4794    }
4795  });
4796};
4797
4798
4799/***/ }),
4800
vendor: 1,772 bytes, lines 4801-4864
4801/***/ "./node_modules/axios/lib/helpers/parseHeaders.js":
4802/*!********************************************************!*\
4803  !*** ./node_modules/axios/lib/helpers/parseHeaders.js ***!
4804  \********************************************************/
4805/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
4806
4807"use strict";
4808
4809
4810var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
4811
4812// Headers whose duplicates are ignored by node
4813// c.f. https://nodejs.org/api/http.html#http_message_headers
4814var ignoreDuplicateOf = [
4815  'age', 'authorization', 'content-length', 'content-type', 'etag',
4816  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',
4817  'last-modified', 'location', 'max-forwards', 'proxy-authorization',
4818  'referer', 'retry-after', 'user-agent'
4819];
4820
4821/**
4822 * Parse headers into an object
4823 *
4824 * ```
4825 * Date: Wed, 27 Aug 2014 08:58:49 GMT
4826 * Content-Type: application/json
4827 * Connection: keep-alive
4828 * Transfer-Encoding: chunked
4829 * ```
4830 *
4831 * @param {String} headers Headers needing to be parsed
4832 * @returns {Object} Headers parsed into an object
4833 */
4834module.exports = function parseHeaders(headers) {
4835  var parsed = {};
4836  var key;
4837  var val;
4838  var i;
4839
4840  if (!headers) { return parsed; }
4841
4842  utils.forEach(headers.split('\n'), function parser(line) {
4843    i = line.indexOf(':');
4844    key = utils.trim(line.substr(0, i)).toLowerCase();
4845    val = utils.trim(line.substr(i + 1));
4846
4847    if (key) {
4848      if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {
4849        return;
4850      }
4851      if (key === 'set-cookie') {
4852        parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);
4853      } else {
4854        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
4855      }
4856    }
4857  });
4858
4859  return parsed;
4860};
4861
4862
4863/***/ }),
4864
vendor: 819 bytes, lines 4865-4902
4865/***/ "./node_modules/axios/lib/helpers/spread.js":
4866/*!**************************************************!*\
4867  !*** ./node_modules/axios/lib/helpers/spread.js ***!
4868  \**************************************************/
4869/***/ ((module) => {
4870
4871"use strict";
4872
4873
4874/**
4875 * Syntactic sugar for invoking a function and expanding an array for arguments.
4876 *
4877 * Common use case would be to use `Function.prototype.apply`.
4878 *
4879 *  ```js
4880 *  function f(x, y, z) {}
4881 *  var args = [1, 2, 3];
4882 *  f.apply(null, args);
4883 *  ```
4884 *
4885 * With `spread` this example can be re-written.
4886 *
4887 *  ```js
4888 *  spread(function(x, y, z) {})([1, 2, 3]);
4889 *  ```
4890 *
4891 * @param {Function} callback
4892 * @returns {Function}
4893 */
4894module.exports = function spread(callback) {
4895  return function wrap(arr) {
4896    return callback.apply(null, arr);
4897  };
4898};
4899
4900
4901/***/ }),
4902
vendor: 2,719 bytes, lines 4903-4995
4903/***/ "./node_modules/axios/lib/helpers/validator.js":
4904/*!*****************************************************!*\
4905  !*** ./node_modules/axios/lib/helpers/validator.js ***!
4906  \*****************************************************/
4907/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
4908
4909"use strict";
4910
4911
4912var VERSION = (__webpack_require__(/*! ../env/data */ "./node_modules/axios/lib/env/data.js").version);
4913
4914var validators = {};
4915
4916// eslint-disable-next-line func-names
4917['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {
4918  validators[type] = function validator(thing) {
4919    return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;
4920  };
4921});
4922
4923var deprecatedWarnings = {};
4924
4925/**
4926 * Transitional option validator
4927 * @param {function|boolean?} validator - set to false if the transitional option has been removed
4928 * @param {string?} version - deprecated version / removed since version
4929 * @param {string?} message - some message with additional info
4930 * @returns {function}
4931 */
4932validators.transitional = function transitional(validator, version, message) {
4933  function formatMessage(opt, desc) {
4934    return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : '');
4935  }
4936
4937  // eslint-disable-next-line func-names
4938  return function(value, opt, opts) {
4939    if (validator === false) {
4940      throw new Error(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')));
4941    }
4942
4943    if (version && !deprecatedWarnings[opt]) {
4944      deprecatedWarnings[opt] = true;
4945      // eslint-disable-next-line no-console
4946      console.warn(
4947        formatMessage(
4948          opt,
4949          ' has been deprecated since v' + version + ' and will be removed in the near future'
4950        )
4951      );
4952    }
4953
4954    return validator ? validator(value, opt, opts) : true;
4955  };
4956};
4957
4958/**
4959 * Assert object's properties type
4960 * @param {object} options
4961 * @param {object} schema
4962 * @param {boolean?} allowUnknown
4963 */
4964
4965function assertOptions(options, schema, allowUnknown) {
4966  if (typeof options !== 'object') {
4967    throw new TypeError('options must be an object');
4968  }
4969  var keys = Object.keys(options);
4970  var i = keys.length;
4971  while (i-- > 0) {
4972    var opt = keys[i];
4973    var validator = schema[opt];
4974    if (validator) {
4975      var value = options[opt];
4976      var result = value === undefined || validator(value, opt, options);
4977      if (result !== true) {
4978        throw new TypeError('option ' + opt + ' must be ' + result);
4979      }
4980      continue;
4981    }
4982    if (allowUnknown !== true) {
4983      throw Error('Unknown option ' + opt);
4984    }
4985  }
4986}
4987
4988module.exports = {
4989  assertOptions: assertOptions,
4990  validators: validators
4991};
4992
4993
4994/***/ }),
4995
vendor: 12,380 bytes, lines 4996-5433
4996/***/ "./node_modules/axios/lib/utils.js":
4997/*!*****************************************!*\
4998  !*** ./node_modules/axios/lib/utils.js ***!
4999  \*****************************************/
5000/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
5001
5002"use strict";
5003
5004
5005var bind = __webpack_require__(/*! ./helpers/bind */ "./node_modules/axios/lib/helpers/bind.js");
5006
5007// utils is a library of generic helper functions non-specific to axios
5008
5009var toString = Object.prototype.toString;
5010
5011/**
5012 * Determine if a value is an Array
5013 *
5014 * @param {Object} val The value to test
5015 * @returns {boolean} True if value is an Array, otherwise false
5016 */
5017function isArray(val) {
5018  return Array.isArray(val);
5019}
5020
5021/**
5022 * Determine if a value is undefined
5023 *
5024 * @param {Object} val The value to test
5025 * @returns {boolean} True if the value is undefined, otherwise false
5026 */
5027function isUndefined(val) {
5028  return typeof val === 'undefined';
5029}
5030
5031/**
5032 * Determine if a value is a Buffer
5033 *
5034 * @param {Object} val The value to test
5035 * @returns {boolean} True if value is a Buffer, otherwise false
5036 */
5037function isBuffer(val) {
5038  return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)
5039    && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);
5040}
5041
5042/**
5043 * Determine if a value is an ArrayBuffer
5044 *
5045 * @param {Object} val The value to test
5046 * @returns {boolean} True if value is an ArrayBuffer, otherwise false
5047 */
5048function isArrayBuffer(val) {
5049  return toString.call(val) === '[object ArrayBuffer]';
5050}
5051
5052/**
5053 * Determine if a value is a FormData
5054 *
5055 * @param {Object} val The value to test
5056 * @returns {boolean} True if value is an FormData, otherwise false
5057 */
5058function isFormData(val) {
5059  return toString.call(val) === '[object FormData]';
5060}
5061
5062/**
5063 * Determine if a value is a view on an ArrayBuffer
5064 *
5065 * @param {Object} val The value to test
5066 * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false
5067 */
5068function isArrayBufferView(val) {
5069  var result;
5070  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {
5071    result = ArrayBuffer.isView(val);
5072  } else {
5073    result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));
5074  }
5075  return result;
5076}
5077
5078/**
5079 * Determine if a value is a String
5080 *
5081 * @param {Object} val The value to test
5082 * @returns {boolean} True if value is a String, otherwise false
5083 */
5084function isString(val) {
5085  return typeof val === 'string';
5086}
5087
5088/**
5089 * Determine if a value is a Number
5090 *
5091 * @param {Object} val The value to test
5092 * @returns {boolean} True if value is a Number, otherwise false
5093 */
5094function isNumber(val) {
5095  return typeof val === 'number';
5096}
5097
5098/**
5099 * Determine if a value is an Object
5100 *
5101 * @param {Object} val The value to test
5102 * @returns {boolean} True if value is an Object, otherwise false
5103 */
5104function isObject(val) {
5105  return val !== null && typeof val === 'object';
5106}
5107
5108/**
5109 * Determine if a value is a plain Object
5110 *
5111 * @param {Object} val The value to test
5112 * @return {boolean} True if value is a plain Object, otherwise false
5113 */
5114function isPlainObject(val) {
5115  if (toString.call(val) !== '[object Object]') {
5116    return false;
5117  }
5118
5119  var prototype = Object.getPrototypeOf(val);
5120  return prototype === null || prototype === Object.prototype;
5121}
5122
5123/**
5124 * Determine if a value is a Date
5125 *
5126 * @param {Object} val The value to test
5127 * @returns {boolean} True if value is a Date, otherwise false
5128 */
5129function isDate(val) {
5130  return toString.call(val) === '[object Date]';
5131}
5132
5133/**
5134 * Determine if a value is a File
5135 *
5136 * @param {Object} val The value to test
5137 * @returns {boolean} True if value is a File, otherwise false
5138 */
5139function isFile(val) {
5140  return toString.call(val) === '[object File]';
5141}
5142
5143/**
5144 * Determine if a value is a Blob
5145 *
5146 * @param {Object} val The value to test
5147 * @returns {boolean} True if value is a Blob, otherwise false
5148 */
5149function isBlob(val) {
5150  return toString.call(val) === '[object Blob]';
5151}
5152
5153/**
5154 * Determine if a value is a Function
5155 *
5156 * @param {Object} val The value to test
5157 * @returns {boolean} True if value is a Function, otherwise false
5158 */
5159function isFunction(val) {
5160  return toString.call(val) === '[object Function]';
5161}
5162
5163/**
5164 * Determine if a value is a Stream
5165 *
5166 * @param {Object} val The value to test
5167 * @returns {boolean} True if value is a Stream, otherwise false
5168 */
5169function isStream(val) {
5170  return isObject(val) && isFunction(val.pipe);
5171}
5172
5173/**
5174 * Determine if a value is a URLSearchParams object
5175 *
5176 * @param {Object} val The value to test
5177 * @returns {boolean} True if value is a URLSearchParams object, otherwise false
5178 */
5179function isURLSearchParams(val) {
5180  return toString.call(val) === '[object URLSearchParams]';
5181}
5182
5183/**
5184 * Trim excess whitespace off the beginning and end of a string
5185 *
5186 * @param {String} str The String to trim
5187 * @returns {String} The String freed of excess whitespace
5188 */
5189function trim(str) {
5190  return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, '');
5191}
5192
5193/**
5194 * Determine if we're running in a standard browser environment
5195 *
5196 * This allows axios to run in a web worker, and react-native.
5197 * Both environments support XMLHttpRequest, but not fully standard globals.
5198 *
5199 * web workers:
5200 *  typeof window -> undefined
5201 *  typeof document -> undefined
5202 *
5203 * react-native:
5204 *  navigator.product -> 'ReactNative'
5205 * nativescript
5206 *  navigator.product -> 'NativeScript' or 'NS'
5207 */
5208function isStandardBrowserEnv() {
5209  if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||
5210                                           navigator.product === 'NativeScript' ||
5211                                           navigator.product === 'NS')) {
5212    return false;
5213  }
5214  return (
5215    typeof window !== 'undefined' &&
5216    typeof document !== 'undefined'
5217  );
5218}
5219
5220/**
5221 * Iterate over an Array or an Object invoking a function for each item.
5222 *
5223 * If `obj` is an Array callback will be called passing
5224 * the value, index, and complete array for each item.
5225 *
5226 * If 'obj' is an Object callback will be called passing
5227 * the value, key, and complete object for each property.
5228 *
5229 * @param {Object|Array} obj The object to iterate
5230 * @param {Function} fn The callback to invoke for each item
5231 */
5232function forEach(obj, fn) {
5233  // Don't bother if no value provided
5234  if (obj === null || typeof obj === 'undefined') {
5235    return;
5236  }
5237
5238  // Force an array if not already something iterable
5239  if (typeof obj !== 'object') {
5240    /*eslint no-param-reassign:0*/
5241    obj = [obj];
5242  }
5243
5244  if (isArray(obj)) {
5245    // Iterate over array values
5246    for (var i = 0, l = obj.length; i < l; i++) {
5247      fn.call(null, obj[i], i, obj);
5248    }
5249  } else {
5250    // Iterate over object keys
5251    for (var key in obj) {
5252      if (Object.prototype.hasOwnProperty.call(obj, key)) {
5253        fn.call(null, obj[key], key, obj);
5254      }
5255    }
5256  }
5257}
5258
5259/**
5260 * Accepts varargs expecting each argument to be an object, then
5261 * immutably merges the properties of each object and returns result.
5262 *
5263 * When multiple objects contain the same key the later object in
5264 * the arguments list will take precedence.
5265 *
5266 * Example:
5267 *
5268 * ```js
5269 * var result = merge({foo: 123}, {foo: 456});
5270 * console.log(result.foo); // outputs 456
5271 * ```
5272 *
5273 * @param {Object} obj1 Object to merge
5274 * @returns {Object} Result of all merge properties
5275 */
5276function merge(/* obj1, obj2, obj3, ... */) {
5277  var result = {};
5278  function assignValue(val, key) {
5279    if (isPlainObject(result[key]) && isPlainObject(val)) {
5280      result[key] = merge(result[key], val);
5281    } else if (isPlainObject(val)) {
5282      result[key] = merge({}, val);
5283    } else if (isArray(val)) {
5284      result[key] = val.slice();
5285    } else {
5286      result[key] = val;
5287    }
5288  }
5289
5290  for (var i = 0, l = arguments.length; i < l; i++) {
5291    forEach(arguments[i], assignValue);
5292  }
5293  return result;
5294}
5295
5296/**
5297 * Extends object a by mutably adding to it the properties of object b.
5298 *
5299 * @param {Object} a The object to be extended
5300 * @param {Object} b The object to copy properties from
5301 * @param {Object} thisArg The object to bind function to
5302 * @return {Object} The resulting value of object a
5303 */
5304function extend(a, b, thisArg) {
5305  forEach(b, function assignValue(val, key) {
5306    if (thisArg && typeof val === 'function') {
5307      a[key] = bind(val, thisArg);
5308    } else {
5309      a[key] = val;
5310    }
5311  });
5312  return a;
5313}
5314
5315/**
5316 * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)
5317 *
5318 * @param {string} content with BOM
5319 * @return {string} content value without BOM
5320 */
5321function stripBOM(content) {
5322  if (content.charCodeAt(0) === 0xFEFF) {
5323    content = content.slice(1);
5324  }
5325  return content;
5326}
5327
5328module.exports = {
5329  isArray: isArray,
5330  isArrayBuffer: isArrayBuffer,
5331  isBuffer: isBuffer,
5332  isFormData: isFormData,
5333  isArrayBufferView: isArrayBufferView,
5334  isString: isString,
5335  isNumber: isNumber,
5336  isObject: isObject,
5337  isPlainObject: isPlainObject,
5338  isUndefined: isUndefined,
5339  isDate: isDate,
5340  isFile: isFile,
5341  isBlob: isBlob,
5342  isFunction: isFunction,
5343  isStream: isStream,
5344  isURLSearchParams: isURLSearchParams,
5345  isStandardBrowserEnv: isStandardBrowserEnv,
5346  forEach: forEach,
5347  merge: merge,
5348  extend: extend,
5349  trim: trim,
5350  stripBOM: stripBOM
5351};
5352
5353
5354/***/ }),
5355
5356/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/ExampleComponent.vue?vue&type=script&lang=js&":
5357/*!***********************************************************************************************************************************************************************************************************************!*\
5358  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/ExampleComponent.vue?vue&type=script&lang=js& ***!
5359  \***********************************************************************************************************************************************************************************************************************/
5360/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
5361
5362"use strict";
5363__webpack_require__.r(__webpack_exports__);
5364/* harmony export */ __webpack_require__.d(__webpack_exports__, {
5365/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
5366/* harmony export */ });
5367//
5368//
5369//
5370//
5371//
5372//
5373//
5374//
5375//
5376//
5377//
5378//
5379//
5380//
5381//
5382//
5383/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
5384  mounted: function mounted() {
5385    console.log('Component mounted.');
5386  }
5387});
5388
5389/***/ }),
5390
5391/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/RoleAssignButton.vue?vue&type=script&lang=js&":
5392/*!***********************************************************************************************************************************************************************************************************************!*\
5393  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/RoleAssignButton.vue?vue&type=script&lang=js& ***!
5394  \***********************************************************************************************************************************************************************************************************************/
5395/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
5396
5397"use strict";
5398__webpack_require__.r(__webpack_exports__);
5399/* harmony export */ __webpack_require__.d(__webpack_exports__, {
5400/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
5401/* harmony export */ });
5402//
5403//
5404//
5405//
5406//
5407//
5408/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
5409  name: "role-assign-button",
5410  props: ['userid', 'roleid', 'assigned'],
5411  data: function data() {
5412    return {
5413      status: this.assigned
5414    };
5415  },
5416  methods: {
5417    roleAssignment: function roleAssignment() {
5418      var _this = this;
5419
5420      axios.post('/administration/roles/assign/' + this.userid + '/' + this.roleid).then(function (response) {
5421        _this.assigned = !_this.assigned;
5422      });
5423    }
5424  },
5425  computed: {
5426    buttonText: function buttonText() {
5427      return this.assigned ? 'Assigned' : 'Unassigned';
5428    }
5429  }
5430});
5431
5432/***/ }),
5433
5434/***/ "./resources/js/app.js":
5435/*!*****************************!*\
5436  !*** ./resources/js/app.js ***!
5437  \*****************************/
5438/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
5439
5440/**
5441 * First we will load all of this project's JavaScript dependencies which
5442 * includes Vue and other libraries. It is a great starting point when
5443 * building robust, powerful web applications using Vue and Laravel.
5444 */
5445__webpack_require__(/*! ./bootstrap */ "./resources/js/bootstrap.js");
5446
5447window.Vue = (__webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm.js")["default"]);
5448/**
5449 * The following block of code may be used to automatically register your
5450 * Vue components. It will recursively scan this directory for the Vue
5451 * components and automatically register them with their "basename".
5452 *
5453 * Eg. ./components/ExampleComponent.vue -> <example-component></example-component>
5454 */
5455// const files = require.context('./', true, /\.vue$/i)
5456// files.keys().map(key => Vue.component(key.split('/').pop().split('.')[0], files(key).default))
5457
5458Vue.component('example-component', (__webpack_require__(/*! ./components/ExampleComponent.vue */ "./resources/js/components/ExampleComponent.vue")["default"]));
5459Vue.component('role-assign-button', (__webpack_require__(/*! ./components/RoleAssignButton.vue */ "./resources/js/components/RoleAssignButton.vue")["default"]));
5460/**
5461 * Next, we will create a fresh Vue application instance and attach it to
5462 * the page. Then, you may begin adding components to this application
5463 * or customize the JavaScript scaffolding to fit your unique needs.
5464 */
5465
5466var app = new Vue({
5467  el: '#app'
5468});
5469
5470/***/ }),
5471
5472/***/ "./resources/js/bootstrap.js":
5473/*!***********************************!*\
5474  !*** ./resources/js/bootstrap.js ***!
5475  \***********************************/
5476/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
5477
5478window._ = __webpack_require__(/*! lodash */ "./node_modules/lodash/lodash.js");
5479
5480try {
5481  __webpack_require__(/*! bootstrap */ "./node_modules/bootstrap/dist/js/bootstrap.esm.js");
5482} catch (e) {}
5483/**
5484 * We'll load the axios HTTP library which allows us to easily issue requests
5485 * to our Laravel back-end. This library automatically handles sending the
5486 * CSRF token as a header based on the value of the "XSRF" token cookie.
5487 */
5488
5489
5490window.axios = __webpack_require__(/*! axios */ "./node_modules/axios/index.js");
5491window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
5492/**
5493 * Echo exposes an expressive API for subscribing to channels and listening
5494 * for events that are broadcast by Laravel. Echo and event broadcasting
5495 * allows your team to easily build robust real-time web applications.
5496 */
5497// import Echo from 'laravel-echo';
5498// window.Pusher = require('pusher-js');
5499// window.Echo = new Echo({
5500//     broadcaster: 'pusher',
5501//     key: process.env.MIX_PUSHER_APP_KEY,
5502//     cluster: process.env.MIX_PUSHER_APP_CLUSTER,
5503//     forceTLS: true
5504// });
5505
5506/***/ }),
5507
vendor: 141,348 bytes, lines 5508-10534
5508/***/ "./node_modules/bootstrap/dist/js/bootstrap.esm.js":
5509/*!*********************************************************!*\
5510  !*** ./node_modules/bootstrap/dist/js/bootstrap.esm.js ***!
5511  \*********************************************************/
5512/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
5513
5514"use strict";
5515__webpack_require__.r(__webpack_exports__);
5516/* harmony export */ __webpack_require__.d(__webpack_exports__, {
5517/* harmony export */   "Alert": () => (/* binding */ Alert),
5518/* harmony export */   "Button": () => (/* binding */ Button),
5519/* harmony export */   "Carousel": () => (/* binding */ Carousel),
5520/* harmony export */   "Collapse": () => (/* binding */ Collapse),
5521/* harmony export */   "Dropdown": () => (/* binding */ Dropdown),
5522/* harmony export */   "Modal": () => (/* binding */ Modal),
5523/* harmony export */   "Offcanvas": () => (/* binding */ Offcanvas),
5524/* harmony export */   "Popover": () => (/* binding */ Popover),
5525/* harmony export */   "ScrollSpy": () => (/* binding */ ScrollSpy),
5526/* harmony export */   "Tab": () => (/* binding */ Tab),
5527/* harmony export */   "Toast": () => (/* binding */ Toast),
5528/* harmony export */   "Tooltip": () => (/* binding */ Tooltip)
5529/* harmony export */ });
5530/* harmony import */ var _popperjs_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @popperjs/core */ "./node_modules/@popperjs/core/lib/index.js");
5531/* harmony import */ var _popperjs_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @popperjs/core */ "./node_modules/@popperjs/core/lib/popper.js");
5532/*!
5533  * Bootstrap v5.1.3 (https://getbootstrap.com/)
5534  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
5535  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5536  */
5537
5538
5539/**
5540 * --------------------------------------------------------------------------
5541 * Bootstrap (v5.1.3): util/index.js
5542 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5543 * --------------------------------------------------------------------------
5544 */
5545const MAX_UID = 1000000;
5546const MILLISECONDS_MULTIPLIER = 1000;
5547const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
5548
5549const toType = obj => {
5550  if (obj === null || obj === undefined) {
5551    return `${obj}`;
5552  }
5553
5554  return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
5555};
5556/**
5557 * --------------------------------------------------------------------------
5558 * Public Util Api
5559 * --------------------------------------------------------------------------
5560 */
5561
5562
5563const getUID = prefix => {
5564  do {
5565    prefix += Math.floor(Math.random() * MAX_UID);
5566  } while (document.getElementById(prefix));
5567
5568  return prefix;
5569};
5570
5571const getSelector = element => {
5572  let selector = element.getAttribute('data-bs-target');
5573
5574  if (!selector || selector === '#') {
5575    let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
5576    // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
5577    // `document.querySelector` will rightfully complain it is invalid.
5578    // See https://github.com/twbs/bootstrap/issues/32273
5579
5580    if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
5581      return null;
5582    } // Just in case some CMS puts out a full URL with the anchor appended
5583
5584
5585    if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
5586      hrefAttr = `#${hrefAttr.split('#')[1]}`;
5587    }
5588
5589    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
5590  }
5591
5592  return selector;
5593};
5594
5595const getSelectorFromElement = element => {
5596  const selector = getSelector(element);
5597
5598  if (selector) {
5599    return document.querySelector(selector) ? selector : null;
5600  }
5601
5602  return null;
5603};
5604
5605const getElementFromSelector = element => {
5606  const selector = getSelector(element);
5607  return selector ? document.querySelector(selector) : null;
5608};
5609
5610const getTransitionDurationFromElement = element => {
5611  if (!element) {
5612    return 0;
5613  } // Get transition-duration of the element
5614
5615
5616  let {
5617    transitionDuration,
5618    transitionDelay
5619  } = window.getComputedStyle(element);
5620  const floatTransitionDuration = Number.parseFloat(transitionDuration);
5621  const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
5622
5623  if (!floatTransitionDuration && !floatTransitionDelay) {
5624    return 0;
5625  } // If multiple durations are defined, take the first
5626
5627
5628  transitionDuration = transitionDuration.split(',')[0];
5629  transitionDelay = transitionDelay.split(',')[0];
5630  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
5631};
5632
5633const triggerTransitionEnd = element => {
5634  element.dispatchEvent(new Event(TRANSITION_END));
5635};
5636
5637const isElement = obj => {
5638  if (!obj || typeof obj !== 'object') {
5639    return false;
5640  }
5641
5642  if (typeof obj.jquery !== 'undefined') {
5643    obj = obj[0];
5644  }
5645
5646  return typeof obj.nodeType !== 'undefined';
5647};
5648
5649const getElement = obj => {
5650  if (isElement(obj)) {
5651    // it's a jQuery object or a node element
5652    return obj.jquery ? obj[0] : obj;
5653  }
5654
5655  if (typeof obj === 'string' && obj.length > 0) {
5656    return document.querySelector(obj);
5657  }
5658
5659  return null;
5660};
5661
5662const typeCheckConfig = (componentName, config, configTypes) => {
5663  Object.keys(configTypes).forEach(property => {
5664    const expectedTypes = configTypes[property];
5665    const value = config[property];
5666    const valueType = value && isElement(value) ? 'element' : toType(value);
5667
5668    if (!new RegExp(expectedTypes).test(valueType)) {
5669      throw new TypeError(`${componentName.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
5670    }
5671  });
5672};
5673
5674const isVisible = element => {
5675  if (!isElement(element) || element.getClientRects().length === 0) {
5676    return false;
5677  }
5678
5679  return getComputedStyle(element).getPropertyValue('visibility') === 'visible';
5680};
5681
5682const isDisabled = element => {
5683  if (!element || element.nodeType !== Node.ELEMENT_NODE) {
5684    return true;
5685  }
5686
5687  if (element.classList.contains('disabled')) {
5688    return true;
5689  }
5690
5691  if (typeof element.disabled !== 'undefined') {
5692    return element.disabled;
5693  }
5694
5695  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
5696};
5697
5698const findShadowRoot = element => {
5699  if (!document.documentElement.attachShadow) {
5700    return null;
5701  } // Can find the shadow root otherwise it'll return the document
5702
5703
5704  if (typeof element.getRootNode === 'function') {
5705    const root = element.getRootNode();
5706    return root instanceof ShadowRoot ? root : null;
5707  }
5708
5709  if (element instanceof ShadowRoot) {
5710    return element;
5711  } // when we don't find a shadow root
5712
5713
5714  if (!element.parentNode) {
5715    return null;
5716  }
5717
5718  return findShadowRoot(element.parentNode);
5719};
5720
5721const noop = () => {};
5722/**
5723 * Trick to restart an element's animation
5724 *
5725 * @param {HTMLElement} element
5726 * @return void
5727 *
5728 * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
5729 */
5730
5731
5732const reflow = element => {
5733  // eslint-disable-next-line no-unused-expressions
5734  element.offsetHeight;
5735};
5736
5737const getjQuery = () => {
5738  const {
5739    jQuery
5740  } = window;
5741
5742  if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
5743    return jQuery;
5744  }
5745
5746  return null;
5747};
5748
5749const DOMContentLoadedCallbacks = [];
5750
5751const onDOMContentLoaded = callback => {
5752  if (document.readyState === 'loading') {
5753    // add listener on the first call when the document is in loading state
5754    if (!DOMContentLoadedCallbacks.length) {
5755      document.addEventListener('DOMContentLoaded', () => {
5756        DOMContentLoadedCallbacks.forEach(callback => callback());
5757      });
5758    }
5759
5760    DOMContentLoadedCallbacks.push(callback);
5761  } else {
5762    callback();
5763  }
5764};
5765
5766const isRTL = () => document.documentElement.dir === 'rtl';
5767
5768const defineJQueryPlugin = plugin => {
5769  onDOMContentLoaded(() => {
5770    const $ = getjQuery();
5771    /* istanbul ignore if */
5772
5773    if ($) {
5774      const name = plugin.NAME;
5775      const JQUERY_NO_CONFLICT = $.fn[name];
5776      $.fn[name] = plugin.jQueryInterface;
5777      $.fn[name].Constructor = plugin;
5778
5779      $.fn[name].noConflict = () => {
5780        $.fn[name] = JQUERY_NO_CONFLICT;
5781        return plugin.jQueryInterface;
5782      };
5783    }
5784  });
5785};
5786
5787const execute = callback => {
5788  if (typeof callback === 'function') {
5789    callback();
5790  }
5791};
5792
5793const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
5794  if (!waitForTransition) {
5795    execute(callback);
5796    return;
5797  }
5798
5799  const durationPadding = 5;
5800  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
5801  let called = false;
5802
5803  const handler = ({
5804    target
5805  }) => {
5806    if (target !== transitionElement) {
5807      return;
5808    }
5809
5810    called = true;
5811    transitionElement.removeEventListener(TRANSITION_END, handler);
5812    execute(callback);
5813  };
5814
5815  transitionElement.addEventListener(TRANSITION_END, handler);
5816  setTimeout(() => {
5817    if (!called) {
5818      triggerTransitionEnd(transitionElement);
5819    }
5820  }, emulatedDuration);
5821};
5822/**
5823 * Return the previous/next element of a list.
5824 *
5825 * @param {array} list    The list of elements
5826 * @param activeElement   The active element
5827 * @param shouldGetNext   Choose to get next or previous element
5828 * @param isCycleAllowed
5829 * @return {Element|elem} The proper element
5830 */
5831
5832
5833const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {
5834  let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed
5835
5836  if (index === -1) {
5837    return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];
5838  }
5839
5840  const listLength = list.length;
5841  index += shouldGetNext ? 1 : -1;
5842
5843  if (isCycleAllowed) {
5844    index = (index + listLength) % listLength;
5845  }
5846
5847  return list[Math.max(0, Math.min(index, listLength - 1))];
5848};
5849
5850/**
5851 * --------------------------------------------------------------------------
5852 * Bootstrap (v5.1.3): dom/event-handler.js
5853 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5854 * --------------------------------------------------------------------------
5855 */
5856/**
5857 * ------------------------------------------------------------------------
5858 * Constants
5859 * ------------------------------------------------------------------------
5860 */
5861
5862const namespaceRegex = /[^.]*(?=\..*)\.|.*/;
5863const stripNameRegex = /\..*/;
5864const stripUidRegex = /::\d+$/;
5865const eventRegistry = {}; // Events storage
5866
5867let uidEvent = 1;
5868const customEvents = {
5869  mouseenter: 'mouseover',
5870  mouseleave: 'mouseout'
5871};
5872const customEventsRegex = /^(mouseenter|mouseleave)/i;
5873const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);
5874/**
5875 * ------------------------------------------------------------------------
5876 * Private methods
5877 * ------------------------------------------------------------------------
5878 */
5879
5880function getUidEvent(element, uid) {
5881  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;
5882}
5883
5884function getEvent(element) {
5885  const uid = getUidEvent(element);
5886  element.uidEvent = uid;
5887  eventRegistry[uid] = eventRegistry[uid] || {};
5888  return eventRegistry[uid];
5889}
5890
5891function bootstrapHandler(element, fn) {
5892  return function handler(event) {
5893    event.delegateTarget = element;
5894
5895    if (handler.oneOff) {
5896      EventHandler.off(element, event.type, fn);
5897    }
5898
5899    return fn.apply(element, [event]);
5900  };
5901}
5902
5903function bootstrapDelegationHandler(element, selector, fn) {
5904  return function handler(event) {
5905    const domElements = element.querySelectorAll(selector);
5906
5907    for (let {
5908      target
5909    } = event; target && target !== this; target = target.parentNode) {
5910      for (let i = domElements.length; i--;) {
5911        if (domElements[i] === target) {
5912          event.delegateTarget = target;
5913
5914          if (handler.oneOff) {
5915            EventHandler.off(element, event.type, selector, fn);
5916          }
5917
5918          return fn.apply(target, [event]);
5919        }
5920      }
5921    } // To please ESLint
5922
5923
5924    return null;
5925  };
5926}
5927
5928function findHandler(events, handler, delegationSelector = null) {
5929  const uidEventList = Object.keys(events);
5930
5931  for (let i = 0, len = uidEventList.length; i < len; i++) {
5932    const event = events[uidEventList[i]];
5933
5934    if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {
5935      return event;
5936    }
5937  }
5938
5939  return null;
5940}
5941
5942function normalizeParams(originalTypeEvent, handler, delegationFn) {
5943  const delegation = typeof handler === 'string';
5944  const originalHandler = delegation ? delegationFn : handler;
5945  let typeEvent = getTypeEvent(originalTypeEvent);
5946  const isNative = nativeEvents.has(typeEvent);
5947
5948  if (!isNative) {
5949    typeEvent = originalTypeEvent;
5950  }
5951
5952  return [delegation, originalHandler, typeEvent];
5953}
5954
5955function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {
5956  if (typeof originalTypeEvent !== 'string' || !element) {
5957    return;
5958  }
5959
5960  if (!handler) {
5961    handler = delegationFn;
5962    delegationFn = null;
5963  } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
5964  // this prevents the handler from being dispatched the same way as mouseover or mouseout does
5965
5966
5967  if (customEventsRegex.test(originalTypeEvent)) {
5968    const wrapFn = fn => {
5969      return function (event) {
5970        if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {
5971          return fn.call(this, event);
5972        }
5973      };
5974    };
5975
5976    if (delegationFn) {
5977      delegationFn = wrapFn(delegationFn);
5978    } else {
5979      handler = wrapFn(handler);
5980    }
5981  }
5982
5983  const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);
5984  const events = getEvent(element);
5985  const handlers = events[typeEvent] || (events[typeEvent] = {});
5986  const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);
5987
5988  if (previousFn) {
5989    previousFn.oneOff = previousFn.oneOff && oneOff;
5990    return;
5991  }
5992
5993  const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));
5994  const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);
5995  fn.delegationSelector = delegation ? handler : null;
5996  fn.originalHandler = originalHandler;
5997  fn.oneOff = oneOff;
5998  fn.uidEvent = uid;
5999  handlers[uid] = fn;
6000  element.addEventListener(typeEvent, fn, delegation);
6001}
6002
6003function removeHandler(element, events, typeEvent, handler, delegationSelector) {
6004  const fn = findHandler(events[typeEvent], handler, delegationSelector);
6005
6006  if (!fn) {
6007    return;
6008  }
6009
6010  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));
6011  delete events[typeEvent][fn.uidEvent];
6012}
6013
6014function removeNamespacedHandlers(element, events, typeEvent, namespace) {
6015  const storeElementEvent = events[typeEvent] || {};
6016  Object.keys(storeElementEvent).forEach(handlerKey => {
6017    if (handlerKey.includes(namespace)) {
6018      const event = storeElementEvent[handlerKey];
6019      removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);
6020    }
6021  });
6022}
6023
6024function getTypeEvent(event) {
6025  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')
6026  event = event.replace(stripNameRegex, '');
6027  return customEvents[event] || event;
6028}
6029
6030const EventHandler = {
6031  on(element, event, handler, delegationFn) {
6032    addHandler(element, event, handler, delegationFn, false);
6033  },
6034
6035  one(element, event, handler, delegationFn) {
6036    addHandler(element, event, handler, delegationFn, true);
6037  },
6038
6039  off(element, originalTypeEvent, handler, delegationFn) {
6040    if (typeof originalTypeEvent !== 'string' || !element) {
6041      return;
6042    }
6043
6044    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);
6045    const inNamespace = typeEvent !== originalTypeEvent;
6046    const events = getEvent(element);
6047    const isNamespace = originalTypeEvent.startsWith('.');
6048
6049    if (typeof originalHandler !== 'undefined') {
6050      // Simplest case: handler is passed, remove that listener ONLY.
6051      if (!events || !events[typeEvent]) {
6052        return;
6053      }
6054
6055      removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);
6056      return;
6057    }
6058
6059    if (isNamespace) {
6060      Object.keys(events).forEach(elementEvent => {
6061        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));
6062      });
6063    }
6064
6065    const storeElementEvent = events[typeEvent] || {};
6066    Object.keys(storeElementEvent).forEach(keyHandlers => {
6067      const handlerKey = keyHandlers.replace(stripUidRegex, '');
6068
6069      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
6070        const event = storeElementEvent[keyHandlers];
6071        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);
6072      }
6073    });
6074  },
6075
6076  trigger(element, event, args) {
6077    if (typeof event !== 'string' || !element) {
6078      return null;
6079    }
6080
6081    const $ = getjQuery();
6082    const typeEvent = getTypeEvent(event);
6083    const inNamespace = event !== typeEvent;
6084    const isNative = nativeEvents.has(typeEvent);
6085    let jQueryEvent;
6086    let bubbles = true;
6087    let nativeDispatch = true;
6088    let defaultPrevented = false;
6089    let evt = null;
6090
6091    if (inNamespace && $) {
6092      jQueryEvent = $.Event(event, args);
6093      $(element).trigger(jQueryEvent);
6094      bubbles = !jQueryEvent.isPropagationStopped();
6095      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
6096      defaultPrevented = jQueryEvent.isDefaultPrevented();
6097    }
6098
6099    if (isNative) {
6100      evt = document.createEvent('HTMLEvents');
6101      evt.initEvent(typeEvent, bubbles, true);
6102    } else {
6103      evt = new CustomEvent(event, {
6104        bubbles,
6105        cancelable: true
6106      });
6107    } // merge custom information in our event
6108
6109
6110    if (typeof args !== 'undefined') {
6111      Object.keys(args).forEach(key => {
6112        Object.defineProperty(evt, key, {
6113          get() {
6114            return args[key];
6115          }
6116
6117        });
6118      });
6119    }
6120
6121    if (defaultPrevented) {
6122      evt.preventDefault();
6123    }
6124
6125    if (nativeDispatch) {
6126      element.dispatchEvent(evt);
6127    }
6128
6129    if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {
6130      jQueryEvent.preventDefault();
6131    }
6132
6133    return evt;
6134  }
6135
6136};
6137
6138/**
6139 * --------------------------------------------------------------------------
6140 * Bootstrap (v5.1.3): dom/data.js
6141 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6142 * --------------------------------------------------------------------------
6143 */
6144
6145/**
6146 * ------------------------------------------------------------------------
6147 * Constants
6148 * ------------------------------------------------------------------------
6149 */
6150const elementMap = new Map();
6151const Data = {
6152  set(element, key, instance) {
6153    if (!elementMap.has(element)) {
6154      elementMap.set(element, new Map());
6155    }
6156
6157    const instanceMap = elementMap.get(element); // make it clear we only want one instance per element
6158    // can be removed later when multiple key/instances are fine to be used
6159
6160    if (!instanceMap.has(key) && instanceMap.size !== 0) {
6161      // eslint-disable-next-line no-console
6162      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);
6163      return;
6164    }
6165
6166    instanceMap.set(key, instance);
6167  },
6168
6169  get(element, key) {
6170    if (elementMap.has(element)) {
6171      return elementMap.get(element).get(key) || null;
6172    }
6173
6174    return null;
6175  },
6176
6177  remove(element, key) {
6178    if (!elementMap.has(element)) {
6179      return;
6180    }
6181
6182    const instanceMap = elementMap.get(element);
6183    instanceMap.delete(key); // free up element references if there are no instances left for an element
6184
6185    if (instanceMap.size === 0) {
6186      elementMap.delete(element);
6187    }
6188  }
6189
6190};
6191
6192/**
6193 * --------------------------------------------------------------------------
6194 * Bootstrap (v5.1.3): base-component.js
6195 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6196 * --------------------------------------------------------------------------
6197 */
6198/**
6199 * ------------------------------------------------------------------------
6200 * Constants
6201 * ------------------------------------------------------------------------
6202 */
6203
6204const VERSION = '5.1.3';
6205
6206class BaseComponent {
6207  constructor(element) {
6208    element = getElement(element);
6209
6210    if (!element) {
6211      return;
6212    }
6213
6214    this._element = element;
6215    Data.set(this._element, this.constructor.DATA_KEY, this);
6216  }
6217
6218  dispose() {
6219    Data.remove(this._element, this.constructor.DATA_KEY);
6220    EventHandler.off(this._element, this.constructor.EVENT_KEY);
6221    Object.getOwnPropertyNames(this).forEach(propertyName => {
6222      this[propertyName] = null;
6223    });
6224  }
6225
6226  _queueCallback(callback, element, isAnimated = true) {
6227    executeAfterTransition(callback, element, isAnimated);
6228  }
6229  /** Static */
6230
6231
6232  static getInstance(element) {
6233    return Data.get(getElement(element), this.DATA_KEY);
6234  }
6235
6236  static getOrCreateInstance(element, config = {}) {
6237    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);
6238  }
6239
6240  static get VERSION() {
6241    return VERSION;
6242  }
6243
6244  static get NAME() {
6245    throw new Error('You have to implement the static method "NAME", for each component!');
6246  }
6247
6248  static get DATA_KEY() {
6249    return `bs.${this.NAME}`;
6250  }
6251
6252  static get EVENT_KEY() {
6253    return `.${this.DATA_KEY}`;
6254  }
6255
6256}
6257
6258/**
6259 * --------------------------------------------------------------------------
6260 * Bootstrap (v5.1.3): util/component-functions.js
6261 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6262 * --------------------------------------------------------------------------
6263 */
6264
6265const enableDismissTrigger = (component, method = 'hide') => {
6266  const clickEvent = `click.dismiss${component.EVENT_KEY}`;
6267  const name = component.NAME;
6268  EventHandler.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) {
6269    if (['A', 'AREA'].includes(this.tagName)) {
6270      event.preventDefault();
6271    }
6272
6273    if (isDisabled(this)) {
6274      return;
6275    }
6276
6277    const target = getElementFromSelector(this) || this.closest(`.${name}`);
6278    const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
6279
6280    instance[method]();
6281  });
6282};
6283
6284/**
6285 * --------------------------------------------------------------------------
6286 * Bootstrap (v5.1.3): alert.js
6287 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6288 * --------------------------------------------------------------------------
6289 */
6290/**
6291 * ------------------------------------------------------------------------
6292 * Constants
6293 * ------------------------------------------------------------------------
6294 */
6295
6296const NAME$d = 'alert';
6297const DATA_KEY$c = 'bs.alert';
6298const EVENT_KEY$c = `.${DATA_KEY$c}`;
6299const EVENT_CLOSE = `close${EVENT_KEY$c}`;
6300const EVENT_CLOSED = `closed${EVENT_KEY$c}`;
6301const CLASS_NAME_FADE$5 = 'fade';
6302const CLASS_NAME_SHOW$8 = 'show';
6303/**
6304 * ------------------------------------------------------------------------
6305 * Class Definition
6306 * ------------------------------------------------------------------------
6307 */
6308
6309class Alert extends BaseComponent {
6310  // Getters
6311  static get NAME() {
6312    return NAME$d;
6313  } // Public
6314
6315
6316  close() {
6317    const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);
6318
6319    if (closeEvent.defaultPrevented) {
6320      return;
6321    }
6322
6323    this._element.classList.remove(CLASS_NAME_SHOW$8);
6324
6325    const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);
6326
6327    this._queueCallback(() => this._destroyElement(), this._element, isAnimated);
6328  } // Private
6329
6330
6331  _destroyElement() {
6332    this._element.remove();
6333
6334    EventHandler.trigger(this._element, EVENT_CLOSED);
6335    this.dispose();
6336  } // Static
6337
6338
6339  static jQueryInterface(config) {
6340    return this.each(function () {
6341      const data = Alert.getOrCreateInstance(this);
6342
6343      if (typeof config !== 'string') {
6344        return;
6345      }
6346
6347      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
6348        throw new TypeError(`No method named "${config}"`);
6349      }
6350
6351      data[config](this);
6352    });
6353  }
6354
6355}
6356/**
6357 * ------------------------------------------------------------------------
6358 * Data Api implementation
6359 * ------------------------------------------------------------------------
6360 */
6361
6362
6363enableDismissTrigger(Alert, 'close');
6364/**
6365 * ------------------------------------------------------------------------
6366 * jQuery
6367 * ------------------------------------------------------------------------
6368 * add .Alert to jQuery only if jQuery is present
6369 */
6370
6371defineJQueryPlugin(Alert);
6372
6373/**
6374 * --------------------------------------------------------------------------
6375 * Bootstrap (v5.1.3): button.js
6376 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6377 * --------------------------------------------------------------------------
6378 */
6379/**
6380 * ------------------------------------------------------------------------
6381 * Constants
6382 * ------------------------------------------------------------------------
6383 */
6384
6385const NAME$c = 'button';
6386const DATA_KEY$b = 'bs.button';
6387const EVENT_KEY$b = `.${DATA_KEY$b}`;
6388const DATA_API_KEY$7 = '.data-api';
6389const CLASS_NAME_ACTIVE$3 = 'active';
6390const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]';
6391const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$b}${DATA_API_KEY$7}`;
6392/**
6393 * ------------------------------------------------------------------------
6394 * Class Definition
6395 * ------------------------------------------------------------------------
6396 */
6397
6398class Button extends BaseComponent {
6399  // Getters
6400  static get NAME() {
6401    return NAME$c;
6402  } // Public
6403
6404
6405  toggle() {
6406    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
6407    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));
6408  } // Static
6409
6410
6411  static jQueryInterface(config) {
6412    return this.each(function () {
6413      const data = Button.getOrCreateInstance(this);
6414
6415      if (config === 'toggle') {
6416        data[config]();
6417      }
6418    });
6419  }
6420
6421}
6422/**
6423 * ------------------------------------------------------------------------
6424 * Data Api implementation
6425 * ------------------------------------------------------------------------
6426 */
6427
6428
6429EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {
6430  event.preventDefault();
6431  const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);
6432  const data = Button.getOrCreateInstance(button);
6433  data.toggle();
6434});
6435/**
6436 * ------------------------------------------------------------------------
6437 * jQuery
6438 * ------------------------------------------------------------------------
6439 * add .Button to jQuery only if jQuery is present
6440 */
6441
6442defineJQueryPlugin(Button);
6443
6444/**
6445 * --------------------------------------------------------------------------
6446 * Bootstrap (v5.1.3): dom/manipulator.js
6447 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6448 * --------------------------------------------------------------------------
6449 */
6450function normalizeData(val) {
6451  if (val === 'true') {
6452    return true;
6453  }
6454
6455  if (val === 'false') {
6456    return false;
6457  }
6458
6459  if (val === Number(val).toString()) {
6460    return Number(val);
6461  }
6462
6463  if (val === '' || val === 'null') {
6464    return null;
6465  }
6466
6467  return val;
6468}
6469
6470function normalizeDataKey(key) {
6471  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);
6472}
6473
6474const Manipulator = {
6475  setDataAttribute(element, key, value) {
6476    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);
6477  },
6478
6479  removeDataAttribute(element, key) {
6480    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);
6481  },
6482
6483  getDataAttributes(element) {
6484    if (!element) {
6485      return {};
6486    }
6487
6488    const attributes = {};
6489    Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {
6490      let pureKey = key.replace(/^bs/, '');
6491      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
6492      attributes[pureKey] = normalizeData(element.dataset[key]);
6493    });
6494    return attributes;
6495  },
6496
6497  getDataAttribute(element, key) {
6498    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));
6499  },
6500
6501  offset(element) {
6502    const rect = element.getBoundingClientRect();
6503    return {
6504      top: rect.top + window.pageYOffset,
6505      left: rect.left + window.pageXOffset
6506    };
6507  },
6508
6509  position(element) {
6510    return {
6511      top: element.offsetTop,
6512      left: element.offsetLeft
6513    };
6514  }
6515
6516};
6517
6518/**
6519 * --------------------------------------------------------------------------
6520 * Bootstrap (v5.1.3): dom/selector-engine.js
6521 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6522 * --------------------------------------------------------------------------
6523 */
6524const NODE_TEXT = 3;
6525const SelectorEngine = {
6526  find(selector, element = document.documentElement) {
6527    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
6528  },
6529
6530  findOne(selector, element = document.documentElement) {
6531    return Element.prototype.querySelector.call(element, selector);
6532  },
6533
6534  children(element, selector) {
6535    return [].concat(...element.children).filter(child => child.matches(selector));
6536  },
6537
6538  parents(element, selector) {
6539    const parents = [];
6540    let ancestor = element.parentNode;
6541
6542    while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {
6543      if (ancestor.matches(selector)) {
6544        parents.push(ancestor);
6545      }
6546
6547      ancestor = ancestor.parentNode;
6548    }
6549
6550    return parents;
6551  },
6552
6553  prev(element, selector) {
6554    let previous = element.previousElementSibling;
6555
6556    while (previous) {
6557      if (previous.matches(selector)) {
6558        return [previous];
6559      }
6560
6561      previous = previous.previousElementSibling;
6562    }
6563
6564    return [];
6565  },
6566
6567  next(element, selector) {
6568    let next = element.nextElementSibling;
6569
6570    while (next) {
6571      if (next.matches(selector)) {
6572        return [next];
6573      }
6574
6575      next = next.nextElementSibling;
6576    }
6577
6578    return [];
6579  },
6580
6581  focusableChildren(element) {
6582    const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(', ');
6583    return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));
6584  }
6585
6586};
6587
6588/**
6589 * --------------------------------------------------------------------------
6590 * Bootstrap (v5.1.3): carousel.js
6591 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6592 * --------------------------------------------------------------------------
6593 */
6594/**
6595 * ------------------------------------------------------------------------
6596 * Constants
6597 * ------------------------------------------------------------------------
6598 */
6599
6600const NAME$b = 'carousel';
6601const DATA_KEY$a = 'bs.carousel';
6602const EVENT_KEY$a = `.${DATA_KEY$a}`;
6603const DATA_API_KEY$6 = '.data-api';
6604const ARROW_LEFT_KEY = 'ArrowLeft';
6605const ARROW_RIGHT_KEY = 'ArrowRight';
6606const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch
6607
6608const SWIPE_THRESHOLD = 40;
6609const Default$a = {
6610  interval: 5000,
6611  keyboard: true,
6612  slide: false,
6613  pause: 'hover',
6614  wrap: true,
6615  touch: true
6616};
6617const DefaultType$a = {
6618  interval: '(number|boolean)',
6619  keyboard: 'boolean',
6620  slide: '(boolean|string)',
6621  pause: '(string|boolean)',
6622  wrap: 'boolean',
6623  touch: 'boolean'
6624};
6625const ORDER_NEXT = 'next';
6626const ORDER_PREV = 'prev';
6627const DIRECTION_LEFT = 'left';
6628const DIRECTION_RIGHT = 'right';
6629const KEY_TO_DIRECTION = {
6630  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,
6631  [ARROW_RIGHT_KEY]: DIRECTION_LEFT
6632};
6633const EVENT_SLIDE = `slide${EVENT_KEY$a}`;
6634const EVENT_SLID = `slid${EVENT_KEY$a}`;
6635const EVENT_KEYDOWN = `keydown${EVENT_KEY$a}`;
6636const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$a}`;
6637const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$a}`;
6638const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$a}`;
6639const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$a}`;
6640const EVENT_TOUCHEND = `touchend${EVENT_KEY$a}`;
6641const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$a}`;
6642const EVENT_POINTERUP = `pointerup${EVENT_KEY$a}`;
6643const EVENT_DRAG_START = `dragstart${EVENT_KEY$a}`;
6644const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$a}${DATA_API_KEY$6}`;
6645const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;
6646const CLASS_NAME_CAROUSEL = 'carousel';
6647const CLASS_NAME_ACTIVE$2 = 'active';
6648const CLASS_NAME_SLIDE = 'slide';
6649const CLASS_NAME_END = 'carousel-item-end';
6650const CLASS_NAME_START = 'carousel-item-start';
6651const CLASS_NAME_NEXT = 'carousel-item-next';
6652const CLASS_NAME_PREV = 'carousel-item-prev';
6653const CLASS_NAME_POINTER_EVENT = 'pointer-event';
6654const SELECTOR_ACTIVE$1 = '.active';
6655const SELECTOR_ACTIVE_ITEM = '.active.carousel-item';
6656const SELECTOR_ITEM = '.carousel-item';
6657const SELECTOR_ITEM_IMG = '.carousel-item img';
6658const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';
6659const SELECTOR_INDICATORS = '.carousel-indicators';
6660const SELECTOR_INDICATOR = '[data-bs-target]';
6661const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';
6662const SELECTOR_DATA_RIDE = '[data-bs-ride="carousel"]';
6663const POINTER_TYPE_TOUCH = 'touch';
6664const POINTER_TYPE_PEN = 'pen';
6665/**
6666 * ------------------------------------------------------------------------
6667 * Class Definition
6668 * ------------------------------------------------------------------------
6669 */
6670
6671class Carousel extends BaseComponent {
6672  constructor(element, config) {
6673    super(element);
6674    this._items = null;
6675    this._interval = null;
6676    this._activeElement = null;
6677    this._isPaused = false;
6678    this._isSliding = false;
6679    this.touchTimeout = null;
6680    this.touchStartX = 0;
6681    this.touchDeltaX = 0;
6682    this._config = this._getConfig(config);
6683    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);
6684    this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
6685    this._pointerEvent = Boolean(window.PointerEvent);
6686
6687    this._addEventListeners();
6688  } // Getters
6689
6690
6691  static get Default() {
6692    return Default$a;
6693  }
6694
6695  static get NAME() {
6696    return NAME$b;
6697  } // Public
6698
6699
6700  next() {
6701    this._slide(ORDER_NEXT);
6702  }
6703
6704  nextWhenVisible() {
6705    // Don't call next when the page isn't visible
6706    // or the carousel or its parent isn't visible
6707    if (!document.hidden && isVisible(this._element)) {
6708      this.next();
6709    }
6710  }
6711
6712  prev() {
6713    this._slide(ORDER_PREV);
6714  }
6715
6716  pause(event) {
6717    if (!event) {
6718      this._isPaused = true;
6719    }
6720
6721    if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {
6722      triggerTransitionEnd(this._element);
6723      this.cycle(true);
6724    }
6725
6726    clearInterval(this._interval);
6727    this._interval = null;
6728  }
6729
6730  cycle(event) {
6731    if (!event) {
6732      this._isPaused = false;
6733    }
6734
6735    if (this._interval) {
6736      clearInterval(this._interval);
6737      this._interval = null;
6738    }
6739
6740    if (this._config && this._config.interval && !this._isPaused) {
6741      this._updateInterval();
6742
6743      this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);
6744    }
6745  }
6746
6747  to(index) {
6748    this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);
6749
6750    const activeIndex = this._getItemIndex(this._activeElement);
6751
6752    if (index > this._items.length - 1 || index < 0) {
6753      return;
6754    }
6755
6756    if (this._isSliding) {
6757      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));
6758      return;
6759    }
6760
6761    if (activeIndex === index) {
6762      this.pause();
6763      this.cycle();
6764      return;
6765    }
6766
6767    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;
6768
6769    this._slide(order, this._items[index]);
6770  } // Private
6771
6772
6773  _getConfig(config) {
6774    config = { ...Default$a,
6775      ...Manipulator.getDataAttributes(this._element),
6776      ...(typeof config === 'object' ? config : {})
6777    };
6778    typeCheckConfig(NAME$b, config, DefaultType$a);
6779    return config;
6780  }
6781
6782  _handleSwipe() {
6783    const absDeltax = Math.abs(this.touchDeltaX);
6784
6785    if (absDeltax <= SWIPE_THRESHOLD) {
6786      return;
6787    }
6788
6789    const direction = absDeltax / this.touchDeltaX;
6790    this.touchDeltaX = 0;
6791
6792    if (!direction) {
6793      return;
6794    }
6795
6796    this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);
6797  }
6798
6799  _addEventListeners() {
6800    if (this._config.keyboard) {
6801      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));
6802    }
6803
6804    if (this._config.pause === 'hover') {
6805      EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));
6806      EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));
6807    }
6808
6809    if (this._config.touch && this._touchSupported) {
6810      this._addTouchEventListeners();
6811    }
6812  }
6813
6814  _addTouchEventListeners() {
6815    const hasPointerPenTouch = event => {
6816      return this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);
6817    };
6818
6819    const start = event => {
6820      if (hasPointerPenTouch(event)) {
6821        this.touchStartX = event.clientX;
6822      } else if (!this._pointerEvent) {
6823        this.touchStartX = event.touches[0].clientX;
6824      }
6825    };
6826
6827    const move = event => {
6828      // ensure swiping with one touch and not pinching
6829      this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;
6830    };
6831
6832    const end = event => {
6833      if (hasPointerPenTouch(event)) {
6834        this.touchDeltaX = event.clientX - this.touchStartX;
6835      }
6836
6837      this._handleSwipe();
6838
6839      if (this._config.pause === 'hover') {
6840        // If it's a touch-enabled device, mouseenter/leave are fired as
6841        // part of the mouse compatibility events on first tap - the carousel
6842        // would stop cycling until user tapped out of it;
6843        // here, we listen for touchend, explicitly pause the carousel
6844        // (as if it's the second time we tap on it, mouseenter compat event
6845        // is NOT fired) and after a timeout (to allow for mouse compatibility
6846        // events to fire) we explicitly restart cycling
6847        this.pause();
6848
6849        if (this.touchTimeout) {
6850          clearTimeout(this.touchTimeout);
6851        }
6852
6853        this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);
6854      }
6855    };
6856
6857    SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {
6858      EventHandler.on(itemImg, EVENT_DRAG_START, event => event.preventDefault());
6859    });
6860
6861    if (this._pointerEvent) {
6862      EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));
6863      EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));
6864
6865      this._element.classList.add(CLASS_NAME_POINTER_EVENT);
6866    } else {
6867      EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));
6868      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));
6869      EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));
6870    }
6871  }
6872
6873  _keydown(event) {
6874    if (/input|textarea/i.test(event.target.tagName)) {
6875      return;
6876    }
6877
6878    const direction = KEY_TO_DIRECTION[event.key];
6879
6880    if (direction) {
6881      event.preventDefault();
6882
6883      this._slide(direction);
6884    }
6885  }
6886
6887  _getItemIndex(element) {
6888    this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];
6889    return this._items.indexOf(element);
6890  }
6891
6892  _getItemByOrder(order, activeElement) {
6893    const isNext = order === ORDER_NEXT;
6894    return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);
6895  }
6896
6897  _triggerSlideEvent(relatedTarget, eventDirectionName) {
6898    const targetIndex = this._getItemIndex(relatedTarget);
6899
6900    const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));
6901
6902    return EventHandler.trigger(this._element, EVENT_SLIDE, {
6903      relatedTarget,
6904      direction: eventDirectionName,
6905      from: fromIndex,
6906      to: targetIndex
6907    });
6908  }
6909
6910  _setActiveIndicatorElement(element) {
6911    if (this._indicatorsElement) {
6912      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);
6913      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);
6914      activeIndicator.removeAttribute('aria-current');
6915      const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);
6916
6917      for (let i = 0; i < indicators.length; i++) {
6918        if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {
6919          indicators[i].classList.add(CLASS_NAME_ACTIVE$2);
6920          indicators[i].setAttribute('aria-current', 'true');
6921          break;
6922        }
6923      }
6924    }
6925  }
6926
6927  _updateInterval() {
6928    const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);
6929
6930    if (!element) {
6931      return;
6932    }
6933
6934    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);
6935
6936    if (elementInterval) {
6937      this._config.defaultInterval = this._config.defaultInterval || this._config.interval;
6938      this._config.interval = elementInterval;
6939    } else {
6940      this._config.interval = this._config.defaultInterval || this._config.interval;
6941    }
6942  }
6943
6944  _slide(directionOrOrder, element) {
6945    const order = this._directionToOrder(directionOrOrder);
6946
6947    const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);
6948
6949    const activeElementIndex = this._getItemIndex(activeElement);
6950
6951    const nextElement = element || this._getItemByOrder(order, activeElement);
6952
6953    const nextElementIndex = this._getItemIndex(nextElement);
6954
6955    const isCycling = Boolean(this._interval);
6956    const isNext = order === ORDER_NEXT;
6957    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;
6958    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;
6959
6960    const eventDirectionName = this._orderToDirection(order);
6961
6962    if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {
6963      this._isSliding = false;
6964      return;
6965    }
6966
6967    if (this._isSliding) {
6968      return;
6969    }
6970
6971    const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);
6972
6973    if (slideEvent.defaultPrevented) {
6974      return;
6975    }
6976
6977    if (!activeElement || !nextElement) {
6978      // Some weirdness is happening, so we bail
6979      return;
6980    }
6981
6982    this._isSliding = true;
6983
6984    if (isCycling) {
6985      this.pause();
6986    }
6987
6988    this._setActiveIndicatorElement(nextElement);
6989
6990    this._activeElement = nextElement;
6991
6992    const triggerSlidEvent = () => {
6993      EventHandler.trigger(this._element, EVENT_SLID, {
6994        relatedTarget: nextElement,
6995        direction: eventDirectionName,
6996        from: activeElementIndex,
6997        to: nextElementIndex
6998      });
6999    };
7000
7001    if (this._element.classList.contains(CLASS_NAME_SLIDE)) {
7002      nextElement.classList.add(orderClassName);
7003      reflow(nextElement);
7004      activeElement.classList.add(directionalClassName);
7005      nextElement.classList.add(directionalClassName);
7006
7007      const completeCallBack = () => {
7008        nextElement.classList.remove(directionalClassName, orderClassName);
7009        nextElement.classList.add(CLASS_NAME_ACTIVE$2);
7010        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);
7011        this._isSliding = false;
7012        setTimeout(triggerSlidEvent, 0);
7013      };
7014
7015      this._queueCallback(completeCallBack, activeElement, true);
7016    } else {
7017      activeElement.classList.remove(CLASS_NAME_ACTIVE$2);
7018      nextElement.classList.add(CLASS_NAME_ACTIVE$2);
7019      this._isSliding = false;
7020      triggerSlidEvent();
7021    }
7022
7023    if (isCycling) {
7024      this.cycle();
7025    }
7026  }
7027
7028  _directionToOrder(direction) {
7029    if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {
7030      return direction;
7031    }
7032
7033    if (isRTL()) {
7034      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;
7035    }
7036
7037    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;
7038  }
7039
7040  _orderToDirection(order) {
7041    if (![ORDER_NEXT, ORDER_PREV].includes(order)) {
7042      return order;
7043    }
7044
7045    if (isRTL()) {
7046      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;
7047    }
7048
7049    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;
7050  } // Static
7051
7052
7053  static carouselInterface(element, config) {
7054    const data = Carousel.getOrCreateInstance(element, config);
7055    let {
7056      _config
7057    } = data;
7058
7059    if (typeof config === 'object') {
7060      _config = { ..._config,
7061        ...config
7062      };
7063    }
7064
7065    const action = typeof config === 'string' ? config : _config.slide;
7066
7067    if (typeof config === 'number') {
7068      data.to(config);
7069    } else if (typeof action === 'string') {
7070      if (typeof data[action] === 'undefined') {
7071        throw new TypeError(`No method named "${action}"`);
7072      }
7073
7074      data[action]();
7075    } else if (_config.interval && _config.ride) {
7076      data.pause();
7077      data.cycle();
7078    }
7079  }
7080
7081  static jQueryInterface(config) {
7082    return this.each(function () {
7083      Carousel.carouselInterface(this, config);
7084    });
7085  }
7086
7087  static dataApiClickHandler(event) {
7088    const target = getElementFromSelector(this);
7089
7090    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {
7091      return;
7092    }
7093
7094    const config = { ...Manipulator.getDataAttributes(target),
7095      ...Manipulator.getDataAttributes(this)
7096    };
7097    const slideIndex = this.getAttribute('data-bs-slide-to');
7098
7099    if (slideIndex) {
7100      config.interval = false;
7101    }
7102
7103    Carousel.carouselInterface(target, config);
7104
7105    if (slideIndex) {
7106      Carousel.getInstance(target).to(slideIndex);
7107    }
7108
7109    event.preventDefault();
7110  }
7111
7112}
7113/**
7114 * ------------------------------------------------------------------------
7115 * Data Api implementation
7116 * ------------------------------------------------------------------------
7117 */
7118
7119
7120EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);
7121EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {
7122  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);
7123
7124  for (let i = 0, len = carousels.length; i < len; i++) {
7125    Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));
7126  }
7127});
7128/**
7129 * ------------------------------------------------------------------------
7130 * jQuery
7131 * ------------------------------------------------------------------------
7132 * add .Carousel to jQuery only if jQuery is present
7133 */
7134
7135defineJQueryPlugin(Carousel);
7136
7137/**
7138 * --------------------------------------------------------------------------
7139 * Bootstrap (v5.1.3): collapse.js
7140 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
7141 * --------------------------------------------------------------------------
7142 */
7143/**
7144 * ------------------------------------------------------------------------
7145 * Constants
7146 * ------------------------------------------------------------------------
7147 */
7148
7149const NAME$a = 'collapse';
7150const DATA_KEY$9 = 'bs.collapse';
7151const EVENT_KEY$9 = `.${DATA_KEY$9}`;
7152const DATA_API_KEY$5 = '.data-api';
7153const Default$9 = {
7154  toggle: true,
7155  parent: null
7156};
7157const DefaultType$9 = {
7158  toggle: 'boolean',
7159  parent: '(null|element)'
7160};
7161const EVENT_SHOW$5 = `show${EVENT_KEY$9}`;
7162const EVENT_SHOWN$5 = `shown${EVENT_KEY$9}`;
7163const EVENT_HIDE$5 = `hide${EVENT_KEY$9}`;
7164const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$9}`;
7165const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$9}${DATA_API_KEY$5}`;
7166const CLASS_NAME_SHOW$7 = 'show';
7167const CLASS_NAME_COLLAPSE = 'collapse';
7168const CLASS_NAME_COLLAPSING = 'collapsing';
7169const CLASS_NAME_COLLAPSED = 'collapsed';
7170const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;
7171const CLASS_NAME_HORIZONTAL = 'collapse-horizontal';
7172const WIDTH = 'width';
7173const HEIGHT = 'height';
7174const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';
7175const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle="collapse"]';
7176/**
7177 * ------------------------------------------------------------------------
7178 * Class Definition
7179 * ------------------------------------------------------------------------
7180 */
7181
7182class Collapse extends BaseComponent {
7183  constructor(element, config) {
7184    super(element);
7185    this._isTransitioning = false;
7186    this._config = this._getConfig(config);
7187    this._triggerArray = [];
7188    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);
7189
7190    for (let i = 0, len = toggleList.length; i < len; i++) {
7191      const elem = toggleList[i];
7192      const selector = getSelectorFromElement(elem);
7193      const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);
7194
7195      if (selector !== null && filterElement.length) {
7196        this._selector = selector;
7197
7198        this._triggerArray.push(elem);
7199      }
7200    }
7201
7202    this._initializeChildren();
7203
7204    if (!this._config.parent) {
7205      this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());
7206    }
7207
7208    if (this._config.toggle) {
7209      this.toggle();
7210    }
7211  } // Getters
7212
7213
7214  static get Default() {
7215    return Default$9;
7216  }
7217
7218  static get NAME() {
7219    return NAME$a;
7220  } // Public
7221
7222
7223  toggle() {
7224    if (this._isShown()) {
7225      this.hide();
7226    } else {
7227      this.show();
7228    }
7229  }
7230
7231  show() {
7232    if (this._isTransitioning || this._isShown()) {
7233      return;
7234    }
7235
7236    let actives = [];
7237    let activesData;
7238
7239    if (this._config.parent) {
7240      const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
7241      actives = SelectorEngine.find(SELECTOR_ACTIVES, this._config.parent).filter(elem => !children.includes(elem)); // remove children if greater depth
7242    }
7243
7244    const container = SelectorEngine.findOne(this._selector);
7245
7246    if (actives.length) {
7247      const tempActiveData = actives.find(elem => container !== elem);
7248      activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;
7249
7250      if (activesData && activesData._isTransitioning) {
7251        return;
7252      }
7253    }
7254
7255    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);
7256
7257    if (startEvent.defaultPrevented) {
7258      return;
7259    }
7260
7261    actives.forEach(elemActive => {
7262      if (container !== elemActive) {
7263        Collapse.getOrCreateInstance(elemActive, {
7264          toggle: false
7265        }).hide();
7266      }
7267
7268      if (!activesData) {
7269        Data.set(elemActive, DATA_KEY$9, null);
7270      }
7271    });
7272
7273    const dimension = this._getDimension();
7274
7275    this._element.classList.remove(CLASS_NAME_COLLAPSE);
7276
7277    this._element.classList.add(CLASS_NAME_COLLAPSING);
7278
7279    this._element.style[dimension] = 0;
7280
7281    this._addAriaAndCollapsedClass(this._triggerArray, true);
7282
7283    this._isTransitioning = true;
7284
7285    const complete = () => {
7286      this._isTransitioning = false;
7287
7288      this._element.classList.remove(CLASS_NAME_COLLAPSING);
7289
7290      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
7291
7292      this._element.style[dimension] = '';
7293      EventHandler.trigger(this._element, EVENT_SHOWN$5);
7294    };
7295
7296    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
7297    const scrollSize = `scroll${capitalizedDimension}`;
7298
7299    this._queueCallback(complete, this._element, true);
7300
7301    this._element.style[dimension] = `${this._element[scrollSize]}px`;
7302  }
7303
7304  hide() {
7305    if (this._isTransitioning || !this._isShown()) {
7306      return;
7307    }
7308
7309    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);
7310
7311    if (startEvent.defaultPrevented) {
7312      return;
7313    }
7314
7315    const dimension = this._getDimension();
7316
7317    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;
7318    reflow(this._element);
7319
7320    this._element.classList.add(CLASS_NAME_COLLAPSING);
7321
7322    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
7323
7324    const triggerArrayLength = this._triggerArray.length;
7325
7326    for (let i = 0; i < triggerArrayLength; i++) {
7327      const trigger = this._triggerArray[i];
7328      const elem = getElementFromSelector(trigger);
7329
7330      if (elem && !this._isShown(elem)) {
7331        this._addAriaAndCollapsedClass([trigger], false);
7332      }
7333    }
7334
7335    this._isTransitioning = true;
7336
7337    const complete = () => {
7338      this._isTransitioning = false;
7339
7340      this._element.classList.remove(CLASS_NAME_COLLAPSING);
7341
7342      this._element.classList.add(CLASS_NAME_COLLAPSE);
7343
7344      EventHandler.trigger(this._element, EVENT_HIDDEN$5);
7345    };
7346
7347    this._element.style[dimension] = '';
7348
7349    this._queueCallback(complete, this._element, true);
7350  }
7351
7352  _isShown(element = this._element) {
7353    return element.classList.contains(CLASS_NAME_SHOW$7);
7354  } // Private
7355
7356
7357  _getConfig(config) {
7358    config = { ...Default$9,
7359      ...Manipulator.getDataAttributes(this._element),
7360      ...config
7361    };
7362    config.toggle = Boolean(config.toggle); // Coerce string values
7363
7364    config.parent = getElement(config.parent);
7365    typeCheckConfig(NAME$a, config, DefaultType$9);
7366    return config;
7367  }
7368
7369  _getDimension() {
7370    return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;
7371  }
7372
7373  _initializeChildren() {
7374    if (!this._config.parent) {
7375      return;
7376    }
7377
7378    const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
7379    SelectorEngine.find(SELECTOR_DATA_TOGGLE$4, this._config.parent).filter(elem => !children.includes(elem)).forEach(element => {
7380      const selected = getElementFromSelector(element);
7381
7382      if (selected) {
7383        this._addAriaAndCollapsedClass([element], this._isShown(selected));
7384      }
7385    });
7386  }
7387
7388  _addAriaAndCollapsedClass(triggerArray, isOpen) {
7389    if (!triggerArray.length) {
7390      return;
7391    }
7392
7393    triggerArray.forEach(elem => {
7394      if (isOpen) {
7395        elem.classList.remove(CLASS_NAME_COLLAPSED);
7396      } else {
7397        elem.classList.add(CLASS_NAME_COLLAPSED);
7398      }
7399
7400      elem.setAttribute('aria-expanded', isOpen);
7401    });
7402  } // Static
7403
7404
7405  static jQueryInterface(config) {
7406    return this.each(function () {
7407      const _config = {};
7408
7409      if (typeof config === 'string' && /show|hide/.test(config)) {
7410        _config.toggle = false;
7411      }
7412
7413      const data = Collapse.getOrCreateInstance(this, _config);
7414
7415      if (typeof config === 'string') {
7416        if (typeof data[config] === 'undefined') {
7417          throw new TypeError(`No method named "${config}"`);
7418        }
7419
7420        data[config]();
7421      }
7422    });
7423  }
7424
7425}
7426/**
7427 * ------------------------------------------------------------------------
7428 * Data Api implementation
7429 * ------------------------------------------------------------------------
7430 */
7431
7432
7433EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {
7434  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
7435  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {
7436    event.preventDefault();
7437  }
7438
7439  const selector = getSelectorFromElement(this);
7440  const selectorElements = SelectorEngine.find(selector);
7441  selectorElements.forEach(element => {
7442    Collapse.getOrCreateInstance(element, {
7443      toggle: false
7444    }).toggle();
7445  });
7446});
7447/**
7448 * ------------------------------------------------------------------------
7449 * jQuery
7450 * ------------------------------------------------------------------------
7451 * add .Collapse to jQuery only if jQuery is present
7452 */
7453
7454defineJQueryPlugin(Collapse);
7455
7456/**
7457 * --------------------------------------------------------------------------
7458 * Bootstrap (v5.1.3): dropdown.js
7459 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
7460 * --------------------------------------------------------------------------
7461 */
7462/**
7463 * ------------------------------------------------------------------------
7464 * Constants
7465 * ------------------------------------------------------------------------
7466 */
7467
7468const NAME$9 = 'dropdown';
7469const DATA_KEY$8 = 'bs.dropdown';
7470const EVENT_KEY$8 = `.${DATA_KEY$8}`;
7471const DATA_API_KEY$4 = '.data-api';
7472const ESCAPE_KEY$2 = 'Escape';
7473const SPACE_KEY = 'Space';
7474const TAB_KEY$1 = 'Tab';
7475const ARROW_UP_KEY = 'ArrowUp';
7476const ARROW_DOWN_KEY = 'ArrowDown';
7477const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button
7478
7479const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);
7480const EVENT_HIDE$4 = `hide${EVENT_KEY$8}`;
7481const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$8}`;
7482const EVENT_SHOW$4 = `show${EVENT_KEY$8}`;
7483const EVENT_SHOWN$4 = `shown${EVENT_KEY$8}`;
7484const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$8}${DATA_API_KEY$4}`;
7485const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$8}${DATA_API_KEY$4}`;
7486const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$8}${DATA_API_KEY$4}`;
7487const CLASS_NAME_SHOW$6 = 'show';
7488const CLASS_NAME_DROPUP = 'dropup';
7489const CLASS_NAME_DROPEND = 'dropend';
7490const CLASS_NAME_DROPSTART = 'dropstart';
7491const CLASS_NAME_NAVBAR = 'navbar';
7492const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle="dropdown"]';
7493const SELECTOR_MENU = '.dropdown-menu';
7494const SELECTOR_NAVBAR_NAV = '.navbar-nav';
7495const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
7496const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';
7497const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';
7498const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';
7499const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';
7500const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';
7501const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';
7502const Default$8 = {
7503  offset: [0, 2],
7504  boundary: 'clippingParents',
7505  reference: 'toggle',
7506  display: 'dynamic',
7507  popperConfig: null,
7508  autoClose: true
7509};
7510const DefaultType$8 = {
7511  offset: '(array|string|function)',
7512  boundary: '(string|element)',
7513  reference: '(string|element|object)',
7514  display: 'string',
7515  popperConfig: '(null|object|function)',
7516  autoClose: '(boolean|string)'
7517};
7518/**
7519 * ------------------------------------------------------------------------
7520 * Class Definition
7521 * ------------------------------------------------------------------------
7522 */
7523
7524class Dropdown extends BaseComponent {
7525  constructor(element, config) {
7526    super(element);
7527    this._popper = null;
7528    this._config = this._getConfig(config);
7529    this._menu = this._getMenuElement();
7530    this._inNavbar = this._detectNavbar();
7531  } // Getters
7532
7533
7534  static get Default() {
7535    return Default$8;
7536  }
7537
7538  static get DefaultType() {
7539    return DefaultType$8;
7540  }
7541
7542  static get NAME() {
7543    return NAME$9;
7544  } // Public
7545
7546
7547  toggle() {
7548    return this._isShown() ? this.hide() : this.show();
7549  }
7550
7551  show() {
7552    if (isDisabled(this._element) || this._isShown(this._menu)) {
7553      return;
7554    }
7555
7556    const relatedTarget = {
7557      relatedTarget: this._element
7558    };
7559    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);
7560
7561    if (showEvent.defaultPrevented) {
7562      return;
7563    }
7564
7565    const parent = Dropdown.getParentFromElement(this._element); // Totally disable Popper for Dropdowns in Navbar
7566
7567    if (this._inNavbar) {
7568      Manipulator.setDataAttribute(this._menu, 'popper', 'none');
7569    } else {
7570      this._createPopper(parent);
7571    } // If this is a touch-enabled device we add extra
7572    // empty mouseover listeners to the body's immediate children;
7573    // only needed because of broken event delegation on iOS
7574    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
7575
7576
7577    if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {
7578      [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));
7579    }
7580
7581    this._element.focus();
7582
7583    this._element.setAttribute('aria-expanded', true);
7584
7585    this._menu.classList.add(CLASS_NAME_SHOW$6);
7586
7587    this._element.classList.add(CLASS_NAME_SHOW$6);
7588
7589    EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);
7590  }
7591
7592  hide() {
7593    if (isDisabled(this._element) || !this._isShown(this._menu)) {
7594      return;
7595    }
7596
7597    const relatedTarget = {
7598      relatedTarget: this._element
7599    };
7600
7601    this._completeHide(relatedTarget);
7602  }
7603
7604  dispose() {
7605    if (this._popper) {
7606      this._popper.destroy();
7607    }
7608
7609    super.dispose();
7610  }
7611
7612  update() {
7613    this._inNavbar = this._detectNavbar();
7614
7615    if (this._popper) {
7616      this._popper.update();
7617    }
7618  } // Private
7619
7620
7621  _completeHide(relatedTarget) {
7622    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);
7623
7624    if (hideEvent.defaultPrevented) {
7625      return;
7626    } // If this is a touch-enabled device we remove the extra
7627    // empty mouseover listeners we added for iOS support
7628
7629
7630    if ('ontouchstart' in document.documentElement) {
7631      [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));
7632    }
7633
7634    if (this._popper) {
7635      this._popper.destroy();
7636    }
7637
7638    this._menu.classList.remove(CLASS_NAME_SHOW$6);
7639
7640    this._element.classList.remove(CLASS_NAME_SHOW$6);
7641
7642    this._element.setAttribute('aria-expanded', 'false');
7643
7644    Manipulator.removeDataAttribute(this._menu, 'popper');
7645    EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);
7646  }
7647
7648  _getConfig(config) {
7649    config = { ...this.constructor.Default,
7650      ...Manipulator.getDataAttributes(this._element),
7651      ...config
7652    };
7653    typeCheckConfig(NAME$9, config, this.constructor.DefaultType);
7654
7655    if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {
7656      // Popper virtual elements require a getBoundingClientRect method
7657      throw new TypeError(`${NAME$9.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
7658    }
7659
7660    return config;
7661  }
7662
7663  _createPopper(parent) {
7664    if (typeof _popperjs_core__WEBPACK_IMPORTED_MODULE_0__ === 'undefined') {
7665      throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
7666    }
7667
7668    let referenceElement = this._element;
7669
7670    if (this._config.reference === 'parent') {
7671      referenceElement = parent;
7672    } else if (isElement(this._config.reference)) {
7673      referenceElement = getElement(this._config.reference);
7674    } else if (typeof this._config.reference === 'object') {
7675      referenceElement = this._config.reference;
7676    }
7677
7678    const popperConfig = this._getPopperConfig();
7679
7680    const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);
7681    this._popper = _popperjs_core__WEBPACK_IMPORTED_MODULE_1__.createPopper(referenceElement, this._menu, popperConfig);
7682
7683    if (isDisplayStatic) {
7684      Manipulator.setDataAttribute(this._menu, 'popper', 'static');
7685    }
7686  }
7687
7688  _isShown(element = this._element) {
7689    return element.classList.contains(CLASS_NAME_SHOW$6);
7690  }
7691
7692  _getMenuElement() {
7693    return SelectorEngine.next(this._element, SELECTOR_MENU)[0];
7694  }
7695
7696  _getPlacement() {
7697    const parentDropdown = this._element.parentNode;
7698
7699    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {
7700      return PLACEMENT_RIGHT;
7701    }
7702
7703    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {
7704      return PLACEMENT_LEFT;
7705    } // We need to trim the value because custom properties can also include spaces
7706
7707
7708    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';
7709
7710    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
7711      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;
7712    }
7713
7714    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;
7715  }
7716
7717  _detectNavbar() {
7718    return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;
7719  }
7720
7721  _getOffset() {
7722    const {
7723      offset
7724    } = this._config;
7725
7726    if (typeof offset === 'string') {
7727      return offset.split(',').map(val => Number.parseInt(val, 10));
7728    }
7729
7730    if (typeof offset === 'function') {
7731      return popperData => offset(popperData, this._element);
7732    }
7733
7734    return offset;
7735  }
7736
7737  _getPopperConfig() {
7738    const defaultBsPopperConfig = {
7739      placement: this._getPlacement(),
7740      modifiers: [{
7741        name: 'preventOverflow',
7742        options: {
7743          boundary: this._config.boundary
7744        }
7745      }, {
7746        name: 'offset',
7747        options: {
7748          offset: this._getOffset()
7749        }
7750      }]
7751    }; // Disable Popper if we have a static display
7752
7753    if (this._config.display === 'static') {
7754      defaultBsPopperConfig.modifiers = [{
7755        name: 'applyStyles',
7756        enabled: false
7757      }];
7758    }
7759
7760    return { ...defaultBsPopperConfig,
7761      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)
7762    };
7763  }
7764
7765  _selectMenuItem({
7766    key,
7767    target
7768  }) {
7769    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);
7770
7771    if (!items.length) {
7772      return;
7773    } // if target isn't included in items (e.g. when expanding the dropdown)
7774    // allow cycling to get the last item in case key equals ARROW_UP_KEY
7775
7776
7777    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();
7778  } // Static
7779
7780
7781  static jQueryInterface(config) {
7782    return this.each(function () {
7783      const data = Dropdown.getOrCreateInstance(this, config);
7784
7785      if (typeof config !== 'string') {
7786        return;
7787      }
7788
7789      if (typeof data[config] === 'undefined') {
7790        throw new TypeError(`No method named "${config}"`);
7791      }
7792
7793      data[config]();
7794    });
7795  }
7796
7797  static clearMenus(event) {
7798    if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1)) {
7799      return;
7800    }
7801
7802    const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);
7803
7804    for (let i = 0, len = toggles.length; i < len; i++) {
7805      const context = Dropdown.getInstance(toggles[i]);
7806
7807      if (!context || context._config.autoClose === false) {
7808        continue;
7809      }
7810
7811      if (!context._isShown()) {
7812        continue;
7813      }
7814
7815      const relatedTarget = {
7816        relatedTarget: context._element
7817      };
7818
7819      if (event) {
7820        const composedPath = event.composedPath();
7821        const isMenuTarget = composedPath.includes(context._menu);
7822
7823        if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {
7824          continue;
7825        } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu
7826
7827
7828        if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {
7829          continue;
7830        }
7831
7832        if (event.type === 'click') {
7833          relatedTarget.clickEvent = event;
7834        }
7835      }
7836
7837      context._completeHide(relatedTarget);
7838    }
7839  }
7840
7841  static getParentFromElement(element) {
7842    return getElementFromSelector(element) || element.parentNode;
7843  }
7844
7845  static dataApiKeydownHandler(event) {
7846    // If not input/textarea:
7847    //  - And not a key in REGEXP_KEYDOWN => not a dropdown command
7848    // If input/textarea:
7849    //  - If space key => not a dropdown command
7850    //  - If key is other than escape
7851    //    - If key is not up or down => not a dropdown command
7852    //    - If trigger inside the menu => not a dropdown command
7853    if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {
7854      return;
7855    }
7856
7857    const isActive = this.classList.contains(CLASS_NAME_SHOW$6);
7858
7859    if (!isActive && event.key === ESCAPE_KEY$2) {
7860      return;
7861    }
7862
7863    event.preventDefault();
7864    event.stopPropagation();
7865
7866    if (isDisabled(this)) {
7867      return;
7868    }
7869
7870    const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];
7871    const instance = Dropdown.getOrCreateInstance(getToggleButton);
7872
7873    if (event.key === ESCAPE_KEY$2) {
7874      instance.hide();
7875      return;
7876    }
7877
7878    if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {
7879      if (!isActive) {
7880        instance.show();
7881      }
7882
7883      instance._selectMenuItem(event);
7884
7885      return;
7886    }
7887
7888    if (!isActive || event.key === SPACE_KEY) {
7889      Dropdown.clearMenus();
7890    }
7891  }
7892
7893}
7894/**
7895 * ------------------------------------------------------------------------
7896 * Data Api implementation
7897 * ------------------------------------------------------------------------
7898 */
7899
7900
7901EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);
7902EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
7903EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);
7904EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
7905EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {
7906  event.preventDefault();
7907  Dropdown.getOrCreateInstance(this).toggle();
7908});
7909/**
7910 * ------------------------------------------------------------------------
7911 * jQuery
7912 * ------------------------------------------------------------------------
7913 * add .Dropdown to jQuery only if jQuery is present
7914 */
7915
7916defineJQueryPlugin(Dropdown);
7917
7918/**
7919 * --------------------------------------------------------------------------
7920 * Bootstrap (v5.1.3): util/scrollBar.js
7921 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
7922 * --------------------------------------------------------------------------
7923 */
7924const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
7925const SELECTOR_STICKY_CONTENT = '.sticky-top';
7926
7927class ScrollBarHelper {
7928  constructor() {
7929    this._element = document.body;
7930  }
7931
7932  getWidth() {
7933    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes
7934    const documentWidth = document.documentElement.clientWidth;
7935    return Math.abs(window.innerWidth - documentWidth);
7936  }
7937
7938  hide() {
7939    const width = this.getWidth();
7940
7941    this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width
7942
7943
7944    this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth
7945
7946
7947    this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);
7948
7949    this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);
7950  }
7951
7952  _disableOverFlow() {
7953    this._saveInitialAttribute(this._element, 'overflow');
7954
7955    this._element.style.overflow = 'hidden';
7956  }
7957
7958  _setElementAttributes(selector, styleProp, callback) {
7959    const scrollbarWidth = this.getWidth();
7960
7961    const manipulationCallBack = element => {
7962      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {
7963        return;
7964      }
7965
7966      this._saveInitialAttribute(element, styleProp);
7967
7968      const calculatedValue = window.getComputedStyle(element)[styleProp];
7969      element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;
7970    };
7971
7972    this._applyManipulationCallback(selector, manipulationCallBack);
7973  }
7974
7975  reset() {
7976    this._resetElementAttributes(this._element, 'overflow');
7977
7978    this._resetElementAttributes(this._element, 'paddingRight');
7979
7980    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');
7981
7982    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');
7983  }
7984
7985  _saveInitialAttribute(element, styleProp) {
7986    const actualValue = element.style[styleProp];
7987
7988    if (actualValue) {
7989      Manipulator.setDataAttribute(element, styleProp, actualValue);
7990    }
7991  }
7992
7993  _resetElementAttributes(selector, styleProp) {
7994    const manipulationCallBack = element => {
7995      const value = Manipulator.getDataAttribute(element, styleProp);
7996
7997      if (typeof value === 'undefined') {
7998        element.style.removeProperty(styleProp);
7999      } else {
8000        Manipulator.removeDataAttribute(element, styleProp);
8001        element.style[styleProp] = value;
8002      }
8003    };
8004
8005    this._applyManipulationCallback(selector, manipulationCallBack);
8006  }
8007
8008  _applyManipulationCallback(selector, callBack) {
8009    if (isElement(selector)) {
8010      callBack(selector);
8011    } else {
8012      SelectorEngine.find(selector, this._element).forEach(callBack);
8013    }
8014  }
8015
8016  isOverflowing() {
8017    return this.getWidth() > 0;
8018  }
8019
8020}
8021
8022/**
8023 * --------------------------------------------------------------------------
8024 * Bootstrap (v5.1.3): util/backdrop.js
8025 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
8026 * --------------------------------------------------------------------------
8027 */
8028const Default$7 = {
8029  className: 'modal-backdrop',
8030  isVisible: true,
8031  // if false, we use the backdrop helper without adding any element to the dom
8032  isAnimated: false,
8033  rootElement: 'body',
8034  // give the choice to place backdrop under different elements
8035  clickCallback: null
8036};
8037const DefaultType$7 = {
8038  className: 'string',
8039  isVisible: 'boolean',
8040  isAnimated: 'boolean',
8041  rootElement: '(element|string)',
8042  clickCallback: '(function|null)'
8043};
8044const NAME$8 = 'backdrop';
8045const CLASS_NAME_FADE$4 = 'fade';
8046const CLASS_NAME_SHOW$5 = 'show';
8047const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$8}`;
8048
8049class Backdrop {
8050  constructor(config) {
8051    this._config = this._getConfig(config);
8052    this._isAppended = false;
8053    this._element = null;
8054  }
8055
8056  show(callback) {
8057    if (!this._config.isVisible) {
8058      execute(callback);
8059      return;
8060    }
8061
8062    this._append();
8063
8064    if (this._config.isAnimated) {
8065      reflow(this._getElement());
8066    }
8067
8068    this._getElement().classList.add(CLASS_NAME_SHOW$5);
8069
8070    this._emulateAnimation(() => {
8071      execute(callback);
8072    });
8073  }
8074
8075  hide(callback) {
8076    if (!this._config.isVisible) {
8077      execute(callback);
8078      return;
8079    }
8080
8081    this._getElement().classList.remove(CLASS_NAME_SHOW$5);
8082
8083    this._emulateAnimation(() => {
8084      this.dispose();
8085      execute(callback);
8086    });
8087  } // Private
8088
8089
8090  _getElement() {
8091    if (!this._element) {
8092      const backdrop = document.createElement('div');
8093      backdrop.className = this._config.className;
8094
8095      if (this._config.isAnimated) {
8096        backdrop.classList.add(CLASS_NAME_FADE$4);
8097      }
8098
8099      this._element = backdrop;
8100    }
8101
8102    return this._element;
8103  }
8104
8105  _getConfig(config) {
8106    config = { ...Default$7,
8107      ...(typeof config === 'object' ? config : {})
8108    }; // use getElement() with the default "body" to get a fresh Element on each instantiation
8109
8110    config.rootElement = getElement(config.rootElement);
8111    typeCheckConfig(NAME$8, config, DefaultType$7);
8112    return config;
8113  }
8114
8115  _append() {
8116    if (this._isAppended) {
8117      return;
8118    }
8119
8120    this._config.rootElement.append(this._getElement());
8121
8122    EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {
8123      execute(this._config.clickCallback);
8124    });
8125    this._isAppended = true;
8126  }
8127
8128  dispose() {
8129    if (!this._isAppended) {
8130      return;
8131    }
8132
8133    EventHandler.off(this._element, EVENT_MOUSEDOWN);
8134
8135    this._element.remove();
8136
8137    this._isAppended = false;
8138  }
8139
8140  _emulateAnimation(callback) {
8141    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);
8142  }
8143
8144}
8145
8146/**
8147 * --------------------------------------------------------------------------
8148 * Bootstrap (v5.1.3): util/focustrap.js
8149 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
8150 * --------------------------------------------------------------------------
8151 */
8152const Default$6 = {
8153  trapElement: null,
8154  // The element to trap focus inside of
8155  autofocus: true
8156};
8157const DefaultType$6 = {
8158  trapElement: 'element',
8159  autofocus: 'boolean'
8160};
8161const NAME$7 = 'focustrap';
8162const DATA_KEY$7 = 'bs.focustrap';
8163const EVENT_KEY$7 = `.${DATA_KEY$7}`;
8164const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$7}`;
8165const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$7}`;
8166const TAB_KEY = 'Tab';
8167const TAB_NAV_FORWARD = 'forward';
8168const TAB_NAV_BACKWARD = 'backward';
8169
8170class FocusTrap {
8171  constructor(config) {
8172    this._config = this._getConfig(config);
8173    this._isActive = false;
8174    this._lastTabNavDirection = null;
8175  }
8176
8177  activate() {
8178    const {
8179      trapElement,
8180      autofocus
8181    } = this._config;
8182
8183    if (this._isActive) {
8184      return;
8185    }
8186
8187    if (autofocus) {
8188      trapElement.focus();
8189    }
8190
8191    EventHandler.off(document, EVENT_KEY$7); // guard against infinite focus loop
8192
8193    EventHandler.on(document, EVENT_FOCUSIN$1, event => this._handleFocusin(event));
8194    EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));
8195    this._isActive = true;
8196  }
8197
8198  deactivate() {
8199    if (!this._isActive) {
8200      return;
8201    }
8202
8203    this._isActive = false;
8204    EventHandler.off(document, EVENT_KEY$7);
8205  } // Private
8206
8207
8208  _handleFocusin(event) {
8209    const {
8210      target
8211    } = event;
8212    const {
8213      trapElement
8214    } = this._config;
8215
8216    if (target === document || target === trapElement || trapElement.contains(target)) {
8217      return;
8218    }
8219
8220    const elements = SelectorEngine.focusableChildren(trapElement);
8221
8222    if (elements.length === 0) {
8223      trapElement.focus();
8224    } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {
8225      elements[elements.length - 1].focus();
8226    } else {
8227      elements[0].focus();
8228    }
8229  }
8230
8231  _handleKeydown(event) {
8232    if (event.key !== TAB_KEY) {
8233      return;
8234    }
8235
8236    this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;
8237  }
8238
8239  _getConfig(config) {
8240    config = { ...Default$6,
8241      ...(typeof config === 'object' ? config : {})
8242    };
8243    typeCheckConfig(NAME$7, config, DefaultType$6);
8244    return config;
8245  }
8246
8247}
8248
8249/**
8250 * --------------------------------------------------------------------------
8251 * Bootstrap (v5.1.3): modal.js
8252 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
8253 * --------------------------------------------------------------------------
8254 */
8255/**
8256 * ------------------------------------------------------------------------
8257 * Constants
8258 * ------------------------------------------------------------------------
8259 */
8260
8261const NAME$6 = 'modal';
8262const DATA_KEY$6 = 'bs.modal';
8263const EVENT_KEY$6 = `.${DATA_KEY$6}`;
8264const DATA_API_KEY$3 = '.data-api';
8265const ESCAPE_KEY$1 = 'Escape';
8266const Default$5 = {
8267  backdrop: true,
8268  keyboard: true,
8269  focus: true
8270};
8271const DefaultType$5 = {
8272  backdrop: '(boolean|string)',
8273  keyboard: 'boolean',
8274  focus: 'boolean'
8275};
8276const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;
8277const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;
8278const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;
8279const EVENT_SHOW$3 = `show${EVENT_KEY$6}`;
8280const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;
8281const EVENT_RESIZE = `resize${EVENT_KEY$6}`;
8282const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$6}`;
8283const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;
8284const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;
8285const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;
8286const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;
8287const CLASS_NAME_OPEN = 'modal-open';
8288const CLASS_NAME_FADE$3 = 'fade';
8289const CLASS_NAME_SHOW$4 = 'show';
8290const CLASS_NAME_STATIC = 'modal-static';
8291const OPEN_SELECTOR$1 = '.modal.show';
8292const SELECTOR_DIALOG = '.modal-dialog';
8293const SELECTOR_MODAL_BODY = '.modal-body';
8294const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle="modal"]';
8295/**
8296 * ------------------------------------------------------------------------
8297 * Class Definition
8298 * ------------------------------------------------------------------------
8299 */
8300
8301class Modal extends BaseComponent {
8302  constructor(element, config) {
8303    super(element);
8304    this._config = this._getConfig(config);
8305    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);
8306    this._backdrop = this._initializeBackDrop();
8307    this._focustrap = this._initializeFocusTrap();
8308    this._isShown = false;
8309    this._ignoreBackdropClick = false;
8310    this._isTransitioning = false;
8311    this._scrollBar = new ScrollBarHelper();
8312  } // Getters
8313
8314
8315  static get Default() {
8316    return Default$5;
8317  }
8318
8319  static get NAME() {
8320    return NAME$6;
8321  } // Public
8322
8323
8324  toggle(relatedTarget) {
8325    return this._isShown ? this.hide() : this.show(relatedTarget);
8326  }
8327
8328  show(relatedTarget) {
8329    if (this._isShown || this._isTransitioning) {
8330      return;
8331    }
8332
8333    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {
8334      relatedTarget
8335    });
8336
8337    if (showEvent.defaultPrevented) {
8338      return;
8339    }
8340
8341    this._isShown = true;
8342
8343    if (this._isAnimated()) {
8344      this._isTransitioning = true;
8345    }
8346
8347    this._scrollBar.hide();
8348
8349    document.body.classList.add(CLASS_NAME_OPEN);
8350
8351    this._adjustDialog();
8352
8353    this._setEscapeEvent();
8354
8355    this._setResizeEvent();
8356
8357    EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {
8358      EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {
8359        if (event.target === this._element) {
8360          this._ignoreBackdropClick = true;
8361        }
8362      });
8363    });
8364
8365    this._showBackdrop(() => this._showElement(relatedTarget));
8366  }
8367
8368  hide() {
8369    if (!this._isShown || this._isTransitioning) {
8370      return;
8371    }
8372
8373    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);
8374
8375    if (hideEvent.defaultPrevented) {
8376      return;
8377    }
8378
8379    this._isShown = false;
8380
8381    const isAnimated = this._isAnimated();
8382
8383    if (isAnimated) {
8384      this._isTransitioning = true;
8385    }
8386
8387    this._setEscapeEvent();
8388
8389    this._setResizeEvent();
8390
8391    this._focustrap.deactivate();
8392
8393    this._element.classList.remove(CLASS_NAME_SHOW$4);
8394
8395    EventHandler.off(this._element, EVENT_CLICK_DISMISS);
8396    EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);
8397
8398    this._queueCallback(() => this._hideModal(), this._element, isAnimated);
8399  }
8400
8401  dispose() {
8402    [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));
8403
8404    this._backdrop.dispose();
8405
8406    this._focustrap.deactivate();
8407
8408    super.dispose();
8409  }
8410
8411  handleUpdate() {
8412    this._adjustDialog();
8413  } // Private
8414
8415
8416  _initializeBackDrop() {
8417    return new Backdrop({
8418      isVisible: Boolean(this._config.backdrop),
8419      // 'static' option will be translated to true, and booleans will keep their value
8420      isAnimated: this._isAnimated()
8421    });
8422  }
8423
8424  _initializeFocusTrap() {
8425    return new FocusTrap({
8426      trapElement: this._element
8427    });
8428  }
8429
8430  _getConfig(config) {
8431    config = { ...Default$5,
8432      ...Manipulator.getDataAttributes(this._element),
8433      ...(typeof config === 'object' ? config : {})
8434    };
8435    typeCheckConfig(NAME$6, config, DefaultType$5);
8436    return config;
8437  }
8438
8439  _showElement(relatedTarget) {
8440    const isAnimated = this._isAnimated();
8441
8442    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);
8443
8444    if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
8445      // Don't move modal's DOM position
8446      document.body.append(this._element);
8447    }
8448
8449    this._element.style.display = 'block';
8450
8451    this._element.removeAttribute('aria-hidden');
8452
8453    this._element.setAttribute('aria-modal', true);
8454
8455    this._element.setAttribute('role', 'dialog');
8456
8457    this._element.scrollTop = 0;
8458
8459    if (modalBody) {
8460      modalBody.scrollTop = 0;
8461    }
8462
8463    if (isAnimated) {
8464      reflow(this._element);
8465    }
8466
8467    this._element.classList.add(CLASS_NAME_SHOW$4);
8468
8469    const transitionComplete = () => {
8470      if (this._config.focus) {
8471        this._focustrap.activate();
8472      }
8473
8474      this._isTransitioning = false;
8475      EventHandler.trigger(this._element, EVENT_SHOWN$3, {
8476        relatedTarget
8477      });
8478    };
8479
8480    this._queueCallback(transitionComplete, this._dialog, isAnimated);
8481  }
8482
8483  _setEscapeEvent() {
8484    if (this._isShown) {
8485      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {
8486        if (this._config.keyboard && event.key === ESCAPE_KEY$1) {
8487          event.preventDefault();
8488          this.hide();
8489        } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {
8490          this._triggerBackdropTransition();
8491        }
8492      });
8493    } else {
8494      EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);
8495    }
8496  }
8497
8498  _setResizeEvent() {
8499    if (this._isShown) {
8500      EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());
8501    } else {
8502      EventHandler.off(window, EVENT_RESIZE);
8503    }
8504  }
8505
8506  _hideModal() {
8507    this._element.style.display = 'none';
8508
8509    this._element.setAttribute('aria-hidden', true);
8510
8511    this._element.removeAttribute('aria-modal');
8512
8513    this._element.removeAttribute('role');
8514
8515    this._isTransitioning = false;
8516
8517    this._backdrop.hide(() => {
8518      document.body.classList.remove(CLASS_NAME_OPEN);
8519
8520      this._resetAdjustments();
8521
8522      this._scrollBar.reset();
8523
8524      EventHandler.trigger(this._element, EVENT_HIDDEN$3);
8525    });
8526  }
8527
8528  _showBackdrop(callback) {
8529    EventHandler.on(this._element, EVENT_CLICK_DISMISS, event => {
8530      if (this._ignoreBackdropClick) {
8531        this._ignoreBackdropClick = false;
8532        return;
8533      }
8534
8535      if (event.target !== event.currentTarget) {
8536        return;
8537      }
8538
8539      if (this._config.backdrop === true) {
8540        this.hide();
8541      } else if (this._config.backdrop === 'static') {
8542        this._triggerBackdropTransition();
8543      }
8544    });
8545
8546    this._backdrop.show(callback);
8547  }
8548
8549  _isAnimated() {
8550    return this._element.classList.contains(CLASS_NAME_FADE$3);
8551  }
8552
8553  _triggerBackdropTransition() {
8554    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
8555
8556    if (hideEvent.defaultPrevented) {
8557      return;
8558    }
8559
8560    const {
8561      classList,
8562      scrollHeight,
8563      style
8564    } = this._element;
8565    const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed
8566
8567    if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {
8568      return;
8569    }
8570
8571    if (!isModalOverflowing) {
8572      style.overflowY = 'hidden';
8573    }
8574
8575    classList.add(CLASS_NAME_STATIC);
8576
8577    this._queueCallback(() => {
8578      classList.remove(CLASS_NAME_STATIC);
8579
8580      if (!isModalOverflowing) {
8581        this._queueCallback(() => {
8582          style.overflowY = '';
8583        }, this._dialog);
8584      }
8585    }, this._dialog);
8586
8587    this._element.focus();
8588  } // ----------------------------------------------------------------------
8589  // the following methods are used to handle overflowing modals
8590  // ----------------------------------------------------------------------
8591
8592
8593  _adjustDialog() {
8594    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
8595
8596    const scrollbarWidth = this._scrollBar.getWidth();
8597
8598    const isBodyOverflowing = scrollbarWidth > 0;
8599
8600    if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {
8601      this._element.style.paddingLeft = `${scrollbarWidth}px`;
8602    }
8603
8604    if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {
8605      this._element.style.paddingRight = `${scrollbarWidth}px`;
8606    }
8607  }
8608
8609  _resetAdjustments() {
8610    this._element.style.paddingLeft = '';
8611    this._element.style.paddingRight = '';
8612  } // Static
8613
8614
8615  static jQueryInterface(config, relatedTarget) {
8616    return this.each(function () {
8617      const data = Modal.getOrCreateInstance(this, config);
8618
8619      if (typeof config !== 'string') {
8620        return;
8621      }
8622
8623      if (typeof data[config] === 'undefined') {
8624        throw new TypeError(`No method named "${config}"`);
8625      }
8626
8627      data[config](relatedTarget);
8628    });
8629  }
8630
8631}
8632/**
8633 * ------------------------------------------------------------------------
8634 * Data Api implementation
8635 * ------------------------------------------------------------------------
8636 */
8637
8638
8639EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {
8640  const target = getElementFromSelector(this);
8641
8642  if (['A', 'AREA'].includes(this.tagName)) {
8643    event.preventDefault();
8644  }
8645
8646  EventHandler.one(target, EVENT_SHOW$3, showEvent => {
8647    if (showEvent.defaultPrevented) {
8648      // only register focus restorer if modal will actually get shown
8649      return;
8650    }
8651
8652    EventHandler.one(target, EVENT_HIDDEN$3, () => {
8653      if (isVisible(this)) {
8654        this.focus();
8655      }
8656    });
8657  }); // avoid conflict when clicking moddal toggler while another one is open
8658
8659  const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);
8660
8661  if (allReadyOpen) {
8662    Modal.getInstance(allReadyOpen).hide();
8663  }
8664
8665  const data = Modal.getOrCreateInstance(target);
8666  data.toggle(this);
8667});
8668enableDismissTrigger(Modal);
8669/**
8670 * ------------------------------------------------------------------------
8671 * jQuery
8672 * ------------------------------------------------------------------------
8673 * add .Modal to jQuery only if jQuery is present
8674 */
8675
8676defineJQueryPlugin(Modal);
8677
8678/**
8679 * --------------------------------------------------------------------------
8680 * Bootstrap (v5.1.3): offcanvas.js
8681 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
8682 * --------------------------------------------------------------------------
8683 */
8684/**
8685 * ------------------------------------------------------------------------
8686 * Constants
8687 * ------------------------------------------------------------------------
8688 */
8689
8690const NAME$5 = 'offcanvas';
8691const DATA_KEY$5 = 'bs.offcanvas';
8692const EVENT_KEY$5 = `.${DATA_KEY$5}`;
8693const DATA_API_KEY$2 = '.data-api';
8694const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;
8695const ESCAPE_KEY = 'Escape';
8696const Default$4 = {
8697  backdrop: true,
8698  keyboard: true,
8699  scroll: false
8700};
8701const DefaultType$4 = {
8702  backdrop: 'boolean',
8703  keyboard: 'boolean',
8704  scroll: 'boolean'
8705};
8706const CLASS_NAME_SHOW$3 = 'show';
8707const CLASS_NAME_BACKDROP = 'offcanvas-backdrop';
8708const OPEN_SELECTOR = '.offcanvas.show';
8709const EVENT_SHOW$2 = `show${EVENT_KEY$5}`;
8710const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;
8711const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;
8712const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;
8713const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;
8714const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;
8715const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle="offcanvas"]';
8716/**
8717 * ------------------------------------------------------------------------
8718 * Class Definition
8719 * ------------------------------------------------------------------------
8720 */
8721
8722class Offcanvas extends BaseComponent {
8723  constructor(element, config) {
8724    super(element);
8725    this._config = this._getConfig(config);
8726    this._isShown = false;
8727    this._backdrop = this._initializeBackDrop();
8728    this._focustrap = this._initializeFocusTrap();
8729
8730    this._addEventListeners();
8731  } // Getters
8732
8733
8734  static get NAME() {
8735    return NAME$5;
8736  }
8737
8738  static get Default() {
8739    return Default$4;
8740  } // Public
8741
8742
8743  toggle(relatedTarget) {
8744    return this._isShown ? this.hide() : this.show(relatedTarget);
8745  }
8746
8747  show(relatedTarget) {
8748    if (this._isShown) {
8749      return;
8750    }
8751
8752    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {
8753      relatedTarget
8754    });
8755
8756    if (showEvent.defaultPrevented) {
8757      return;
8758    }
8759
8760    this._isShown = true;
8761    this._element.style.visibility = 'visible';
8762
8763    this._backdrop.show();
8764
8765    if (!this._config.scroll) {
8766      new ScrollBarHelper().hide();
8767    }
8768
8769    this._element.removeAttribute('aria-hidden');
8770
8771    this._element.setAttribute('aria-modal', true);
8772
8773    this._element.setAttribute('role', 'dialog');
8774
8775    this._element.classList.add(CLASS_NAME_SHOW$3);
8776
8777    const completeCallBack = () => {
8778      if (!this._config.scroll) {
8779        this._focustrap.activate();
8780      }
8781
8782      EventHandler.trigger(this._element, EVENT_SHOWN$2, {
8783        relatedTarget
8784      });
8785    };
8786
8787    this._queueCallback(completeCallBack, this._element, true);
8788  }
8789
8790  hide() {
8791    if (!this._isShown) {
8792      return;
8793    }
8794
8795    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);
8796
8797    if (hideEvent.defaultPrevented) {
8798      return;
8799    }
8800
8801    this._focustrap.deactivate();
8802
8803    this._element.blur();
8804
8805    this._isShown = false;
8806
8807    this._element.classList.remove(CLASS_NAME_SHOW$3);
8808
8809    this._backdrop.hide();
8810
8811    const completeCallback = () => {
8812      this._element.setAttribute('aria-hidden', true);
8813
8814      this._element.removeAttribute('aria-modal');
8815
8816      this._element.removeAttribute('role');
8817
8818      this._element.style.visibility = 'hidden';
8819
8820      if (!this._config.scroll) {
8821        new ScrollBarHelper().reset();
8822      }
8823
8824      EventHandler.trigger(this._element, EVENT_HIDDEN$2);
8825    };
8826
8827    this._queueCallback(completeCallback, this._element, true);
8828  }
8829
8830  dispose() {
8831    this._backdrop.dispose();
8832
8833    this._focustrap.deactivate();
8834
8835    super.dispose();
8836  } // Private
8837
8838
8839  _getConfig(config) {
8840    config = { ...Default$4,
8841      ...Manipulator.getDataAttributes(this._element),
8842      ...(typeof config === 'object' ? config : {})
8843    };
8844    typeCheckConfig(NAME$5, config, DefaultType$4);
8845    return config;
8846  }
8847
8848  _initializeBackDrop() {
8849    return new Backdrop({
8850      className: CLASS_NAME_BACKDROP,
8851      isVisible: this._config.backdrop,
8852      isAnimated: true,
8853      rootElement: this._element.parentNode,
8854      clickCallback: () => this.hide()
8855    });
8856  }
8857
8858  _initializeFocusTrap() {
8859    return new FocusTrap({
8860      trapElement: this._element
8861    });
8862  }
8863
8864  _addEventListeners() {
8865    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
8866      if (this._config.keyboard && event.key === ESCAPE_KEY) {
8867        this.hide();
8868      }
8869    });
8870  } // Static
8871
8872
8873  static jQueryInterface(config) {
8874    return this.each(function () {
8875      const data = Offcanvas.getOrCreateInstance(this, config);
8876
8877      if (typeof config !== 'string') {
8878        return;
8879      }
8880
8881      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
8882        throw new TypeError(`No method named "${config}"`);
8883      }
8884
8885      data[config](this);
8886    });
8887  }
8888
8889}
8890/**
8891 * ------------------------------------------------------------------------
8892 * Data Api implementation
8893 * ------------------------------------------------------------------------
8894 */
8895
8896
8897EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {
8898  const target = getElementFromSelector(this);
8899
8900  if (['A', 'AREA'].includes(this.tagName)) {
8901    event.preventDefault();
8902  }
8903
8904  if (isDisabled(this)) {
8905    return;
8906  }
8907
8908  EventHandler.one(target, EVENT_HIDDEN$2, () => {
8909    // focus on trigger when it is closed
8910    if (isVisible(this)) {
8911      this.focus();
8912    }
8913  }); // avoid conflict when clicking a toggler of an offcanvas, while another is open
8914
8915  const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);
8916
8917  if (allReadyOpen && allReadyOpen !== target) {
8918    Offcanvas.getInstance(allReadyOpen).hide();
8919  }
8920
8921  const data = Offcanvas.getOrCreateInstance(target);
8922  data.toggle(this);
8923});
8924EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));
8925enableDismissTrigger(Offcanvas);
8926/**
8927 * ------------------------------------------------------------------------
8928 * jQuery
8929 * ------------------------------------------------------------------------
8930 */
8931
8932defineJQueryPlugin(Offcanvas);
8933
8934/**
8935 * --------------------------------------------------------------------------
8936 * Bootstrap (v5.1.3): util/sanitizer.js
8937 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
8938 * --------------------------------------------------------------------------
8939 */
8940const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);
8941const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
8942/**
8943 * A pattern that recognizes a commonly useful subset of URLs that are safe.
8944 *
8945 * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
8946 */
8947
8948const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;
8949/**
8950 * A pattern that matches safe data URLs. Only matches image, video and audio types.
8951 *
8952 * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
8953 */
8954
8955const DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;
8956
8957const allowedAttribute = (attribute, allowedAttributeList) => {
8958  const attributeName = attribute.nodeName.toLowerCase();
8959
8960  if (allowedAttributeList.includes(attributeName)) {
8961    if (uriAttributes.has(attributeName)) {
8962      return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue));
8963    }
8964
8965    return true;
8966  }
8967
8968  const regExp = allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp); // Check if a regular expression validates the attribute.
8969
8970  for (let i = 0, len = regExp.length; i < len; i++) {
8971    if (regExp[i].test(attributeName)) {
8972      return true;
8973    }
8974  }
8975
8976  return false;
8977};
8978
8979const DefaultAllowlist = {
8980  // Global attributes allowed on any supplied element below.
8981  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
8982  a: ['target', 'href', 'title', 'rel'],
8983  area: [],
8984  b: [],
8985  br: [],
8986  col: [],
8987  code: [],
8988  div: [],
8989  em: [],
8990  hr: [],
8991  h1: [],
8992  h2: [],
8993  h3: [],
8994  h4: [],
8995  h5: [],
8996  h6: [],
8997  i: [],
8998  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
8999  li: [],
9000  ol: [],
9001  p: [],
9002  pre: [],
9003  s: [],
9004  small: [],
9005  span: [],
9006  sub: [],
9007  sup: [],
9008  strong: [],
9009  u: [],
9010  ul: []
9011};
9012function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {
9013  if (!unsafeHtml.length) {
9014    return unsafeHtml;
9015  }
9016
9017  if (sanitizeFn && typeof sanitizeFn === 'function') {
9018    return sanitizeFn(unsafeHtml);
9019  }
9020
9021  const domParser = new window.DOMParser();
9022  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
9023  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));
9024
9025  for (let i = 0, len = elements.length; i < len; i++) {
9026    const element = elements[i];
9027    const elementName = element.nodeName.toLowerCase();
9028
9029    if (!Object.keys(allowList).includes(elementName)) {
9030      element.remove();
9031      continue;
9032    }
9033
9034    const attributeList = [].concat(...element.attributes);
9035    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);
9036    attributeList.forEach(attribute => {
9037      if (!allowedAttribute(attribute, allowedAttributes)) {
9038        element.removeAttribute(attribute.nodeName);
9039      }
9040    });
9041  }
9042
9043  return createdDocument.body.innerHTML;
9044}
9045
9046/**
9047 * --------------------------------------------------------------------------
9048 * Bootstrap (v5.1.3): tooltip.js
9049 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
9050 * --------------------------------------------------------------------------
9051 */
9052/**
9053 * ------------------------------------------------------------------------
9054 * Constants
9055 * ------------------------------------------------------------------------
9056 */
9057
9058const NAME$4 = 'tooltip';
9059const DATA_KEY$4 = 'bs.tooltip';
9060const EVENT_KEY$4 = `.${DATA_KEY$4}`;
9061const CLASS_PREFIX$1 = 'bs-tooltip';
9062const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);
9063const DefaultType$3 = {
9064  animation: 'boolean',
9065  template: 'string',
9066  title: '(string|element|function)',
9067  trigger: 'string',
9068  delay: '(number|object)',
9069  html: 'boolean',
9070  selector: '(string|boolean)',
9071  placement: '(string|function)',
9072  offset: '(array|string|function)',
9073  container: '(string|element|boolean)',
9074  fallbackPlacements: 'array',
9075  boundary: '(string|element)',
9076  customClass: '(string|function)',
9077  sanitize: 'boolean',
9078  sanitizeFn: '(null|function)',
9079  allowList: 'object',
9080  popperConfig: '(null|object|function)'
9081};
9082const AttachmentMap = {
9083  AUTO: 'auto',
9084  TOP: 'top',
9085  RIGHT: isRTL() ? 'left' : 'right',
9086  BOTTOM: 'bottom',
9087  LEFT: isRTL() ? 'right' : 'left'
9088};
9089const Default$3 = {
9090  animation: true,
9091  template: '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div>' + '</div>',
9092  trigger: 'hover focus',
9093  title: '',
9094  delay: 0,
9095  html: false,
9096  selector: false,
9097  placement: 'top',
9098  offset: [0, 0],
9099  container: false,
9100  fallbackPlacements: ['top', 'right', 'bottom', 'left'],
9101  boundary: 'clippingParents',
9102  customClass: '',
9103  sanitize: true,
9104  sanitizeFn: null,
9105  allowList: DefaultAllowlist,
9106  popperConfig: null
9107};
9108const Event$2 = {
9109  HIDE: `hide${EVENT_KEY$4}`,
9110  HIDDEN: `hidden${EVENT_KEY$4}`,
9111  SHOW: `show${EVENT_KEY$4}`,
9112  SHOWN: `shown${EVENT_KEY$4}`,
9113  INSERTED: `inserted${EVENT_KEY$4}`,
9114  CLICK: `click${EVENT_KEY$4}`,
9115  FOCUSIN: `focusin${EVENT_KEY$4}`,
9116  FOCUSOUT: `focusout${EVENT_KEY$4}`,
9117  MOUSEENTER: `mouseenter${EVENT_KEY$4}`,
9118  MOUSELEAVE: `mouseleave${EVENT_KEY$4}`
9119};
9120const CLASS_NAME_FADE$2 = 'fade';
9121const CLASS_NAME_MODAL = 'modal';
9122const CLASS_NAME_SHOW$2 = 'show';
9123const HOVER_STATE_SHOW = 'show';
9124const HOVER_STATE_OUT = 'out';
9125const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
9126const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;
9127const EVENT_MODAL_HIDE = 'hide.bs.modal';
9128const TRIGGER_HOVER = 'hover';
9129const TRIGGER_FOCUS = 'focus';
9130const TRIGGER_CLICK = 'click';
9131const TRIGGER_MANUAL = 'manual';
9132/**
9133 * ------------------------------------------------------------------------
9134 * Class Definition
9135 * ------------------------------------------------------------------------
9136 */
9137
9138class Tooltip extends BaseComponent {
9139  constructor(element, config) {
9140    if (typeof _popperjs_core__WEBPACK_IMPORTED_MODULE_0__ === 'undefined') {
9141      throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)');
9142    }
9143
9144    super(element); // private
9145
9146    this._isEnabled = true;
9147    this._timeout = 0;
9148    this._hoverState = '';
9149    this._activeTrigger = {};
9150    this._popper = null; // Protected
9151
9152    this._config = this._getConfig(config);
9153    this.tip = null;
9154
9155    this._setListeners();
9156  } // Getters
9157
9158
9159  static get Default() {
9160    return Default$3;
9161  }
9162
9163  static get NAME() {
9164    return NAME$4;
9165  }
9166
9167  static get Event() {
9168    return Event$2;
9169  }
9170
9171  static get DefaultType() {
9172    return DefaultType$3;
9173  } // Public
9174
9175
9176  enable() {
9177    this._isEnabled = true;
9178  }
9179
9180  disable() {
9181    this._isEnabled = false;
9182  }
9183
9184  toggleEnabled() {
9185    this._isEnabled = !this._isEnabled;
9186  }
9187
9188  toggle(event) {
9189    if (!this._isEnabled) {
9190      return;
9191    }
9192
9193    if (event) {
9194      const context = this._initializeOnDelegatedTarget(event);
9195
9196      context._activeTrigger.click = !context._activeTrigger.click;
9197
9198      if (context._isWithActiveTrigger()) {
9199        context._enter(null, context);
9200      } else {
9201        context._leave(null, context);
9202      }
9203    } else {
9204      if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$2)) {
9205        this._leave(null, this);
9206
9207        return;
9208      }
9209
9210      this._enter(null, this);
9211    }
9212  }
9213
9214  dispose() {
9215    clearTimeout(this._timeout);
9216    EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
9217
9218    if (this.tip) {
9219      this.tip.remove();
9220    }
9221
9222    this._disposePopper();
9223
9224    super.dispose();
9225  }
9226
9227  show() {
9228    if (this._element.style.display === 'none') {
9229      throw new Error('Please use show on visible elements');
9230    }
9231
9232    if (!(this.isWithContent() && this._isEnabled)) {
9233      return;
9234    }
9235
9236    const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);
9237    const shadowRoot = findShadowRoot(this._element);
9238    const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);
9239
9240    if (showEvent.defaultPrevented || !isInTheDom) {
9241      return;
9242    } // A trick to recreate a tooltip in case a new title is given by using the NOT documented `data-bs-original-title`
9243    // This will be removed later in favor of a `setContent` method
9244
9245
9246    if (this.constructor.NAME === 'tooltip' && this.tip && this.getTitle() !== this.tip.querySelector(SELECTOR_TOOLTIP_INNER).innerHTML) {
9247      this._disposePopper();
9248
9249      this.tip.remove();
9250      this.tip = null;
9251    }
9252
9253    const tip = this.getTipElement();
9254    const tipId = getUID(this.constructor.NAME);
9255    tip.setAttribute('id', tipId);
9256
9257    this._element.setAttribute('aria-describedby', tipId);
9258
9259    if (this._config.animation) {
9260      tip.classList.add(CLASS_NAME_FADE$2);
9261    }
9262
9263    const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;
9264
9265    const attachment = this._getAttachment(placement);
9266
9267    this._addAttachmentClass(attachment);
9268
9269    const {
9270      container
9271    } = this._config;
9272    Data.set(tip, this.constructor.DATA_KEY, this);
9273
9274    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {
9275      container.append(tip);
9276      EventHandler.trigger(this._element, this.constructor.Event.INSERTED);
9277    }
9278
9279    if (this._popper) {
9280      this._popper.update();
9281    } else {
9282      this._popper = _popperjs_core__WEBPACK_IMPORTED_MODULE_1__.createPopper(this._element, tip, this._getPopperConfig(attachment));
9283    }
9284
9285    tip.classList.add(CLASS_NAME_SHOW$2);
9286
9287    const customClass = this._resolvePossibleFunction(this._config.customClass);
9288
9289    if (customClass) {
9290      tip.classList.add(...customClass.split(' '));
9291    } // If this is a touch-enabled device we add extra
9292    // empty mouseover listeners to the body's immediate children;
9293    // only needed because of broken event delegation on iOS
9294    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
9295
9296
9297    if ('ontouchstart' in document.documentElement) {
9298      [].concat(...document.body.children).forEach(element => {
9299        EventHandler.on(element, 'mouseover', noop);
9300      });
9301    }
9302
9303    const complete = () => {
9304      const prevHoverState = this._hoverState;
9305      this._hoverState = null;
9306      EventHandler.trigger(this._element, this.constructor.Event.SHOWN);
9307
9308      if (prevHoverState === HOVER_STATE_OUT) {
9309        this._leave(null, this);
9310      }
9311    };
9312
9313    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$2);
9314
9315    this._queueCallback(complete, this.tip, isAnimated);
9316  }
9317
9318  hide() {
9319    if (!this._popper) {
9320      return;
9321    }
9322
9323    const tip = this.getTipElement();
9324
9325    const complete = () => {
9326      if (this._isWithActiveTrigger()) {
9327        return;
9328      }
9329
9330      if (this._hoverState !== HOVER_STATE_SHOW) {
9331        tip.remove();
9332      }
9333
9334      this._cleanTipClass();
9335
9336      this._element.removeAttribute('aria-describedby');
9337
9338      EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);
9339
9340      this._disposePopper();
9341    };
9342
9343    const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);
9344
9345    if (hideEvent.defaultPrevented) {
9346      return;
9347    }
9348
9349    tip.classList.remove(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we remove the extra
9350    // empty mouseover listeners we added for iOS support
9351
9352    if ('ontouchstart' in document.documentElement) {
9353      [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));
9354    }
9355
9356    this._activeTrigger[TRIGGER_CLICK] = false;
9357    this._activeTrigger[TRIGGER_FOCUS] = false;
9358    this._activeTrigger[TRIGGER_HOVER] = false;
9359    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$2);
9360
9361    this._queueCallback(complete, this.tip, isAnimated);
9362
9363    this._hoverState = '';
9364  }
9365
9366  update() {
9367    if (this._popper !== null) {
9368      this._popper.update();
9369    }
9370  } // Protected
9371
9372
9373  isWithContent() {
9374    return Boolean(this.getTitle());
9375  }
9376
9377  getTipElement() {
9378    if (this.tip) {
9379      return this.tip;
9380    }
9381
9382    const element = document.createElement('div');
9383    element.innerHTML = this._config.template;
9384    const tip = element.children[0];
9385    this.setContent(tip);
9386    tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);
9387    this.tip = tip;
9388    return this.tip;
9389  }
9390
9391  setContent(tip) {
9392    this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TOOLTIP_INNER);
9393  }
9394
9395  _sanitizeAndSetContent(template, content, selector) {
9396    const templateElement = SelectorEngine.findOne(selector, template);
9397
9398    if (!content && templateElement) {
9399      templateElement.remove();
9400      return;
9401    } // we use append for html objects to maintain js events
9402
9403
9404    this.setElementContent(templateElement, content);
9405  }
9406
9407  setElementContent(element, content) {
9408    if (element === null) {
9409      return;
9410    }
9411
9412    if (isElement(content)) {
9413      content = getElement(content); // content is a DOM node or a jQuery
9414
9415      if (this._config.html) {
9416        if (content.parentNode !== element) {
9417          element.innerHTML = '';
9418          element.append(content);
9419        }
9420      } else {
9421        element.textContent = content.textContent;
9422      }
9423
9424      return;
9425    }
9426
9427    if (this._config.html) {
9428      if (this._config.sanitize) {
9429        content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);
9430      }
9431
9432      element.innerHTML = content;
9433    } else {
9434      element.textContent = content;
9435    }
9436  }
9437
9438  getTitle() {
9439    const title = this._element.getAttribute('data-bs-original-title') || this._config.title;
9440
9441    return this._resolvePossibleFunction(title);
9442  }
9443
9444  updateAttachment(attachment) {
9445    if (attachment === 'right') {
9446      return 'end';
9447    }
9448
9449    if (attachment === 'left') {
9450      return 'start';
9451    }
9452
9453    return attachment;
9454  } // Private
9455
9456
9457  _initializeOnDelegatedTarget(event, context) {
9458    return context || this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());
9459  }
9460
9461  _getOffset() {
9462    const {
9463      offset
9464    } = this._config;
9465
9466    if (typeof offset === 'string') {
9467      return offset.split(',').map(val => Number.parseInt(val, 10));
9468    }
9469
9470    if (typeof offset === 'function') {
9471      return popperData => offset(popperData, this._element);
9472    }
9473
9474    return offset;
9475  }
9476
9477  _resolvePossibleFunction(content) {
9478    return typeof content === 'function' ? content.call(this._element) : content;
9479  }
9480
9481  _getPopperConfig(attachment) {
9482    const defaultBsPopperConfig = {
9483      placement: attachment,
9484      modifiers: [{
9485        name: 'flip',
9486        options: {
9487          fallbackPlacements: this._config.fallbackPlacements
9488        }
9489      }, {
9490        name: 'offset',
9491        options: {
9492          offset: this._getOffset()
9493        }
9494      }, {
9495        name: 'preventOverflow',
9496        options: {
9497          boundary: this._config.boundary
9498        }
9499      }, {
9500        name: 'arrow',
9501        options: {
9502          element: `.${this.constructor.NAME}-arrow`
9503        }
9504      }, {
9505        name: 'onChange',
9506        enabled: true,
9507        phase: 'afterWrite',
9508        fn: data => this._handlePopperPlacementChange(data)
9509      }],
9510      onFirstUpdate: data => {
9511        if (data.options.placement !== data.placement) {
9512          this._handlePopperPlacementChange(data);
9513        }
9514      }
9515    };
9516    return { ...defaultBsPopperConfig,
9517      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)
9518    };
9519  }
9520
9521  _addAttachmentClass(attachment) {
9522    this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(attachment)}`);
9523  }
9524
9525  _getAttachment(placement) {
9526    return AttachmentMap[placement.toUpperCase()];
9527  }
9528
9529  _setListeners() {
9530    const triggers = this._config.trigger.split(' ');
9531
9532    triggers.forEach(trigger => {
9533      if (trigger === 'click') {
9534        EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));
9535      } else if (trigger !== TRIGGER_MANUAL) {
9536        const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;
9537        const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;
9538        EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));
9539        EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));
9540      }
9541    });
9542
9543    this._hideModalHandler = () => {
9544      if (this._element) {
9545        this.hide();
9546      }
9547    };
9548
9549    EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
9550
9551    if (this._config.selector) {
9552      this._config = { ...this._config,
9553        trigger: 'manual',
9554        selector: ''
9555      };
9556    } else {
9557      this._fixTitle();
9558    }
9559  }
9560
9561  _fixTitle() {
9562    const title = this._element.getAttribute('title');
9563
9564    const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');
9565
9566    if (title || originalTitleType !== 'string') {
9567      this._element.setAttribute('data-bs-original-title', title || '');
9568
9569      if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {
9570        this._element.setAttribute('aria-label', title);
9571      }
9572
9573      this._element.setAttribute('title', '');
9574    }
9575  }
9576
9577  _enter(event, context) {
9578    context = this._initializeOnDelegatedTarget(event, context);
9579
9580    if (event) {
9581      context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
9582    }
9583
9584    if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$2) || context._hoverState === HOVER_STATE_SHOW) {
9585      context._hoverState = HOVER_STATE_SHOW;
9586      return;
9587    }
9588
9589    clearTimeout(context._timeout);
9590    context._hoverState = HOVER_STATE_SHOW;
9591
9592    if (!context._config.delay || !context._config.delay.show) {
9593      context.show();
9594      return;
9595    }
9596
9597    context._timeout = setTimeout(() => {
9598      if (context._hoverState === HOVER_STATE_SHOW) {
9599        context.show();
9600      }
9601    }, context._config.delay.show);
9602  }
9603
9604  _leave(event, context) {
9605    context = this._initializeOnDelegatedTarget(event, context);
9606
9607    if (event) {
9608      context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);
9609    }
9610
9611    if (context._isWithActiveTrigger()) {
9612      return;
9613    }
9614
9615    clearTimeout(context._timeout);
9616    context._hoverState = HOVER_STATE_OUT;
9617
9618    if (!context._config.delay || !context._config.delay.hide) {
9619      context.hide();
9620      return;
9621    }
9622
9623    context._timeout = setTimeout(() => {
9624      if (context._hoverState === HOVER_STATE_OUT) {
9625        context.hide();
9626      }
9627    }, context._config.delay.hide);
9628  }
9629
9630  _isWithActiveTrigger() {
9631    for (const trigger in this._activeTrigger) {
9632      if (this._activeTrigger[trigger]) {
9633        return true;
9634      }
9635    }
9636
9637    return false;
9638  }
9639
9640  _getConfig(config) {
9641    const dataAttributes = Manipulator.getDataAttributes(this._element);
9642    Object.keys(dataAttributes).forEach(dataAttr => {
9643      if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {
9644        delete dataAttributes[dataAttr];
9645      }
9646    });
9647    config = { ...this.constructor.Default,
9648      ...dataAttributes,
9649      ...(typeof config === 'object' && config ? config : {})
9650    };
9651    config.container = config.container === false ? document.body : getElement(config.container);
9652
9653    if (typeof config.delay === 'number') {
9654      config.delay = {
9655        show: config.delay,
9656        hide: config.delay
9657      };
9658    }
9659
9660    if (typeof config.title === 'number') {
9661      config.title = config.title.toString();
9662    }
9663
9664    if (typeof config.content === 'number') {
9665      config.content = config.content.toString();
9666    }
9667
9668    typeCheckConfig(NAME$4, config, this.constructor.DefaultType);
9669
9670    if (config.sanitize) {
9671      config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);
9672    }
9673
9674    return config;
9675  }
9676
9677  _getDelegateConfig() {
9678    const config = {};
9679
9680    for (const key in this._config) {
9681      if (this.constructor.Default[key] !== this._config[key]) {
9682        config[key] = this._config[key];
9683      }
9684    } // In the future can be replaced with:
9685    // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])
9686    // `Object.fromEntries(keysWithDifferentValues)`
9687
9688
9689    return config;
9690  }
9691
9692  _cleanTipClass() {
9693    const tip = this.getTipElement();
9694    const basicClassPrefixRegex = new RegExp(`(^|\\s)${this._getBasicClassPrefix()}\\S+`, 'g');
9695    const tabClass = tip.getAttribute('class').match(basicClassPrefixRegex);
9696
9697    if (tabClass !== null && tabClass.length > 0) {
9698      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));
9699    }
9700  }
9701
9702  _getBasicClassPrefix() {
9703    return CLASS_PREFIX$1;
9704  }
9705
9706  _handlePopperPlacementChange(popperData) {
9707    const {
9708      state
9709    } = popperData;
9710
9711    if (!state) {
9712      return;
9713    }
9714
9715    this.tip = state.elements.popper;
9716
9717    this._cleanTipClass();
9718
9719    this._addAttachmentClass(this._getAttachment(state.placement));
9720  }
9721
9722  _disposePopper() {
9723    if (this._popper) {
9724      this._popper.destroy();
9725
9726      this._popper = null;
9727    }
9728  } // Static
9729
9730
9731  static jQueryInterface(config) {
9732    return this.each(function () {
9733      const data = Tooltip.getOrCreateInstance(this, config);
9734
9735      if (typeof config === 'string') {
9736        if (typeof data[config] === 'undefined') {
9737          throw new TypeError(`No method named "${config}"`);
9738        }
9739
9740        data[config]();
9741      }
9742    });
9743  }
9744
9745}
9746/**
9747 * ------------------------------------------------------------------------
9748 * jQuery
9749 * ------------------------------------------------------------------------
9750 * add .Tooltip to jQuery only if jQuery is present
9751 */
9752
9753
9754defineJQueryPlugin(Tooltip);
9755
9756/**
9757 * --------------------------------------------------------------------------
9758 * Bootstrap (v5.1.3): popover.js
9759 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
9760 * --------------------------------------------------------------------------
9761 */
9762/**
9763 * ------------------------------------------------------------------------
9764 * Constants
9765 * ------------------------------------------------------------------------
9766 */
9767
9768const NAME$3 = 'popover';
9769const DATA_KEY$3 = 'bs.popover';
9770const EVENT_KEY$3 = `.${DATA_KEY$3}`;
9771const CLASS_PREFIX = 'bs-popover';
9772const Default$2 = { ...Tooltip.Default,
9773  placement: 'right',
9774  offset: [0, 8],
9775  trigger: 'click',
9776  content: '',
9777  template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>'
9778};
9779const DefaultType$2 = { ...Tooltip.DefaultType,
9780  content: '(string|element|function)'
9781};
9782const Event$1 = {
9783  HIDE: `hide${EVENT_KEY$3}`,
9784  HIDDEN: `hidden${EVENT_KEY$3}`,
9785  SHOW: `show${EVENT_KEY$3}`,
9786  SHOWN: `shown${EVENT_KEY$3}`,
9787  INSERTED: `inserted${EVENT_KEY$3}`,
9788  CLICK: `click${EVENT_KEY$3}`,
9789  FOCUSIN: `focusin${EVENT_KEY$3}`,
9790  FOCUSOUT: `focusout${EVENT_KEY$3}`,
9791  MOUSEENTER: `mouseenter${EVENT_KEY$3}`,
9792  MOUSELEAVE: `mouseleave${EVENT_KEY$3}`
9793};
9794const SELECTOR_TITLE = '.popover-header';
9795const SELECTOR_CONTENT = '.popover-body';
9796/**
9797 * ------------------------------------------------------------------------
9798 * Class Definition
9799 * ------------------------------------------------------------------------
9800 */
9801
9802class Popover extends Tooltip {
9803  // Getters
9804  static get Default() {
9805    return Default$2;
9806  }
9807
9808  static get NAME() {
9809    return NAME$3;
9810  }
9811
9812  static get Event() {
9813    return Event$1;
9814  }
9815
9816  static get DefaultType() {
9817    return DefaultType$2;
9818  } // Overrides
9819
9820
9821  isWithContent() {
9822    return this.getTitle() || this._getContent();
9823  }
9824
9825  setContent(tip) {
9826    this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TITLE);
9827
9828    this._sanitizeAndSetContent(tip, this._getContent(), SELECTOR_CONTENT);
9829  } // Private
9830
9831
9832  _getContent() {
9833    return this._resolvePossibleFunction(this._config.content);
9834  }
9835
9836  _getBasicClassPrefix() {
9837    return CLASS_PREFIX;
9838  } // Static
9839
9840
9841  static jQueryInterface(config) {
9842    return this.each(function () {
9843      const data = Popover.getOrCreateInstance(this, config);
9844
9845      if (typeof config === 'string') {
9846        if (typeof data[config] === 'undefined') {
9847          throw new TypeError(`No method named "${config}"`);
9848        }
9849
9850        data[config]();
9851      }
9852    });
9853  }
9854
9855}
9856/**
9857 * ------------------------------------------------------------------------
9858 * jQuery
9859 * ------------------------------------------------------------------------
9860 * add .Popover to jQuery only if jQuery is present
9861 */
9862
9863
9864defineJQueryPlugin(Popover);
9865
9866/**
9867 * --------------------------------------------------------------------------
9868 * Bootstrap (v5.1.3): scrollspy.js
9869 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
9870 * --------------------------------------------------------------------------
9871 */
9872/**
9873 * ------------------------------------------------------------------------
9874 * Constants
9875 * ------------------------------------------------------------------------
9876 */
9877
9878const NAME$2 = 'scrollspy';
9879const DATA_KEY$2 = 'bs.scrollspy';
9880const EVENT_KEY$2 = `.${DATA_KEY$2}`;
9881const DATA_API_KEY$1 = '.data-api';
9882const Default$1 = {
9883  offset: 10,
9884  method: 'auto',
9885  target: ''
9886};
9887const DefaultType$1 = {
9888  offset: 'number',
9889  method: 'string',
9890  target: '(string|element)'
9891};
9892const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;
9893const EVENT_SCROLL = `scroll${EVENT_KEY$2}`;
9894const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;
9895const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
9896const CLASS_NAME_ACTIVE$1 = 'active';
9897const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]';
9898const SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';
9899const SELECTOR_NAV_LINKS = '.nav-link';
9900const SELECTOR_NAV_ITEMS = '.nav-item';
9901const SELECTOR_LIST_ITEMS = '.list-group-item';
9902const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}, .${CLASS_NAME_DROPDOWN_ITEM}`;
9903const SELECTOR_DROPDOWN$1 = '.dropdown';
9904const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';
9905const METHOD_OFFSET = 'offset';
9906const METHOD_POSITION = 'position';
9907/**
9908 * ------------------------------------------------------------------------
9909 * Class Definition
9910 * ------------------------------------------------------------------------
9911 */
9912
9913class ScrollSpy extends BaseComponent {
9914  constructor(element, config) {
9915    super(element);
9916    this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;
9917    this._config = this._getConfig(config);
9918    this._offsets = [];
9919    this._targets = [];
9920    this._activeTarget = null;
9921    this._scrollHeight = 0;
9922    EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());
9923    this.refresh();
9924
9925    this._process();
9926  } // Getters
9927
9928
9929  static get Default() {
9930    return Default$1;
9931  }
9932
9933  static get NAME() {
9934    return NAME$2;
9935  } // Public
9936
9937
9938  refresh() {
9939    const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;
9940    const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
9941    const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;
9942    this._offsets = [];
9943    this._targets = [];
9944    this._scrollHeight = this._getScrollHeight();
9945    const targets = SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target);
9946    targets.map(element => {
9947      const targetSelector = getSelectorFromElement(element);
9948      const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;
9949
9950      if (target) {
9951        const targetBCR = target.getBoundingClientRect();
9952
9953        if (targetBCR.width || targetBCR.height) {
9954          return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];
9955        }
9956      }
9957
9958      return null;
9959    }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {
9960      this._offsets.push(item[0]);
9961
9962      this._targets.push(item[1]);
9963    });
9964  }
9965
9966  dispose() {
9967    EventHandler.off(this._scrollElement, EVENT_KEY$2);
9968    super.dispose();
9969  } // Private
9970
9971
9972  _getConfig(config) {
9973    config = { ...Default$1,
9974      ...Manipulator.getDataAttributes(this._element),
9975      ...(typeof config === 'object' && config ? config : {})
9976    };
9977    config.target = getElement(config.target) || document.documentElement;
9978    typeCheckConfig(NAME$2, config, DefaultType$1);
9979    return config;
9980  }
9981
9982  _getScrollTop() {
9983    return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
9984  }
9985
9986  _getScrollHeight() {
9987    return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
9988  }
9989
9990  _getOffsetHeight() {
9991    return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;
9992  }
9993
9994  _process() {
9995    const scrollTop = this._getScrollTop() + this._config.offset;
9996
9997    const scrollHeight = this._getScrollHeight();
9998
9999    const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
10000
10001    if (this._scrollHeight !== scrollHeight) {
10002      this.refresh();
10003    }
10004
10005    if (scrollTop >= maxScroll) {
10006      const target = this._targets[this._targets.length - 1];
10007
10008      if (this._activeTarget !== target) {
10009        this._activate(target);
10010      }
10011
10012      return;
10013    }
10014
10015    if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {
10016      this._activeTarget = null;
10017
10018      this._clear();
10019
10020      return;
10021    }
10022
10023    for (let i = this._offsets.length; i--;) {
10024      const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
10025
10026      if (isActiveTarget) {
10027        this._activate(this._targets[i]);
10028      }
10029    }
10030  }
10031
10032  _activate(target) {
10033    this._activeTarget = target;
10034
10035    this._clear();
10036
10037    const queries = SELECTOR_LINK_ITEMS.split(',').map(selector => `${selector}[data-bs-target="${target}"],${selector}[href="${target}"]`);
10038    const link = SelectorEngine.findOne(queries.join(','), this._config.target);
10039    link.classList.add(CLASS_NAME_ACTIVE$1);
10040
10041    if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
10042      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);
10043    } else {
10044      SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {
10045        // Set triggered links parents as active
10046        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
10047        SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item
10048
10049        SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {
10050          SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));
10051        });
10052      });
10053    }
10054
10055    EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {
10056      relatedTarget: target
10057    });
10058  }
10059
10060  _clear() {
10061    SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));
10062  } // Static
10063
10064
10065  static jQueryInterface(config) {
10066    return this.each(function () {
10067      const data = ScrollSpy.getOrCreateInstance(this, config);
10068
10069      if (typeof config !== 'string') {
10070        return;
10071      }
10072
10073      if (typeof data[config] === 'undefined') {
10074        throw new TypeError(`No method named "${config}"`);
10075      }
10076
10077      data[config]();
10078    });
10079  }
10080
10081}
10082/**
10083 * ------------------------------------------------------------------------
10084 * Data Api implementation
10085 * ------------------------------------------------------------------------
10086 */
10087
10088
10089EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
10090  SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));
10091});
10092/**
10093 * ------------------------------------------------------------------------
10094 * jQuery
10095 * ------------------------------------------------------------------------
10096 * add .ScrollSpy to jQuery only if jQuery is present
10097 */
10098
10099defineJQueryPlugin(ScrollSpy);
10100
10101/**
10102 * --------------------------------------------------------------------------
10103 * Bootstrap (v5.1.3): tab.js
10104 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
10105 * --------------------------------------------------------------------------
10106 */
10107/**
10108 * ------------------------------------------------------------------------
10109 * Constants
10110 * ------------------------------------------------------------------------
10111 */
10112
10113const NAME$1 = 'tab';
10114const DATA_KEY$1 = 'bs.tab';
10115const EVENT_KEY$1 = `.${DATA_KEY$1}`;
10116const DATA_API_KEY = '.data-api';
10117const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;
10118const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;
10119const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;
10120const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;
10121const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;
10122const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';
10123const CLASS_NAME_ACTIVE = 'active';
10124const CLASS_NAME_FADE$1 = 'fade';
10125const CLASS_NAME_SHOW$1 = 'show';
10126const SELECTOR_DROPDOWN = '.dropdown';
10127const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
10128const SELECTOR_ACTIVE = '.active';
10129const SELECTOR_ACTIVE_UL = ':scope > li > .active';
10130const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]';
10131const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
10132const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';
10133/**
10134 * ------------------------------------------------------------------------
10135 * Class Definition
10136 * ------------------------------------------------------------------------
10137 */
10138
10139class Tab extends BaseComponent {
10140  // Getters
10141  static get NAME() {
10142    return NAME$1;
10143  } // Public
10144
10145
10146  show() {
10147    if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {
10148      return;
10149    }
10150
10151    let previous;
10152    const target = getElementFromSelector(this._element);
10153
10154    const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);
10155
10156    if (listElement) {
10157      const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;
10158      previous = SelectorEngine.find(itemSelector, listElement);
10159      previous = previous[previous.length - 1];
10160    }
10161
10162    const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {
10163      relatedTarget: this._element
10164    }) : null;
10165    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {
10166      relatedTarget: previous
10167    });
10168
10169    if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {
10170      return;
10171    }
10172
10173    this._activate(this._element, listElement);
10174
10175    const complete = () => {
10176      EventHandler.trigger(previous, EVENT_HIDDEN$1, {
10177        relatedTarget: this._element
10178      });
10179      EventHandler.trigger(this._element, EVENT_SHOWN$1, {
10180        relatedTarget: previous
10181      });
10182    };
10183
10184    if (target) {
10185      this._activate(target, target.parentNode, complete);
10186    } else {
10187      complete();
10188    }
10189  } // Private
10190
10191
10192  _activate(element, container, callback) {
10193    const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);
10194    const active = activeElements[0];
10195    const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);
10196
10197    const complete = () => this._transitionComplete(element, active, callback);
10198
10199    if (active && isTransitioning) {
10200      active.classList.remove(CLASS_NAME_SHOW$1);
10201
10202      this._queueCallback(complete, element, true);
10203    } else {
10204      complete();
10205    }
10206  }
10207
10208  _transitionComplete(element, active, callback) {
10209    if (active) {
10210      active.classList.remove(CLASS_NAME_ACTIVE);
10211      const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);
10212
10213      if (dropdownChild) {
10214        dropdownChild.classList.remove(CLASS_NAME_ACTIVE);
10215      }
10216
10217      if (active.getAttribute('role') === 'tab') {
10218        active.setAttribute('aria-selected', false);
10219      }
10220    }
10221
10222    element.classList.add(CLASS_NAME_ACTIVE);
10223
10224    if (element.getAttribute('role') === 'tab') {
10225      element.setAttribute('aria-selected', true);
10226    }
10227
10228    reflow(element);
10229
10230    if (element.classList.contains(CLASS_NAME_FADE$1)) {
10231      element.classList.add(CLASS_NAME_SHOW$1);
10232    }
10233
10234    let parent = element.parentNode;
10235
10236    if (parent && parent.nodeName === 'LI') {
10237      parent = parent.parentNode;
10238    }
10239
10240    if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {
10241      const dropdownElement = element.closest(SELECTOR_DROPDOWN);
10242
10243      if (dropdownElement) {
10244        SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));
10245      }
10246
10247      element.setAttribute('aria-expanded', true);
10248    }
10249
10250    if (callback) {
10251      callback();
10252    }
10253  } // Static
10254
10255
10256  static jQueryInterface(config) {
10257    return this.each(function () {
10258      const data = Tab.getOrCreateInstance(this);
10259
10260      if (typeof config === 'string') {
10261        if (typeof data[config] === 'undefined') {
10262          throw new TypeError(`No method named "${config}"`);
10263        }
10264
10265        data[config]();
10266      }
10267    });
10268  }
10269
10270}
10271/**
10272 * ------------------------------------------------------------------------
10273 * Data Api implementation
10274 * ------------------------------------------------------------------------
10275 */
10276
10277
10278EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
10279  if (['A', 'AREA'].includes(this.tagName)) {
10280    event.preventDefault();
10281  }
10282
10283  if (isDisabled(this)) {
10284    return;
10285  }
10286
10287  const data = Tab.getOrCreateInstance(this);
10288  data.show();
10289});
10290/**
10291 * ------------------------------------------------------------------------
10292 * jQuery
10293 * ------------------------------------------------------------------------
10294 * add .Tab to jQuery only if jQuery is present
10295 */
10296
10297defineJQueryPlugin(Tab);
10298
10299/**
10300 * --------------------------------------------------------------------------
10301 * Bootstrap (v5.1.3): toast.js
10302 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
10303 * --------------------------------------------------------------------------
10304 */
10305/**
10306 * ------------------------------------------------------------------------
10307 * Constants
10308 * ------------------------------------------------------------------------
10309 */
10310
10311const NAME = 'toast';
10312const DATA_KEY = 'bs.toast';
10313const EVENT_KEY = `.${DATA_KEY}`;
10314const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;
10315const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;
10316const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;
10317const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;
10318const EVENT_HIDE = `hide${EVENT_KEY}`;
10319const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
10320const EVENT_SHOW = `show${EVENT_KEY}`;
10321const EVENT_SHOWN = `shown${EVENT_KEY}`;
10322const CLASS_NAME_FADE = 'fade';
10323const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility
10324
10325const CLASS_NAME_SHOW = 'show';
10326const CLASS_NAME_SHOWING = 'showing';
10327const DefaultType = {
10328  animation: 'boolean',
10329  autohide: 'boolean',
10330  delay: 'number'
10331};
10332const Default = {
10333  animation: true,
10334  autohide: true,
10335  delay: 5000
10336};
10337/**
10338 * ------------------------------------------------------------------------
10339 * Class Definition
10340 * ------------------------------------------------------------------------
10341 */
10342
10343class Toast extends BaseComponent {
10344  constructor(element, config) {
10345    super(element);
10346    this._config = this._getConfig(config);
10347    this._timeout = null;
10348    this._hasMouseInteraction = false;
10349    this._hasKeyboardInteraction = false;
10350
10351    this._setListeners();
10352  } // Getters
10353
10354
10355  static get DefaultType() {
10356    return DefaultType;
10357  }
10358
10359  static get Default() {
10360    return Default;
10361  }
10362
10363  static get NAME() {
10364    return NAME;
10365  } // Public
10366
10367
10368  show() {
10369    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);
10370
10371    if (showEvent.defaultPrevented) {
10372      return;
10373    }
10374
10375    this._clearTimeout();
10376
10377    if (this._config.animation) {
10378      this._element.classList.add(CLASS_NAME_FADE);
10379    }
10380
10381    const complete = () => {
10382      this._element.classList.remove(CLASS_NAME_SHOWING);
10383
10384      EventHandler.trigger(this._element, EVENT_SHOWN);
10385
10386      this._maybeScheduleHide();
10387    };
10388
10389    this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated
10390
10391
10392    reflow(this._element);
10393
10394    this._element.classList.add(CLASS_NAME_SHOW);
10395
10396    this._element.classList.add(CLASS_NAME_SHOWING);
10397
10398    this._queueCallback(complete, this._element, this._config.animation);
10399  }
10400
10401  hide() {
10402    if (!this._element.classList.contains(CLASS_NAME_SHOW)) {
10403      return;
10404    }
10405
10406    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);
10407
10408    if (hideEvent.defaultPrevented) {
10409      return;
10410    }
10411
10412    const complete = () => {
10413      this._element.classList.add(CLASS_NAME_HIDE); // @deprecated
10414
10415
10416      this._element.classList.remove(CLASS_NAME_SHOWING);
10417
10418      this._element.classList.remove(CLASS_NAME_SHOW);
10419
10420      EventHandler.trigger(this._element, EVENT_HIDDEN);
10421    };
10422
10423    this._element.classList.add(CLASS_NAME_SHOWING);
10424
10425    this._queueCallback(complete, this._element, this._config.animation);
10426  }
10427
10428  dispose() {
10429    this._clearTimeout();
10430
10431    if (this._element.classList.contains(CLASS_NAME_SHOW)) {
10432      this._element.classList.remove(CLASS_NAME_SHOW);
10433    }
10434
10435    super.dispose();
10436  } // Private
10437
10438
10439  _getConfig(config) {
10440    config = { ...Default,
10441      ...Manipulator.getDataAttributes(this._element),
10442      ...(typeof config === 'object' && config ? config : {})
10443    };
10444    typeCheckConfig(NAME, config, this.constructor.DefaultType);
10445    return config;
10446  }
10447
10448  _maybeScheduleHide() {
10449    if (!this._config.autohide) {
10450      return;
10451    }
10452
10453    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {
10454      return;
10455    }
10456
10457    this._timeout = setTimeout(() => {
10458      this.hide();
10459    }, this._config.delay);
10460  }
10461
10462  _onInteraction(event, isInteracting) {
10463    switch (event.type) {
10464      case 'mouseover':
10465      case 'mouseout':
10466        this._hasMouseInteraction = isInteracting;
10467        break;
10468
10469      case 'focusin':
10470      case 'focusout':
10471        this._hasKeyboardInteraction = isInteracting;
10472        break;
10473    }
10474
10475    if (isInteracting) {
10476      this._clearTimeout();
10477
10478      return;
10479    }
10480
10481    const nextElement = event.relatedTarget;
10482
10483    if (this._element === nextElement || this._element.contains(nextElement)) {
10484      return;
10485    }
10486
10487    this._maybeScheduleHide();
10488  }
10489
10490  _setListeners() {
10491    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));
10492    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));
10493    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));
10494    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));
10495  }
10496
10497  _clearTimeout() {
10498    clearTimeout(this._timeout);
10499    this._timeout = null;
10500  } // Static
10501
10502
10503  static jQueryInterface(config) {
10504    return this.each(function () {
10505      const data = Toast.getOrCreateInstance(this, config);
10506
10507      if (typeof config === 'string') {
10508        if (typeof data[config] === 'undefined') {
10509          throw new TypeError(`No method named "${config}"`);
10510        }
10511
10512        data[config](this);
10513      }
10514    });
10515  }
10516
10517}
10518
10519enableDismissTrigger(Toast);
10520/**
10521 * ------------------------------------------------------------------------
10522 * jQuery
10523 * ------------------------------------------------------------------------
10524 * add .Toast to jQuery only if jQuery is present
10525 */
10526
10527defineJQueryPlugin(Toast);
10528
10529
10530//# sourceMappingURL=bootstrap.esm.js.map
10531
10532
10533/***/ }),
10534
vendor: 544,380 bytes, lines 10535-27746
10535/***/ "./node_modules/lodash/lodash.js":
10536/*!***************************************!*\
10537  !*** ./node_modules/lodash/lodash.js ***!
10538  \***************************************/
10539/***/ (function(module, exports, __webpack_require__) {
10540
10541/* module decorator */ module = __webpack_require__.nmd(module);
10542var __WEBPACK_AMD_DEFINE_RESULT__;/**
10543 * @license
10544 * Lodash <https://lodash.com/>
10545 * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
10546 * Released under MIT license <https://lodash.com/license>
10547 * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
10548 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
10549 */
10550;(function() {
10551
10552  /** Used as a safe reference for `undefined` in pre-ES5 environments. */
10553  var undefined;
10554
10555  /** Used as the semantic version number. */
10556  var VERSION = '4.17.21';
10557
10558  /** Used as the size to enable large array optimizations. */
10559  var LARGE_ARRAY_SIZE = 200;
10560
10561  /** Error message constants. */
10562  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',
10563      FUNC_ERROR_TEXT = 'Expected a function',
10564      INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';
10565
10566  /** Used to stand-in for `undefined` hash values. */
10567  var HASH_UNDEFINED = '__lodash_hash_undefined__';
10568
10569  /** Used as the maximum memoize cache size. */
10570  var MAX_MEMOIZE_SIZE = 500;
10571
10572  /** Used as the internal argument placeholder. */
10573  var PLACEHOLDER = '__lodash_placeholder__';
10574
10575  /** Used to compose bitmasks for cloning. */
10576  var CLONE_DEEP_FLAG = 1,
10577      CLONE_FLAT_FLAG = 2,
10578      CLONE_SYMBOLS_FLAG = 4;
10579
10580  /** Used to compose bitmasks for value comparisons. */
10581  var COMPARE_PARTIAL_FLAG = 1,
10582      COMPARE_UNORDERED_FLAG = 2;
10583
10584  /** Used to compose bitmasks for function metadata. */
10585  var WRAP_BIND_FLAG = 1,
10586      WRAP_BIND_KEY_FLAG = 2,
10587      WRAP_CURRY_BOUND_FLAG = 4,
10588      WRAP_CURRY_FLAG = 8,
10589      WRAP_CURRY_RIGHT_FLAG = 16,
10590      WRAP_PARTIAL_FLAG = 32,
10591      WRAP_PARTIAL_RIGHT_FLAG = 64,
10592      WRAP_ARY_FLAG = 128,
10593      WRAP_REARG_FLAG = 256,
10594      WRAP_FLIP_FLAG = 512;
10595
10596  /** Used as default options for `_.truncate`. */
10597  var DEFAULT_TRUNC_LENGTH = 30,
10598      DEFAULT_TRUNC_OMISSION = '...';
10599
10600  /** Used to detect hot functions by number of calls within a span of milliseconds. */
10601  var HOT_COUNT = 800,
10602      HOT_SPAN = 16;
10603
10604  /** Used to indicate the type of lazy iteratees. */
10605  var LAZY_FILTER_FLAG = 1,
10606      LAZY_MAP_FLAG = 2,
10607      LAZY_WHILE_FLAG = 3;
10608
10609  /** Used as references for various `Number` constants. */
10610  var INFINITY = 1 / 0,
10611      MAX_SAFE_INTEGER = 9007199254740991,
10612      MAX_INTEGER = 1.7976931348623157e+308,
10613      NAN = 0 / 0;
10614
10615  /** Used as references for the maximum length and index of an array. */
10616  var MAX_ARRAY_LENGTH = 4294967295,
10617      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,
10618      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;
10619
10620  /** Used to associate wrap methods with their bit flags. */
10621  var wrapFlags = [
10622    ['ary', WRAP_ARY_FLAG],
10623    ['bind', WRAP_BIND_FLAG],
10624    ['bindKey', WRAP_BIND_KEY_FLAG],
10625    ['curry', WRAP_CURRY_FLAG],
10626    ['curryRight', WRAP_CURRY_RIGHT_FLAG],
10627    ['flip', WRAP_FLIP_FLAG],
10628    ['partial', WRAP_PARTIAL_FLAG],
10629    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],
10630    ['rearg', WRAP_REARG_FLAG]
10631  ];
10632
10633  /** `Object#toString` result references. */
10634  var argsTag = '[object Arguments]',
10635      arrayTag = '[object Array]',
10636      asyncTag = '[object AsyncFunction]',
10637      boolTag = '[object Boolean]',
10638      dateTag = '[object Date]',
10639      domExcTag = '[object DOMException]',
10640      errorTag = '[object Error]',
10641      funcTag = '[object Function]',
10642      genTag = '[object GeneratorFunction]',
10643      mapTag = '[object Map]',
10644      numberTag = '[object Number]',
10645      nullTag = '[object Null]',
10646      objectTag = '[object Object]',
10647      promiseTag = '[object Promise]',
10648      proxyTag = '[object Proxy]',
10649      regexpTag = '[object RegExp]',
10650      setTag = '[object Set]',
10651      stringTag = '[object String]',
10652      symbolTag = '[object Symbol]',
10653      undefinedTag = '[object Undefined]',
10654      weakMapTag = '[object WeakMap]',
10655      weakSetTag = '[object WeakSet]';
10656
10657  var arrayBufferTag = '[object ArrayBuffer]',
10658      dataViewTag = '[object DataView]',
10659      float32Tag = '[object Float32Array]',
10660      float64Tag = '[object Float64Array]',
10661      int8Tag = '[object Int8Array]',
10662      int16Tag = '[object Int16Array]',
10663      int32Tag = '[object Int32Array]',
10664      uint8Tag = '[object Uint8Array]',
10665      uint8ClampedTag = '[object Uint8ClampedArray]',
10666      uint16Tag = '[object Uint16Array]',
10667      uint32Tag = '[object Uint32Array]';
10668
10669  /** Used to match empty string literals in compiled template source. */
10670  var reEmptyStringLeading = /\b__p \+= '';/g,
10671      reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
10672      reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
10673
10674  /** Used to match HTML entities and HTML characters. */
10675  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,
10676      reUnescapedHtml = /[&<>"']/g,
10677      reHasEscapedHtml = RegExp(reEscapedHtml.source),
10678      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
10679
10680  /** Used to match template delimiters. */
10681  var reEscape = /<%-([\s\S]+?)%>/g,
10682      reEvaluate = /<%([\s\S]+?)%>/g,
10683      reInterpolate = /<%=([\s\S]+?)%>/g;
10684
10685  /** Used to match property names within property paths. */
10686  var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
10687      reIsPlainProp = /^\w*$/,
10688      rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
10689
10690  /**
10691   * Used to match `RegExp`
10692   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
10693   */
10694  var reRegExpChar = /[\\^$.*+?()[\]{}|]/g,
10695      reHasRegExpChar = RegExp(reRegExpChar.source);
10696
10697  /** Used to match leading whitespace. */
10698  var reTrimStart = /^\s+/;
10699
10700  /** Used to match a single whitespace character. */
10701  var reWhitespace = /\s/;
10702
10703  /** Used to match wrap detail comments. */
10704  var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,
10705      reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/,
10706      reSplitDetails = /,? & /;
10707
10708  /** Used to match words composed of alphanumeric characters. */
10709  var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;
10710
10711  /**
10712   * Used to validate the `validate` option in `_.template` variable.
10713   *
10714   * Forbids characters which could potentially change the meaning of the function argument definition:
10715   * - "()," (modification of function parameters)
10716   * - "=" (default value)
10717   * - "[]{}" (destructuring of function parameters)
10718   * - "/" (beginning of a comment)
10719   * - whitespace
10720   */
10721  var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/;
10722
10723  /** Used to match backslashes in property paths. */
10724  var reEscapeChar = /\\(\\)?/g;
10725
10726  /**
10727   * Used to match
10728   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).
10729   */
10730  var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
10731
10732  /** Used to match `RegExp` flags from their coerced string values. */
10733  var reFlags = /\w*$/;
10734
10735  /** Used to detect bad signed hexadecimal string values. */
10736  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
10737
10738  /** Used to detect binary string values. */
10739  var reIsBinary = /^0b[01]+$/i;
10740
10741  /** Used to detect host constructors (Safari). */
10742  var reIsHostCtor = /^\[object .+?Constructor\]$/;
10743
10744  /** Used to detect octal string values. */
10745  var reIsOctal = /^0o[0-7]+$/i;
10746
10747  /** Used to detect unsigned integer values. */
10748  var reIsUint = /^(?:0|[1-9]\d*)$/;
10749
10750  /** Used to match Latin Unicode letters (excluding mathematical operators). */
10751  var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;
10752
10753  /** Used to ensure capturing order of template delimiters. */
10754  var reNoMatch = /($^)/;
10755
10756  /** Used to match unescaped characters in compiled string literals. */
10757  var reUnescapedString = /['\n\r\u2028\u2029\\]/g;
10758
10759  /** Used to compose unicode character classes. */
10760  var rsAstralRange = '\\ud800-\\udfff',
10761      rsComboMarksRange = '\\u0300-\\u036f',
10762      reComboHalfMarksRange = '\\ufe20-\\ufe2f',
10763      rsComboSymbolsRange = '\\u20d0-\\u20ff',
10764      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
10765      rsDingbatRange = '\\u2700-\\u27bf',
10766      rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff',
10767      rsMathOpRange = '\\xac\\xb1\\xd7\\xf7',
10768      rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf',
10769      rsPunctuationRange = '\\u2000-\\u206f',
10770      rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000',
10771      rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde',
10772      rsVarRange = '\\ufe0e\\ufe0f',
10773      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;
10774
10775  /** Used to compose unicode capture groups. */
10776  var rsApos = "['\u2019]",
10777      rsAstral = '[' + rsAstralRange + ']',
10778      rsBreak = '[' + rsBreakRange + ']',
10779      rsCombo = '[' + rsComboRange + ']',
10780      rsDigits = '\\d+',
10781      rsDingbat = '[' + rsDingbatRange + ']',
10782      rsLower = '[' + rsLowerRange + ']',
10783      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',
10784      rsFitz = '\\ud83c[\\udffb-\\udfff]',
10785      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
10786      rsNonAstral = '[^' + rsAstralRange + ']',
10787      rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
10788      rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
10789      rsUpper = '[' + rsUpperRange + ']',
10790      rsZWJ = '\\u200d';
10791
10792  /** Used to compose unicode regexes. */
10793  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',
10794      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',
10795      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',
10796      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',
10797      reOptMod = rsModifier + '?',
10798      rsOptVar = '[' + rsVarRange + ']?',
10799      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
10800      rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])',
10801      rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])',
10802      rsSeq = rsOptVar + reOptMod + rsOptJoin,
10803      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,
10804      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';
10805
10806  /** Used to match apostrophes. */
10807  var reApos = RegExp(rsApos, 'g');
10808
10809  /**
10810   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and
10811   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).
10812   */
10813  var reComboMark = RegExp(rsCombo, 'g');
10814
10815  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
10816  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');
10817
10818  /** Used to match complex or compound words. */
10819  var reUnicodeWord = RegExp([
10820    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',
10821    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',
10822    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,
10823    rsUpper + '+' + rsOptContrUpper,
10824    rsOrdUpper,
10825    rsOrdLower,
10826    rsDigits,
10827    rsEmoji
10828  ].join('|'), 'g');
10829
10830  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
10831  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');
10832
10833  /** Used to detect strings that need a more robust regexp to match words. */
10834  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;
10835
10836  /** Used to assign default `context` object properties. */
10837  var contextProps = [
10838    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',
10839    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',
10840    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',
10841    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',
10842    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'
10843  ];
10844
10845  /** Used to make template sourceURLs easier to identify. */
10846  var templateCounter = -1;
10847
10848  /** Used to identify `toStringTag` values of typed arrays. */
10849  var typedArrayTags = {};
10850  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
10851  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
10852  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
10853  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
10854  typedArrayTags[uint32Tag] = true;
10855  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
10856  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
10857  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
10858  typedArrayTags[errorTag] = typedArrayTags[funcTag] =
10859  typedArrayTags[mapTag] = typedArrayTags[numberTag] =
10860  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
10861  typedArrayTags[setTag] = typedArrayTags[stringTag] =
10862  typedArrayTags[weakMapTag] = false;
10863
10864  /** Used to identify `toStringTag` values supported by `_.clone`. */
10865  var cloneableTags = {};
10866  cloneableTags[argsTag] = cloneableTags[arrayTag] =
10867  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =
10868  cloneableTags[boolTag] = cloneableTags[dateTag] =
10869  cloneableTags[float32Tag] = cloneableTags[float64Tag] =
10870  cloneableTags[int8Tag] = cloneableTags[int16Tag] =
10871  cloneableTags[int32Tag] = cloneableTags[mapTag] =
10872  cloneableTags[numberTag] = cloneableTags[objectTag] =
10873  cloneableTags[regexpTag] = cloneableTags[setTag] =
10874  cloneableTags[stringTag] = cloneableTags[symbolTag] =
10875  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
10876  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
10877  cloneableTags[errorTag] = cloneableTags[funcTag] =
10878  cloneableTags[weakMapTag] = false;
10879
10880  /** Used to map Latin Unicode letters to basic Latin letters. */
10881  var deburredLetters = {
10882    // Latin-1 Supplement block.
10883    '\xc0': 'A',  '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A',
10884    '\xe0': 'a',  '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a',
10885    '\xc7': 'C',  '\xe7': 'c',
10886    '\xd0': 'D',  '\xf0': 'd',
10887    '\xc8': 'E',  '\xc9': 'E', '\xca': 'E', '\xcb': 'E',
10888    '\xe8': 'e',  '\xe9': 'e', '\xea': 'e', '\xeb': 'e',
10889    '\xcc': 'I',  '\xcd': 'I', '\xce': 'I', '\xcf': 'I',
10890    '\xec': 'i',  '\xed': 'i', '\xee': 'i', '\xef': 'i',
10891    '\xd1': 'N',  '\xf1': 'n',
10892    '\xd2': 'O',  '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O',
10893    '\xf2': 'o',  '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o',
10894    '\xd9': 'U',  '\xda': 'U', '\xdb': 'U', '\xdc': 'U',
10895    '\xf9': 'u',  '\xfa': 'u', '\xfb': 'u', '\xfc': 'u',
10896    '\xdd': 'Y',  '\xfd': 'y', '\xff': 'y',
10897    '\xc6': 'Ae', '\xe6': 'ae',
10898    '\xde': 'Th', '\xfe': 'th',
10899    '\xdf': 'ss',
10900    // Latin Extended-A block.
10901    '\u0100': 'A',  '\u0102': 'A', '\u0104': 'A',
10902    '\u0101': 'a',  '\u0103': 'a', '\u0105': 'a',
10903    '\u0106': 'C',  '\u0108': 'C', '\u010a': 'C', '\u010c': 'C',
10904    '\u0107': 'c',  '\u0109': 'c', '\u010b': 'c', '\u010d': 'c',
10905    '\u010e': 'D',  '\u0110': 'D', '\u010f': 'd', '\u0111': 'd',
10906    '\u0112': 'E',  '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E',
10907    '\u0113': 'e',  '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e',
10908    '\u011c': 'G',  '\u011e': 'G', '\u0120': 'G', '\u0122': 'G',
10909    '\u011d': 'g',  '\u011f': 'g', '\u0121': 'g', '\u0123': 'g',
10910    '\u0124': 'H',  '\u0126': 'H', '\u0125': 'h', '\u0127': 'h',
10911    '\u0128': 'I',  '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I',
10912    '\u0129': 'i',  '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i',
10913    '\u0134': 'J',  '\u0135': 'j',
10914    '\u0136': 'K',  '\u0137': 'k', '\u0138': 'k',
10915    '\u0139': 'L',  '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L',
10916    '\u013a': 'l',  '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l',
10917    '\u0143': 'N',  '\u0145': 'N', '\u0147': 'N', '\u014a': 'N',
10918    '\u0144': 'n',  '\u0146': 'n', '\u0148': 'n', '\u014b': 'n',
10919    '\u014c': 'O',  '\u014e': 'O', '\u0150': 'O',
10920    '\u014d': 'o',  '\u014f': 'o', '\u0151': 'o',
10921    '\u0154': 'R',  '\u0156': 'R', '\u0158': 'R',
10922    '\u0155': 'r',  '\u0157': 'r', '\u0159': 'r',
10923    '\u015a': 'S',  '\u015c': 'S', '\u015e': 'S', '\u0160': 'S',
10924    '\u015b': 's',  '\u015d': 's', '\u015f': 's', '\u0161': 's',
10925    '\u0162': 'T',  '\u0164': 'T', '\u0166': 'T',
10926    '\u0163': 't',  '\u0165': 't', '\u0167': 't',
10927    '\u0168': 'U',  '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U',
10928    '\u0169': 'u',  '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u',
10929    '\u0174': 'W',  '\u0175': 'w',
10930    '\u0176': 'Y',  '\u0177': 'y', '\u0178': 'Y',
10931    '\u0179': 'Z',  '\u017b': 'Z', '\u017d': 'Z',
10932    '\u017a': 'z',  '\u017c': 'z', '\u017e': 'z',
10933    '\u0132': 'IJ', '\u0133': 'ij',
10934    '\u0152': 'Oe', '\u0153': 'oe',
10935    '\u0149': "'n", '\u017f': 's'
10936  };
10937
10938  /** Used to map characters to HTML entities. */
10939  var htmlEscapes = {
10940    '&': '&amp;',
10941    '<': '&lt;',
10942    '>': '&gt;',
10943    '"': '&quot;',
10944    "'": '&#39;'
10945  };
10946
10947  /** Used to map HTML entities to characters. */
10948  var htmlUnescapes = {
10949    '&amp;': '&',
10950    '&lt;': '<',
10951    '&gt;': '>',
10952    '&quot;': '"',
10953    '&#39;': "'"
10954  };
10955
10956  /** Used to escape characters for inclusion in compiled string literals. */
10957  var stringEscapes = {
10958    '\\': '\\',
10959    "'": "'",
10960    '\n': 'n',
10961    '\r': 'r',
10962    '\u2028': 'u2028',
10963    '\u2029': 'u2029'
10964  };
10965
10966  /** Built-in method references without a dependency on `root`. */
10967  var freeParseFloat = parseFloat,
10968      freeParseInt = parseInt;
10969
10970  /** Detect free variable `global` from Node.js. */
10971  var freeGlobal = typeof __webpack_require__.g == 'object' && __webpack_require__.g && __webpack_require__.g.Object === Object && __webpack_require__.g;
10972
10973  /** Detect free variable `self`. */
10974  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
10975
10976  /** Used as a reference to the global object. */
10977  var root = freeGlobal || freeSelf || Function('return this')();
10978
10979  /** Detect free variable `exports`. */
10980  var freeExports =  true && exports && !exports.nodeType && exports;
10981
10982  /** Detect free variable `module`. */
10983  var freeModule = freeExports && "object" == 'object' && module && !module.nodeType && module;
10984
10985  /** Detect the popular CommonJS extension `module.exports`. */
10986  var moduleExports = freeModule && freeModule.exports === freeExports;
10987
10988  /** Detect free variable `process` from Node.js. */
10989  var freeProcess = moduleExports && freeGlobal.process;
10990
10991  /** Used to access faster Node.js helpers. */
10992  var nodeUtil = (function() {
10993    try {
10994      // Use `util.types` for Node.js 10+.
10995      var types = freeModule && freeModule.require && freeModule.require('util').types;
10996
10997      if (types) {
10998        return types;
10999      }
11000
11001      // Legacy `process.binding('util')` for Node.js < 10.
11002      return freeProcess && freeProcess.binding && freeProcess.binding('util');
11003    } catch (e) {}
11004  }());
11005
11006  /* Node.js helper references. */
11007  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,
11008      nodeIsDate = nodeUtil && nodeUtil.isDate,
11009      nodeIsMap = nodeUtil && nodeUtil.isMap,
11010      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,
11011      nodeIsSet = nodeUtil && nodeUtil.isSet,
11012      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
11013
11014  /*--------------------------------------------------------------------------*/
11015
11016  /**
11017   * A faster alternative to `Function#apply`, this function invokes `func`
11018   * with the `this` binding of `thisArg` and the arguments of `args`.
11019   *
11020   * @private
11021   * @param {Function} func The function to invoke.
11022   * @param {*} thisArg The `this` binding of `func`.
11023   * @param {Array} args The arguments to invoke `func` with.
11024   * @returns {*} Returns the result of `func`.
11025   */
11026  function apply(func, thisArg, args) {
11027    switch (args.length) {
11028      case 0: return func.call(thisArg);
11029      case 1: return func.call(thisArg, args[0]);
11030      case 2: return func.call(thisArg, args[0], args[1]);
11031      case 3: return func.call(thisArg, args[0], args[1], args[2]);
11032    }
11033    return func.apply(thisArg, args);
11034  }
11035
11036  /**
11037   * A specialized version of `baseAggregator` for arrays.
11038   *
11039   * @private
11040   * @param {Array} [array] The array to iterate over.
11041   * @param {Function} setter The function to set `accumulator` values.
11042   * @param {Function} iteratee The iteratee to transform keys.
11043   * @param {Object} accumulator The initial aggregated object.
11044   * @returns {Function} Returns `accumulator`.
11045   */
11046  function arrayAggregator(array, setter, iteratee, accumulator) {
11047    var index = -1,
11048        length = array == null ? 0 : array.length;
11049
11050    while (++index < length) {
11051      var value = array[index];
11052      setter(accumulator, value, iteratee(value), array);
11053    }
11054    return accumulator;
11055  }
11056
11057  /**
11058   * A specialized version of `_.forEach` for arrays without support for
11059   * iteratee shorthands.
11060   *
11061   * @private
11062   * @param {Array} [array] The array to iterate over.
11063   * @param {Function} iteratee The function invoked per iteration.
11064   * @returns {Array} Returns `array`.
11065   */
11066  function arrayEach(array, iteratee) {
11067    var index = -1,
11068        length = array == null ? 0 : array.length;
11069
11070    while (++index < length) {
11071      if (iteratee(array[index], index, array) === false) {
11072        break;
11073      }
11074    }
11075    return array;
11076  }
11077
11078  /**
11079   * A specialized version of `_.forEachRight` for arrays without support for
11080   * iteratee shorthands.
11081   *
11082   * @private
11083   * @param {Array} [array] The array to iterate over.
11084   * @param {Function} iteratee The function invoked per iteration.
11085   * @returns {Array} Returns `array`.
11086   */
11087  function arrayEachRight(array, iteratee) {
11088    var length = array == null ? 0 : array.length;
11089
11090    while (length--) {
11091      if (iteratee(array[length], length, array) === false) {
11092        break;
11093      }
11094    }
11095    return array;
11096  }
11097
11098  /**
11099   * A specialized version of `_.every` for arrays without support for
11100   * iteratee shorthands.
11101   *
11102   * @private
11103   * @param {Array} [array] The array to iterate over.
11104   * @param {Function} predicate The function invoked per iteration.
11105   * @returns {boolean} Returns `true` if all elements pass the predicate check,
11106   *  else `false`.
11107   */
11108  function arrayEvery(array, predicate) {
11109    var index = -1,
11110        length = array == null ? 0 : array.length;
11111
11112    while (++index < length) {
11113      if (!predicate(array[index], index, array)) {
11114        return false;
11115      }
11116    }
11117    return true;
11118  }
11119
11120  /**
11121   * A specialized version of `_.filter` for arrays without support for
11122   * iteratee shorthands.
11123   *
11124   * @private
11125   * @param {Array} [array] The array to iterate over.
11126   * @param {Function} predicate The function invoked per iteration.
11127   * @returns {Array} Returns the new filtered array.
11128   */
11129  function arrayFilter(array, predicate) {
11130    var index = -1,
11131        length = array == null ? 0 : array.length,
11132        resIndex = 0,
11133        result = [];
11134
11135    while (++index < length) {
11136      var value = array[index];
11137      if (predicate(value, index, array)) {
11138        result[resIndex++] = value;
11139      }
11140    }
11141    return result;
11142  }
11143
11144  /**
11145   * A specialized version of `_.includes` for arrays without support for
11146   * specifying an index to search from.
11147   *
11148   * @private
11149   * @param {Array} [array] The array to inspect.
11150   * @param {*} target The value to search for.
11151   * @returns {boolean} Returns `true` if `target` is found, else `false`.
11152   */
11153  function arrayIncludes(array, value) {
11154    var length = array == null ? 0 : array.length;
11155    return !!length && baseIndexOf(array, value, 0) > -1;
11156  }
11157
11158  /**
11159   * This function is like `arrayIncludes` except that it accepts a comparator.
11160   *
11161   * @private
11162   * @param {Array} [array] The array to inspect.
11163   * @param {*} target The value to search for.
11164   * @param {Function} comparator The comparator invoked per element.
11165   * @returns {boolean} Returns `true` if `target` is found, else `false`.
11166   */
11167  function arrayIncludesWith(array, value, comparator) {
11168    var index = -1,
11169        length = array == null ? 0 : array.length;
11170
11171    while (++index < length) {
11172      if (comparator(value, array[index])) {
11173        return true;
11174      }
11175    }
11176    return false;
11177  }
11178
11179  /**
11180   * A specialized version of `_.map` for arrays without support for iteratee
11181   * shorthands.
11182   *
11183   * @private
11184   * @param {Array} [array] The array to iterate over.
11185   * @param {Function} iteratee The function invoked per iteration.
11186   * @returns {Array} Returns the new mapped array.
11187   */
11188  function arrayMap(array, iteratee) {
11189    var index = -1,
11190        length = array == null ? 0 : array.length,
11191        result = Array(length);
11192
11193    while (++index < length) {
11194      result[index] = iteratee(array[index], index, array);
11195    }
11196    return result;
11197  }
11198
11199  /**
11200   * Appends the elements of `values` to `array`.
11201   *
11202   * @private
11203   * @param {Array} array The array to modify.
11204   * @param {Array} values The values to append.
11205   * @returns {Array} Returns `array`.
11206   */
11207  function arrayPush(array, values) {
11208    var index = -1,
11209        length = values.length,
11210        offset = array.length;
11211
11212    while (++index < length) {
11213      array[offset + index] = values[index];
11214    }
11215    return array;
11216  }
11217
11218  /**
11219   * A specialized version of `_.reduce` for arrays without support for
11220   * iteratee shorthands.
11221   *
11222   * @private
11223   * @param {Array} [array] The array to iterate over.
11224   * @param {Function} iteratee The function invoked per iteration.
11225   * @param {*} [accumulator] The initial value.
11226   * @param {boolean} [initAccum] Specify using the first element of `array` as
11227   *  the initial value.
11228   * @returns {*} Returns the accumulated value.
11229   */
11230  function arrayReduce(array, iteratee, accumulator, initAccum) {
11231    var index = -1,
11232        length = array == null ? 0 : array.length;
11233
11234    if (initAccum && length) {
11235      accumulator = array[++index];
11236    }
11237    while (++index < length) {
11238      accumulator = iteratee(accumulator, array[index], index, array);
11239    }
11240    return accumulator;
11241  }
11242
11243  /**
11244   * A specialized version of `_.reduceRight` for arrays without support for
11245   * iteratee shorthands.
11246   *
11247   * @private
11248   * @param {Array} [array] The array to iterate over.
11249   * @param {Function} iteratee The function invoked per iteration.
11250   * @param {*} [accumulator] The initial value.
11251   * @param {boolean} [initAccum] Specify using the last element of `array` as
11252   *  the initial value.
11253   * @returns {*} Returns the accumulated value.
11254   */
11255  function arrayReduceRight(array, iteratee, accumulator, initAccum) {
11256    var length = array == null ? 0 : array.length;
11257    if (initAccum && length) {
11258      accumulator = array[--length];
11259    }
11260    while (length--) {
11261      accumulator = iteratee(accumulator, array[length], length, array);
11262    }
11263    return accumulator;
11264  }
11265
11266  /**
11267   * A specialized version of `_.some` for arrays without support for iteratee
11268   * shorthands.
11269   *
11270   * @private
11271   * @param {Array} [array] The array to iterate over.
11272   * @param {Function} predicate The function invoked per iteration.
11273   * @returns {boolean} Returns `true` if any element passes the predicate check,
11274   *  else `false`.
11275   */
11276  function arraySome(array, predicate) {
11277    var index = -1,
11278        length = array == null ? 0 : array.length;
11279
11280    while (++index < length) {
11281      if (predicate(array[index], index, array)) {
11282        return true;
11283      }
11284    }
11285    return false;
11286  }
11287
11288  /**
11289   * Gets the size of an ASCII `string`.
11290   *
11291   * @private
11292   * @param {string} string The string inspect.
11293   * @returns {number} Returns the string size.
11294   */
11295  var asciiSize = baseProperty('length');
11296
11297  /**
11298   * Converts an ASCII `string` to an array.
11299   *
11300   * @private
11301   * @param {string} string The string to convert.
11302   * @returns {Array} Returns the converted array.
11303   */
11304  function asciiToArray(string) {
11305    return string.split('');
11306  }
11307
11308  /**
11309   * Splits an ASCII `string` into an array of its words.
11310   *
11311   * @private
11312   * @param {string} The string to inspect.
11313   * @returns {Array} Returns the words of `string`.
11314   */
11315  function asciiWords(string) {
11316    return string.match(reAsciiWord) || [];
11317  }
11318
11319  /**
11320   * The base implementation of methods like `_.findKey` and `_.findLastKey`,
11321   * without support for iteratee shorthands, which iterates over `collection`
11322   * using `eachFunc`.
11323   *
11324   * @private
11325   * @param {Array|Object} collection The collection to inspect.
11326   * @param {Function} predicate The function invoked per iteration.
11327   * @param {Function} eachFunc The function to iterate over `collection`.
11328   * @returns {*} Returns the found element or its key, else `undefined`.
11329   */
11330  function baseFindKey(collection, predicate, eachFunc) {
11331    var result;
11332    eachFunc(collection, function(value, key, collection) {
11333      if (predicate(value, key, collection)) {
11334        result = key;
11335        return false;
11336      }
11337    });
11338    return result;
11339  }
11340
11341  /**
11342   * The base implementation of `_.findIndex` and `_.findLastIndex` without
11343   * support for iteratee shorthands.
11344   *
11345   * @private
11346   * @param {Array} array The array to inspect.
11347   * @param {Function} predicate The function invoked per iteration.
11348   * @param {number} fromIndex The index to search from.
11349   * @param {boolean} [fromRight] Specify iterating from right to left.
11350   * @returns {number} Returns the index of the matched value, else `-1`.
11351   */
11352  function baseFindIndex(array, predicate, fromIndex, fromRight) {
11353    var length = array.length,
11354        index = fromIndex + (fromRight ? 1 : -1);
11355
11356    while ((fromRight ? index-- : ++index < length)) {
11357      if (predicate(array[index], index, array)) {
11358        return index;
11359      }
11360    }
11361    return -1;
11362  }
11363
11364  /**
11365   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
11366   *
11367   * @private
11368   * @param {Array} array The array to inspect.
11369   * @param {*} value The value to search for.
11370   * @param {number} fromIndex The index to search from.
11371   * @returns {number} Returns the index of the matched value, else `-1`.
11372   */
11373  function baseIndexOf(array, value, fromIndex) {
11374    return value === value
11375      ? strictIndexOf(array, value, fromIndex)
11376      : baseFindIndex(array, baseIsNaN, fromIndex);
11377  }
11378
11379  /**
11380   * This function is like `baseIndexOf` except that it accepts a comparator.
11381   *
11382   * @private
11383   * @param {Array} array The array to inspect.
11384   * @param {*} value The value to search for.
11385   * @param {number} fromIndex The index to search from.
11386   * @param {Function} comparator The comparator invoked per element.
11387   * @returns {number} Returns the index of the matched value, else `-1`.
11388   */
11389  function baseIndexOfWith(array, value, fromIndex, comparator) {
11390    var index = fromIndex - 1,
11391        length = array.length;
11392
11393    while (++index < length) {
11394      if (comparator(array[index], value)) {
11395        return index;
11396      }
11397    }
11398    return -1;
11399  }
11400
11401  /**
11402   * The base implementation of `_.isNaN` without support for number objects.
11403   *
11404   * @private
11405   * @param {*} value The value to check.
11406   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
11407   */
11408  function baseIsNaN(value) {
11409    return value !== value;
11410  }
11411
11412  /**
11413   * The base implementation of `_.mean` and `_.meanBy` without support for
11414   * iteratee shorthands.
11415   *
11416   * @private
11417   * @param {Array} array The array to iterate over.
11418   * @param {Function} iteratee The function invoked per iteration.
11419   * @returns {number} Returns the mean.
11420   */
11421  function baseMean(array, iteratee) {
11422    var length = array == null ? 0 : array.length;
11423    return length ? (baseSum(array, iteratee) / length) : NAN;
11424  }
11425
11426  /**
11427   * The base implementation of `_.property` without support for deep paths.
11428   *
11429   * @private
11430   * @param {string} key The key of the property to get.
11431   * @returns {Function} Returns the new accessor function.
11432   */
11433  function baseProperty(key) {
11434    return function(object) {
11435      return object == null ? undefined : object[key];
11436    };
11437  }
11438
11439  /**
11440   * The base implementation of `_.propertyOf` without support for deep paths.
11441   *
11442   * @private
11443   * @param {Object} object The object to query.
11444   * @returns {Function} Returns the new accessor function.
11445   */
11446  function basePropertyOf(object) {
11447    return function(key) {
11448      return object == null ? undefined : object[key];
11449    };
11450  }
11451
11452  /**
11453   * The base implementation of `_.reduce` and `_.reduceRight`, without support
11454   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.
11455   *
11456   * @private
11457   * @param {Array|Object} collection The collection to iterate over.
11458   * @param {Function} iteratee The function invoked per iteration.
11459   * @param {*} accumulator The initial value.
11460   * @param {boolean} initAccum Specify using the first or last element of
11461   *  `collection` as the initial value.
11462   * @param {Function} eachFunc The function to iterate over `collection`.
11463   * @returns {*} Returns the accumulated value.
11464   */
11465  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
11466    eachFunc(collection, function(value, index, collection) {
11467      accumulator = initAccum
11468        ? (initAccum = false, value)
11469        : iteratee(accumulator, value, index, collection);
11470    });
11471    return accumulator;
11472  }
11473
11474  /**
11475   * The base implementation of `_.sortBy` which uses `comparer` to define the
11476   * sort order of `array` and replaces criteria objects with their corresponding
11477   * values.
11478   *
11479   * @private
11480   * @param {Array} array The array to sort.
11481   * @param {Function} comparer The function to define sort order.
11482   * @returns {Array} Returns `array`.
11483   */
11484  function baseSortBy(array, comparer) {
11485    var length = array.length;
11486
11487    array.sort(comparer);
11488    while (length--) {
11489      array[length] = array[length].value;
11490    }
11491    return array;
11492  }
11493
11494  /**
11495   * The base implementation of `_.sum` and `_.sumBy` without support for
11496   * iteratee shorthands.
11497   *
11498   * @private
11499   * @param {Array} array The array to iterate over.
11500   * @param {Function} iteratee The function invoked per iteration.
11501   * @returns {number} Returns the sum.
11502   */
11503  function baseSum(array, iteratee) {
11504    var result,
11505        index = -1,
11506        length = array.length;
11507
11508    while (++index < length) {
11509      var current = iteratee(array[index]);
11510      if (current !== undefined) {
11511        result = result === undefined ? current : (result + current);
11512      }
11513    }
11514    return result;
11515  }
11516
11517  /**
11518   * The base implementation of `_.times` without support for iteratee shorthands
11519   * or max array length checks.
11520   *
11521   * @private
11522   * @param {number} n The number of times to invoke `iteratee`.
11523   * @param {Function} iteratee The function invoked per iteration.
11524   * @returns {Array} Returns the array of results.
11525   */
11526  function baseTimes(n, iteratee) {
11527    var index = -1,
11528        result = Array(n);
11529
11530    while (++index < n) {
11531      result[index] = iteratee(index);
11532    }
11533    return result;
11534  }
11535
11536  /**
11537   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array
11538   * of key-value pairs for `object` corresponding to the property names of `props`.
11539   *
11540   * @private
11541   * @param {Object} object The object to query.
11542   * @param {Array} props The property names to get values for.
11543   * @returns {Object} Returns the key-value pairs.
11544   */
11545  function baseToPairs(object, props) {
11546    return arrayMap(props, function(key) {
11547      return [key, object[key]];
11548    });
11549  }
11550
11551  /**
11552   * The base implementation of `_.trim`.
11553   *
11554   * @private
11555   * @param {string} string The string to trim.
11556   * @returns {string} Returns the trimmed string.
11557   */
11558  function baseTrim(string) {
11559    return string
11560      ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')
11561      : string;
11562  }
11563
11564  /**
11565   * The base implementation of `_.unary` without support for storing metadata.
11566   *
11567   * @private
11568   * @param {Function} func The function to cap arguments for.
11569   * @returns {Function} Returns the new capped function.
11570   */
11571  function baseUnary(func) {
11572    return function(value) {
11573      return func(value);
11574    };
11575  }
11576
11577  /**
11578   * The base implementation of `_.values` and `_.valuesIn` which creates an
11579   * array of `object` property values corresponding to the property names
11580   * of `props`.
11581   *
11582   * @private
11583   * @param {Object} object The object to query.
11584   * @param {Array} props The property names to get values for.
11585   * @returns {Object} Returns the array of property values.
11586   */
11587  function baseValues(object, props) {
11588    return arrayMap(props, function(key) {
11589      return object[key];
11590    });
11591  }
11592
11593  /**
11594   * Checks if a `cache` value for `key` exists.
11595   *
11596   * @private
11597   * @param {Object} cache The cache to query.
11598   * @param {string} key The key of the entry to check.
11599   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
11600   */
11601  function cacheHas(cache, key) {
11602    return cache.has(key);
11603  }
11604
11605  /**
11606   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol
11607   * that is not found in the character symbols.
11608   *
11609   * @private
11610   * @param {Array} strSymbols The string symbols to inspect.
11611   * @param {Array} chrSymbols The character symbols to find.
11612   * @returns {number} Returns the index of the first unmatched string symbol.
11613   */
11614  function charsStartIndex(strSymbols, chrSymbols) {
11615    var index = -1,
11616        length = strSymbols.length;
11617
11618    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
11619    return index;
11620  }
11621
11622  /**
11623   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol
11624   * that is not found in the character symbols.
11625   *
11626   * @private
11627   * @param {Array} strSymbols The string symbols to inspect.
11628   * @param {Array} chrSymbols The character symbols to find.
11629   * @returns {number} Returns the index of the last unmatched string symbol.
11630   */
11631  function charsEndIndex(strSymbols, chrSymbols) {
11632    var index = strSymbols.length;
11633
11634    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
11635    return index;
11636  }
11637
11638  /**
11639   * Gets the number of `placeholder` occurrences in `array`.
11640   *
11641   * @private
11642   * @param {Array} array The array to inspect.
11643   * @param {*} placeholder The placeholder to search for.
11644   * @returns {number} Returns the placeholder count.
11645   */
11646  function countHolders(array, placeholder) {
11647    var length = array.length,
11648        result = 0;
11649
11650    while (length--) {
11651      if (array[length] === placeholder) {
11652        ++result;
11653      }
11654    }
11655    return result;
11656  }
11657
11658  /**
11659   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A
11660   * letters to basic Latin letters.
11661   *
11662   * @private
11663   * @param {string} letter The matched letter to deburr.
11664   * @returns {string} Returns the deburred letter.
11665   */
11666  var deburrLetter = basePropertyOf(deburredLetters);
11667
11668  /**
11669   * Used by `_.escape` to convert characters to HTML entities.
11670   *
11671   * @private
11672   * @param {string} chr The matched character to escape.
11673   * @returns {string} Returns the escaped character.
11674   */
11675  var escapeHtmlChar = basePropertyOf(htmlEscapes);
11676
11677  /**
11678   * Used by `_.template` to escape characters for inclusion in compiled string literals.
11679   *
11680   * @private
11681   * @param {string} chr The matched character to escape.
11682   * @returns {string} Returns the escaped character.
11683   */
11684  function escapeStringChar(chr) {
11685    return '\\' + stringEscapes[chr];
11686  }
11687
11688  /**
11689   * Gets the value at `key` of `object`.
11690   *
11691   * @private
11692   * @param {Object} [object] The object to query.
11693   * @param {string} key The key of the property to get.
11694   * @returns {*} Returns the property value.
11695   */
11696  function getValue(object, key) {
11697    return object == null ? undefined : object[key];
11698  }
11699
11700  /**
11701   * Checks if `string` contains Unicode symbols.
11702   *
11703   * @private
11704   * @param {string} string The string to inspect.
11705   * @returns {boolean} Returns `true` if a symbol is found, else `false`.
11706   */
11707  function hasUnicode(string) {
11708    return reHasUnicode.test(string);
11709  }
11710
11711  /**
11712   * Checks if `string` contains a word composed of Unicode symbols.
11713   *
11714   * @private
11715   * @param {string} string The string to inspect.
11716   * @returns {boolean} Returns `true` if a word is found, else `false`.
11717   */
11718  function hasUnicodeWord(string) {
11719    return reHasUnicodeWord.test(string);
11720  }
11721
11722  /**
11723   * Converts `iterator` to an array.
11724   *
11725   * @private
11726   * @param {Object} iterator The iterator to convert.
11727   * @returns {Array} Returns the converted array.
11728   */
11729  function iteratorToArray(iterator) {
11730    var data,
11731        result = [];
11732
11733    while (!(data = iterator.next()).done) {
11734      result.push(data.value);
11735    }
11736    return result;
11737  }
11738
11739  /**
11740   * Converts `map` to its key-value pairs.
11741   *
11742   * @private
11743   * @param {Object} map The map to convert.
11744   * @returns {Array} Returns the key-value pairs.
11745   */
11746  function mapToArray(map) {
11747    var index = -1,
11748        result = Array(map.size);
11749
11750    map.forEach(function(value, key) {
11751      result[++index] = [key, value];
11752    });
11753    return result;
11754  }
11755
11756  /**
11757   * Creates a unary function that invokes `func` with its argument transformed.
11758   *
11759   * @private
11760   * @param {Function} func The function to wrap.
11761   * @param {Function} transform The argument transform.
11762   * @returns {Function} Returns the new function.
11763   */
11764  function overArg(func, transform) {
11765    return function(arg) {
11766      return func(transform(arg));
11767    };
11768  }
11769
11770  /**
11771   * Replaces all `placeholder` elements in `array` with an internal placeholder
11772   * and returns an array of their indexes.
11773   *
11774   * @private
11775   * @param {Array} array The array to modify.
11776   * @param {*} placeholder The placeholder to replace.
11777   * @returns {Array} Returns the new array of placeholder indexes.
11778   */
11779  function replaceHolders(array, placeholder) {
11780    var index = -1,
11781        length = array.length,
11782        resIndex = 0,
11783        result = [];
11784
11785    while (++index < length) {
11786      var value = array[index];
11787      if (value === placeholder || value === PLACEHOLDER) {
11788        array[index] = PLACEHOLDER;
11789        result[resIndex++] = index;
11790      }
11791    }
11792    return result;
11793  }
11794
11795  /**
11796   * Converts `set` to an array of its values.
11797   *
11798   * @private
11799   * @param {Object} set The set to convert.
11800   * @returns {Array} Returns the values.
11801   */
11802  function setToArray(set) {
11803    var index = -1,
11804        result = Array(set.size);
11805
11806    set.forEach(function(value) {
11807      result[++index] = value;
11808    });
11809    return result;
11810  }
11811
11812  /**
11813   * Converts `set` to its value-value pairs.
11814   *
11815   * @private
11816   * @param {Object} set The set to convert.
11817   * @returns {Array} Returns the value-value pairs.
11818   */
11819  function setToPairs(set) {
11820    var index = -1,
11821        result = Array(set.size);
11822
11823    set.forEach(function(value) {
11824      result[++index] = [value, value];
11825    });
11826    return result;
11827  }
11828
11829  /**
11830   * A specialized version of `_.indexOf` which performs strict equality
11831   * comparisons of values, i.e. `===`.
11832   *
11833   * @private
11834   * @param {Array} array The array to inspect.
11835   * @param {*} value The value to search for.
11836   * @param {number} fromIndex The index to search from.
11837   * @returns {number} Returns the index of the matched value, else `-1`.
11838   */
11839  function strictIndexOf(array, value, fromIndex) {
11840    var index = fromIndex - 1,
11841        length = array.length;
11842
11843    while (++index < length) {
11844      if (array[index] === value) {
11845        return index;
11846      }
11847    }
11848    return -1;
11849  }
11850
11851  /**
11852   * A specialized version of `_.lastIndexOf` which performs strict equality
11853   * comparisons of values, i.e. `===`.
11854   *
11855   * @private
11856   * @param {Array} array The array to inspect.
11857   * @param {*} value The value to search for.
11858   * @param {number} fromIndex The index to search from.
11859   * @returns {number} Returns the index of the matched value, else `-1`.
11860   */
11861  function strictLastIndexOf(array, value, fromIndex) {
11862    var index = fromIndex + 1;
11863    while (index--) {
11864      if (array[index] === value) {
11865        return index;
11866      }
11867    }
11868    return index;
11869  }
11870
11871  /**
11872   * Gets the number of symbols in `string`.
11873   *
11874   * @private
11875   * @param {string} string The string to inspect.
11876   * @returns {number} Returns the string size.
11877   */
11878  function stringSize(string) {
11879    return hasUnicode(string)
11880      ? unicodeSize(string)
11881      : asciiSize(string);
11882  }
11883
11884  /**
11885   * Converts `string` to an array.
11886   *
11887   * @private
11888   * @param {string} string The string to convert.
11889   * @returns {Array} Returns the converted array.
11890   */
11891  function stringToArray(string) {
11892    return hasUnicode(string)
11893      ? unicodeToArray(string)
11894      : asciiToArray(string);
11895  }
11896
11897  /**
11898   * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace
11899   * character of `string`.
11900   *
11901   * @private
11902   * @param {string} string The string to inspect.
11903   * @returns {number} Returns the index of the last non-whitespace character.
11904   */
11905  function trimmedEndIndex(string) {
11906    var index = string.length;
11907
11908    while (index-- && reWhitespace.test(string.charAt(index))) {}
11909    return index;
11910  }
11911
11912  /**
11913   * Used by `_.unescape` to convert HTML entities to characters.
11914   *
11915   * @private
11916   * @param {string} chr The matched character to unescape.
11917   * @returns {string} Returns the unescaped character.
11918   */
11919  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);
11920
11921  /**
11922   * Gets the size of a Unicode `string`.
11923   *
11924   * @private
11925   * @param {string} string The string inspect.
11926   * @returns {number} Returns the string size.
11927   */
11928  function unicodeSize(string) {
11929    var result = reUnicode.lastIndex = 0;
11930    while (reUnicode.test(string)) {
11931      ++result;
11932    }
11933    return result;
11934  }
11935
11936  /**
11937   * Converts a Unicode `string` to an array.
11938   *
11939   * @private
11940   * @param {string} string The string to convert.
11941   * @returns {Array} Returns the converted array.
11942   */
11943  function unicodeToArray(string) {
11944    return string.match(reUnicode) || [];
11945  }
11946
11947  /**
11948   * Splits a Unicode `string` into an array of its words.
11949   *
11950   * @private
11951   * @param {string} The string to inspect.
11952   * @returns {Array} Returns the words of `string`.
11953   */
11954  function unicodeWords(string) {
11955    return string.match(reUnicodeWord) || [];
11956  }
11957
11958  /*--------------------------------------------------------------------------*/
11959
11960  /**
11961   * Create a new pristine `lodash` function using the `context` object.
11962   *
11963   * @static
11964   * @memberOf _
11965   * @since 1.1.0
11966   * @category Util
11967   * @param {Object} [context=root] The context object.
11968   * @returns {Function} Returns a new `lodash` function.
11969   * @example
11970   *
11971   * _.mixin({ 'foo': _.constant('foo') });
11972   *
11973   * var lodash = _.runInContext();
11974   * lodash.mixin({ 'bar': lodash.constant('bar') });
11975   *
11976   * _.isFunction(_.foo);
11977   * // => true
11978   * _.isFunction(_.bar);
11979   * // => false
11980   *
11981   * lodash.isFunction(lodash.foo);
11982   * // => false
11983   * lodash.isFunction(lodash.bar);
11984   * // => true
11985   *
11986   * // Create a suped-up `defer` in Node.js.
11987   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;
11988   */
11989  var runInContext = (function runInContext(context) {
11990    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));
11991
11992    /** Built-in constructor references. */
11993    var Array = context.Array,
11994        Date = context.Date,
11995        Error = context.Error,
11996        Function = context.Function,
11997        Math = context.Math,
11998        Object = context.Object,
11999        RegExp = context.RegExp,
12000        String = context.String,
12001        TypeError = context.TypeError;
12002
12003    /** Used for built-in method references. */
12004    var arrayProto = Array.prototype,
12005        funcProto = Function.prototype,
12006        objectProto = Object.prototype;
12007
12008    /** Used to detect overreaching core-js shims. */
12009    var coreJsData = context['__core-js_shared__'];
12010
12011    /** Used to resolve the decompiled source of functions. */
12012    var funcToString = funcProto.toString;
12013
12014    /** Used to check objects for own properties. */
12015    var hasOwnProperty = objectProto.hasOwnProperty;
12016
12017    /** Used to generate unique IDs. */
12018    var idCounter = 0;
12019
12020    /** Used to detect methods masquerading as native. */
12021    var maskSrcKey = (function() {
12022      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
12023      return uid ? ('Symbol(src)_1.' + uid) : '';
12024    }());
12025
12026    /**
12027     * Used to resolve the
12028     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
12029     * of values.
12030     */
12031    var nativeObjectToString = objectProto.toString;
12032
12033    /** Used to infer the `Object` constructor. */
12034    var objectCtorString = funcToString.call(Object);
12035
12036    /** Used to restore the original `_` reference in `_.noConflict`. */
12037    var oldDash = root._;
12038
12039    /** Used to detect if a method is native. */
12040    var reIsNative = RegExp('^' +
12041      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
12042      .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
12043    );
12044
12045    /** Built-in value references. */
12046    var Buffer = moduleExports ? context.Buffer : undefined,
12047        Symbol = context.Symbol,
12048        Uint8Array = context.Uint8Array,
12049        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,
12050        getPrototype = overArg(Object.getPrototypeOf, Object),
12051        objectCreate = Object.create,
12052        propertyIsEnumerable = objectProto.propertyIsEnumerable,
12053        splice = arrayProto.splice,
12054        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,
12055        symIterator = Symbol ? Symbol.iterator : undefined,
12056        symToStringTag = Symbol ? Symbol.toStringTag : undefined;
12057
12058    var defineProperty = (function() {
12059      try {
12060        var func = getNative(Object, 'defineProperty');
12061        func({}, '', {});
12062        return func;
12063      } catch (e) {}
12064    }());
12065
12066    /** Mocked built-ins. */
12067    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,
12068        ctxNow = Date && Date.now !== root.Date.now && Date.now,
12069        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;
12070
12071    /* Built-in method references for those with the same name as other `lodash` methods. */
12072    var nativeCeil = Math.ceil,
12073        nativeFloor = Math.floor,
12074        nativeGetSymbols = Object.getOwnPropertySymbols,
12075        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,
12076        nativeIsFinite = context.isFinite,
12077        nativeJoin = arrayProto.join,
12078        nativeKeys = overArg(Object.keys, Object),
12079        nativeMax = Math.max,
12080        nativeMin = Math.min,
12081        nativeNow = Date.now,
12082        nativeParseInt = context.parseInt,
12083        nativeRandom = Math.random,
12084        nativeReverse = arrayProto.reverse;
12085
12086    /* Built-in method references that are verified to be native. */
12087    var DataView = getNative(context, 'DataView'),
12088        Map = getNative(context, 'Map'),
12089        Promise = getNative(context, 'Promise'),
12090        Set = getNative(context, 'Set'),
12091        WeakMap = getNative(context, 'WeakMap'),
12092        nativeCreate = getNative(Object, 'create');
12093
12094    /** Used to store function metadata. */
12095    var metaMap = WeakMap && new WeakMap;
12096
12097    /** Used to lookup unminified function names. */
12098    var realNames = {};
12099
12100    /** Used to detect maps, sets, and weakmaps. */
12101    var dataViewCtorString = toSource(DataView),
12102        mapCtorString = toSource(Map),
12103        promiseCtorString = toSource(Promise),
12104        setCtorString = toSource(Set),
12105        weakMapCtorString = toSource(WeakMap);
12106
12107    /** Used to convert symbols to primitives and strings. */
12108    var symbolProto = Symbol ? Symbol.prototype : undefined,
12109        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,
12110        symbolToString = symbolProto ? symbolProto.toString : undefined;
12111
12112    /*------------------------------------------------------------------------*/
12113
12114    /**
12115     * Creates a `lodash` object which wraps `value` to enable implicit method
12116     * chain sequences. Methods that operate on and return arrays, collections,
12117     * and functions can be chained together. Methods that retrieve a single value
12118     * or may return a primitive value will automatically end the chain sequence
12119     * and return the unwrapped value. Otherwise, the value must be unwrapped
12120     * with `_#value`.
12121     *
12122     * Explicit chain sequences, which must be unwrapped with `_#value`, may be
12123     * enabled using `_.chain`.
12124     *
12125     * The execution of chained methods is lazy, that is, it's deferred until
12126     * `_#value` is implicitly or explicitly called.
12127     *
12128     * Lazy evaluation allows several methods to support shortcut fusion.
12129     * Shortcut fusion is an optimization to merge iteratee calls; this avoids
12130     * the creation of intermediate arrays and can greatly reduce the number of
12131     * iteratee executions. Sections of a chain sequence qualify for shortcut
12132     * fusion if the section is applied to an array and iteratees accept only
12133     * one argument. The heuristic for whether a section qualifies for shortcut
12134     * fusion is subject to change.
12135     *
12136     * Chaining is supported in custom builds as long as the `_#value` method is
12137     * directly or indirectly included in the build.
12138     *
12139     * In addition to lodash methods, wrappers have `Array` and `String` methods.
12140     *
12141     * The wrapper `Array` methods are:
12142     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`
12143     *
12144     * The wrapper `String` methods are:
12145     * `replace` and `split`
12146     *
12147     * The wrapper methods that support shortcut fusion are:
12148     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,
12149     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,
12150     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`
12151     *
12152     * The chainable wrapper methods are:
12153     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,
12154     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,
12155     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,
12156     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,
12157     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,
12158     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,
12159     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,
12160     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,
12161     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,
12162     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,
12163     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,
12164     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,
12165     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,
12166     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,
12167     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,
12168     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,
12169     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,
12170     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,
12171     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,
12172     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,
12173     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,
12174     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,
12175     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,
12176     * `zipObject`, `zipObjectDeep`, and `zipWith`
12177     *
12178     * The wrapper methods that are **not** chainable by default are:
12179     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,
12180     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,
12181     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,
12182     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,
12183     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,
12184     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,
12185     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,
12186     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,
12187     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,
12188     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,
12189     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,
12190     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,
12191     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,
12192     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,
12193     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,
12194     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,
12195     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,
12196     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,
12197     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,
12198     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,
12199     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,
12200     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,
12201     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,
12202     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,
12203     * `upperFirst`, `value`, and `words`
12204     *
12205     * @name _
12206     * @constructor
12207     * @category Seq
12208     * @param {*} value The value to wrap in a `lodash` instance.
12209     * @returns {Object} Returns the new `lodash` wrapper instance.
12210     * @example
12211     *
12212     * function square(n) {
12213     *   return n * n;
12214     * }
12215     *
12216     * var wrapped = _([1, 2, 3]);
12217     *
12218     * // Returns an unwrapped value.
12219     * wrapped.reduce(_.add);
12220     * // => 6
12221     *
12222     * // Returns a wrapped value.
12223     * var squares = wrapped.map(square);
12224     *
12225     * _.isArray(squares);
12226     * // => false
12227     *
12228     * _.isArray(squares.value());
12229     * // => true
12230     */
12231    function lodash(value) {
12232      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {
12233        if (value instanceof LodashWrapper) {
12234          return value;
12235        }
12236        if (hasOwnProperty.call(value, '__wrapped__')) {
12237          return wrapperClone(value);
12238        }
12239      }
12240      return new LodashWrapper(value);
12241    }
12242
12243    /**
12244     * The base implementation of `_.create` without support for assigning
12245     * properties to the created object.
12246     *
12247     * @private
12248     * @param {Object} proto The object to inherit from.
12249     * @returns {Object} Returns the new object.
12250     */
12251    var baseCreate = (function() {
12252      function object() {}
12253      return function(proto) {
12254        if (!isObject(proto)) {
12255          return {};
12256        }
12257        if (objectCreate) {
12258          return objectCreate(proto);
12259        }
12260        object.prototype = proto;
12261        var result = new object;
12262        object.prototype = undefined;
12263        return result;
12264      };
12265    }());
12266
12267    /**
12268     * The function whose prototype chain sequence wrappers inherit from.
12269     *
12270     * @private
12271     */
12272    function baseLodash() {
12273      // No operation performed.
12274    }
12275
12276    /**
12277     * The base constructor for creating `lodash` wrapper objects.
12278     *
12279     * @private
12280     * @param {*} value The value to wrap.
12281     * @param {boolean} [chainAll] Enable explicit method chain sequences.
12282     */
12283    function LodashWrapper(value, chainAll) {
12284      this.__wrapped__ = value;
12285      this.__actions__ = [];
12286      this.__chain__ = !!chainAll;
12287      this.__index__ = 0;
12288      this.__values__ = undefined;
12289    }
12290
12291    /**
12292     * By default, the template delimiters used by lodash are like those in
12293     * embedded Ruby (ERB) as well as ES2015 template strings. Change the
12294     * following template settings to use alternative delimiters.
12295     *
12296     * @static
12297     * @memberOf _
12298     * @type {Object}
12299     */
12300    lodash.templateSettings = {
12301
12302      /**
12303       * Used to detect `data` property values to be HTML-escaped.
12304       *
12305       * @memberOf _.templateSettings
12306       * @type {RegExp}
12307       */
12308      'escape': reEscape,
12309
12310      /**
12311       * Used to detect code to be evaluated.
12312       *
12313       * @memberOf _.templateSettings
12314       * @type {RegExp}
12315       */
12316      'evaluate': reEvaluate,
12317
12318      /**
12319       * Used to detect `data` property values to inject.
12320       *
12321       * @memberOf _.templateSettings
12322       * @type {RegExp}
12323       */
12324      'interpolate': reInterpolate,
12325
12326      /**
12327       * Used to reference the data object in the template text.
12328       *
12329       * @memberOf _.templateSettings
12330       * @type {string}
12331       */
12332      'variable': '',
12333
12334      /**
12335       * Used to import variables into the compiled template.
12336       *
12337       * @memberOf _.templateSettings
12338       * @type {Object}
12339       */
12340      'imports': {
12341
12342        /**
12343         * A reference to the `lodash` function.
12344         *
12345         * @memberOf _.templateSettings.imports
12346         * @type {Function}
12347         */
12348        '_': lodash
12349      }
12350    };
12351
12352    // Ensure wrappers are instances of `baseLodash`.
12353    lodash.prototype = baseLodash.prototype;
12354    lodash.prototype.constructor = lodash;
12355
12356    LodashWrapper.prototype = baseCreate(baseLodash.prototype);
12357    LodashWrapper.prototype.constructor = LodashWrapper;
12358
12359    /*------------------------------------------------------------------------*/
12360
12361    /**
12362     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.
12363     *
12364     * @private
12365     * @constructor
12366     * @param {*} value The value to wrap.
12367     */
12368    function LazyWrapper(value) {
12369      this.__wrapped__ = value;
12370      this.__actions__ = [];
12371      this.__dir__ = 1;
12372      this.__filtered__ = false;
12373      this.__iteratees__ = [];
12374      this.__takeCount__ = MAX_ARRAY_LENGTH;
12375      this.__views__ = [];
12376    }
12377
12378    /**
12379     * Creates a clone of the lazy wrapper object.
12380     *
12381     * @private
12382     * @name clone
12383     * @memberOf LazyWrapper
12384     * @returns {Object} Returns the cloned `LazyWrapper` object.
12385     */
12386    function lazyClone() {
12387      var result = new LazyWrapper(this.__wrapped__);
12388      result.__actions__ = copyArray(this.__actions__);
12389      result.__dir__ = this.__dir__;
12390      result.__filtered__ = this.__filtered__;
12391      result.__iteratees__ = copyArray(this.__iteratees__);
12392      result.__takeCount__ = this.__takeCount__;
12393      result.__views__ = copyArray(this.__views__);
12394      return result;
12395    }
12396
12397    /**
12398     * Reverses the direction of lazy iteration.
12399     *
12400     * @private
12401     * @name reverse
12402     * @memberOf LazyWrapper
12403     * @returns {Object} Returns the new reversed `LazyWrapper` object.
12404     */
12405    function lazyReverse() {
12406      if (this.__filtered__) {
12407        var result = new LazyWrapper(this);
12408        result.__dir__ = -1;
12409        result.__filtered__ = true;
12410      } else {
12411        result = this.clone();
12412        result.__dir__ *= -1;
12413      }
12414      return result;
12415    }
12416
12417    /**
12418     * Extracts the unwrapped value from its lazy wrapper.
12419     *
12420     * @private
12421     * @name value
12422     * @memberOf LazyWrapper
12423     * @returns {*} Returns the unwrapped value.
12424     */
12425    function lazyValue() {
12426      var array = this.__wrapped__.value(),
12427          dir = this.__dir__,
12428          isArr = isArray(array),
12429          isRight = dir < 0,
12430          arrLength = isArr ? array.length : 0,
12431          view = getView(0, arrLength, this.__views__),
12432          start = view.start,
12433          end = view.end,
12434          length = end - start,
12435          index = isRight ? end : (start - 1),
12436          iteratees = this.__iteratees__,
12437          iterLength = iteratees.length,
12438          resIndex = 0,
12439          takeCount = nativeMin(length, this.__takeCount__);
12440
12441      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {
12442        return baseWrapperValue(array, this.__actions__);
12443      }
12444      var result = [];
12445
12446      outer:
12447      while (length-- && resIndex < takeCount) {
12448        index += dir;
12449
12450        var iterIndex = -1,
12451            value = array[index];
12452
12453        while (++iterIndex < iterLength) {
12454          var data = iteratees[iterIndex],
12455              iteratee = data.iteratee,
12456              type = data.type,
12457              computed = iteratee(value);
12458
12459          if (type == LAZY_MAP_FLAG) {
12460            value = computed;
12461          } else if (!computed) {
12462            if (type == LAZY_FILTER_FLAG) {
12463              continue outer;
12464            } else {
12465              break outer;
12466            }
12467          }
12468        }
12469        result[resIndex++] = value;
12470      }
12471      return result;
12472    }
12473
12474    // Ensure `LazyWrapper` is an instance of `baseLodash`.
12475    LazyWrapper.prototype = baseCreate(baseLodash.prototype);
12476    LazyWrapper.prototype.constructor = LazyWrapper;
12477
12478    /*------------------------------------------------------------------------*/
12479
12480    /**
12481     * Creates a hash object.
12482     *
12483     * @private
12484     * @constructor
12485     * @param {Array} [entries] The key-value pairs to cache.
12486     */
12487    function Hash(entries) {
12488      var index = -1,
12489          length = entries == null ? 0 : entries.length;
12490
12491      this.clear();
12492      while (++index < length) {
12493        var entry = entries[index];
12494        this.set(entry[0], entry[1]);
12495      }
12496    }
12497
12498    /**
12499     * Removes all key-value entries from the hash.
12500     *
12501     * @private
12502     * @name clear
12503     * @memberOf Hash
12504     */
12505    function hashClear() {
12506      this.__data__ = nativeCreate ? nativeCreate(null) : {};
12507      this.size = 0;
12508    }
12509
12510    /**
12511     * Removes `key` and its value from the hash.
12512     *
12513     * @private
12514     * @name delete
12515     * @memberOf Hash
12516     * @param {Object} hash The hash to modify.
12517     * @param {string} key The key of the value to remove.
12518     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
12519     */
12520    function hashDelete(key) {
12521      var result = this.has(key) && delete this.__data__[key];
12522      this.size -= result ? 1 : 0;
12523      return result;
12524    }
12525
12526    /**
12527     * Gets the hash value for `key`.
12528     *
12529     * @private
12530     * @name get
12531     * @memberOf Hash
12532     * @param {string} key The key of the value to get.
12533     * @returns {*} Returns the entry value.
12534     */
12535    function hashGet(key) {
12536      var data = this.__data__;
12537      if (nativeCreate) {
12538        var result = data[key];
12539        return result === HASH_UNDEFINED ? undefined : result;
12540      }
12541      return hasOwnProperty.call(data, key) ? data[key] : undefined;
12542    }
12543
12544    /**
12545     * Checks if a hash value for `key` exists.
12546     *
12547     * @private
12548     * @name has
12549     * @memberOf Hash
12550     * @param {string} key The key of the entry to check.
12551     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
12552     */
12553    function hashHas(key) {
12554      var data = this.__data__;
12555      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);
12556    }
12557
12558    /**
12559     * Sets the hash `key` to `value`.
12560     *
12561     * @private
12562     * @name set
12563     * @memberOf Hash
12564     * @param {string} key The key of the value to set.
12565     * @param {*} value The value to set.
12566     * @returns {Object} Returns the hash instance.
12567     */
12568    function hashSet(key, value) {
12569      var data = this.__data__;
12570      this.size += this.has(key) ? 0 : 1;
12571      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
12572      return this;
12573    }
12574
12575    // Add methods to `Hash`.
12576    Hash.prototype.clear = hashClear;
12577    Hash.prototype['delete'] = hashDelete;
12578    Hash.prototype.get = hashGet;
12579    Hash.prototype.has = hashHas;
12580    Hash.prototype.set = hashSet;
12581
12582    /*------------------------------------------------------------------------*/
12583
12584    /**
12585     * Creates an list cache object.
12586     *
12587     * @private
12588     * @constructor
12589     * @param {Array} [entries] The key-value pairs to cache.
12590     */
12591    function ListCache(entries) {
12592      var index = -1,
12593          length = entries == null ? 0 : entries.length;
12594
12595      this.clear();
12596      while (++index < length) {
12597        var entry = entries[index];
12598        this.set(entry[0], entry[1]);
12599      }
12600    }
12601
12602    /**
12603     * Removes all key-value entries from the list cache.
12604     *
12605     * @private
12606     * @name clear
12607     * @memberOf ListCache
12608     */
12609    function listCacheClear() {
12610      this.__data__ = [];
12611      this.size = 0;
12612    }
12613
12614    /**
12615     * Removes `key` and its value from the list cache.
12616     *
12617     * @private
12618     * @name delete
12619     * @memberOf ListCache
12620     * @param {string} key The key of the value to remove.
12621     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
12622     */
12623    function listCacheDelete(key) {
12624      var data = this.__data__,
12625          index = assocIndexOf(data, key);
12626
12627      if (index < 0) {
12628        return false;
12629      }
12630      var lastIndex = data.length - 1;
12631      if (index == lastIndex) {
12632        data.pop();
12633      } else {
12634        splice.call(data, index, 1);
12635      }
12636      --this.size;
12637      return true;
12638    }
12639
12640    /**
12641     * Gets the list cache value for `key`.
12642     *
12643     * @private
12644     * @name get
12645     * @memberOf ListCache
12646     * @param {string} key The key of the value to get.
12647     * @returns {*} Returns the entry value.
12648     */
12649    function listCacheGet(key) {
12650      var data = this.__data__,
12651          index = assocIndexOf(data, key);
12652
12653      return index < 0 ? undefined : data[index][1];
12654    }
12655
12656    /**
12657     * Checks if a list cache value for `key` exists.
12658     *
12659     * @private
12660     * @name has
12661     * @memberOf ListCache
12662     * @param {string} key The key of the entry to check.
12663     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
12664     */
12665    function listCacheHas(key) {
12666      return assocIndexOf(this.__data__, key) > -1;
12667    }
12668
12669    /**
12670     * Sets the list cache `key` to `value`.
12671     *
12672     * @private
12673     * @name set
12674     * @memberOf ListCache
12675     * @param {string} key The key of the value to set.
12676     * @param {*} value The value to set.
12677     * @returns {Object} Returns the list cache instance.
12678     */
12679    function listCacheSet(key, value) {
12680      var data = this.__data__,
12681          index = assocIndexOf(data, key);
12682
12683      if (index < 0) {
12684        ++this.size;
12685        data.push([key, value]);
12686      } else {
12687        data[index][1] = value;
12688      }
12689      return this;
12690    }
12691
12692    // Add methods to `ListCache`.
12693    ListCache.prototype.clear = listCacheClear;
12694    ListCache.prototype['delete'] = listCacheDelete;
12695    ListCache.prototype.get = listCacheGet;
12696    ListCache.prototype.has = listCacheHas;
12697    ListCache.prototype.set = listCacheSet;
12698
12699    /*------------------------------------------------------------------------*/
12700
12701    /**
12702     * Creates a map cache object to store key-value pairs.
12703     *
12704     * @private
12705     * @constructor
12706     * @param {Array} [entries] The key-value pairs to cache.
12707     */
12708    function MapCache(entries) {
12709      var index = -1,
12710          length = entries == null ? 0 : entries.length;
12711
12712      this.clear();
12713      while (++index < length) {
12714        var entry = entries[index];
12715        this.set(entry[0], entry[1]);
12716      }
12717    }
12718
12719    /**
12720     * Removes all key-value entries from the map.
12721     *
12722     * @private
12723     * @name clear
12724     * @memberOf MapCache
12725     */
12726    function mapCacheClear() {
12727      this.size = 0;
12728      this.__data__ = {
12729        'hash': new Hash,
12730        'map': new (Map || ListCache),
12731        'string': new Hash
12732      };
12733    }
12734
12735    /**
12736     * Removes `key` and its value from the map.
12737     *
12738     * @private
12739     * @name delete
12740     * @memberOf MapCache
12741     * @param {string} key The key of the value to remove.
12742     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
12743     */
12744    function mapCacheDelete(key) {
12745      var result = getMapData(this, key)['delete'](key);
12746      this.size -= result ? 1 : 0;
12747      return result;
12748    }
12749
12750    /**
12751     * Gets the map value for `key`.
12752     *
12753     * @private
12754     * @name get
12755     * @memberOf MapCache
12756     * @param {string} key The key of the value to get.
12757     * @returns {*} Returns the entry value.
12758     */
12759    function mapCacheGet(key) {
12760      return getMapData(this, key).get(key);
12761    }
12762
12763    /**
12764     * Checks if a map value for `key` exists.
12765     *
12766     * @private
12767     * @name has
12768     * @memberOf MapCache
12769     * @param {string} key The key of the entry to check.
12770     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
12771     */
12772    function mapCacheHas(key) {
12773      return getMapData(this, key).has(key);
12774    }
12775
12776    /**
12777     * Sets the map `key` to `value`.
12778     *
12779     * @private
12780     * @name set
12781     * @memberOf MapCache
12782     * @param {string} key The key of the value to set.
12783     * @param {*} value The value to set.
12784     * @returns {Object} Returns the map cache instance.
12785     */
12786    function mapCacheSet(key, value) {
12787      var data = getMapData(this, key),
12788          size = data.size;
12789
12790      data.set(key, value);
12791      this.size += data.size == size ? 0 : 1;
12792      return this;
12793    }
12794
12795    // Add methods to `MapCache`.
12796    MapCache.prototype.clear = mapCacheClear;
12797    MapCache.prototype['delete'] = mapCacheDelete;
12798    MapCache.prototype.get = mapCacheGet;
12799    MapCache.prototype.has = mapCacheHas;
12800    MapCache.prototype.set = mapCacheSet;
12801
12802    /*------------------------------------------------------------------------*/
12803
12804    /**
12805     *
12806     * Creates an array cache object to store unique values.
12807     *
12808     * @private
12809     * @constructor
12810     * @param {Array} [values] The values to cache.
12811     */
12812    function SetCache(values) {
12813      var index = -1,
12814          length = values == null ? 0 : values.length;
12815
12816      this.__data__ = new MapCache;
12817      while (++index < length) {
12818        this.add(values[index]);
12819      }
12820    }
12821
12822    /**
12823     * Adds `value` to the array cache.
12824     *
12825     * @private
12826     * @name add
12827     * @memberOf SetCache
12828     * @alias push
12829     * @param {*} value The value to cache.
12830     * @returns {Object} Returns the cache instance.
12831     */
12832    function setCacheAdd(value) {
12833      this.__data__.set(value, HASH_UNDEFINED);
12834      return this;
12835    }
12836
12837    /**
12838     * Checks if `value` is in the array cache.
12839     *
12840     * @private
12841     * @name has
12842     * @memberOf SetCache
12843     * @param {*} value The value to search for.
12844     * @returns {number} Returns `true` if `value` is found, else `false`.
12845     */
12846    function setCacheHas(value) {
12847      return this.__data__.has(value);
12848    }
12849
12850    // Add methods to `SetCache`.
12851    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
12852    SetCache.prototype.has = setCacheHas;
12853
12854    /*------------------------------------------------------------------------*/
12855
12856    /**
12857     * Creates a stack cache object to store key-value pairs.
12858     *
12859     * @private
12860     * @constructor
12861     * @param {Array} [entries] The key-value pairs to cache.
12862     */
12863    function Stack(entries) {
12864      var data = this.__data__ = new ListCache(entries);
12865      this.size = data.size;
12866    }
12867
12868    /**
12869     * Removes all key-value entries from the stack.
12870     *
12871     * @private
12872     * @name clear
12873     * @memberOf Stack
12874     */
12875    function stackClear() {
12876      this.__data__ = new ListCache;
12877      this.size = 0;
12878    }
12879
12880    /**
12881     * Removes `key` and its value from the stack.
12882     *
12883     * @private
12884     * @name delete
12885     * @memberOf Stack
12886     * @param {string} key The key of the value to remove.
12887     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
12888     */
12889    function stackDelete(key) {
12890      var data = this.__data__,
12891          result = data['delete'](key);
12892
12893      this.size = data.size;
12894      return result;
12895    }
12896
12897    /**
12898     * Gets the stack value for `key`.
12899     *
12900     * @private
12901     * @name get
12902     * @memberOf Stack
12903     * @param {string} key The key of the value to get.
12904     * @returns {*} Returns the entry value.
12905     */
12906    function stackGet(key) {
12907      return this.__data__.get(key);
12908    }
12909
12910    /**
12911     * Checks if a stack value for `key` exists.
12912     *
12913     * @private
12914     * @name has
12915     * @memberOf Stack
12916     * @param {string} key The key of the entry to check.
12917     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
12918     */
12919    function stackHas(key) {
12920      return this.__data__.has(key);
12921    }
12922
12923    /**
12924     * Sets the stack `key` to `value`.
12925     *
12926     * @private
12927     * @name set
12928     * @memberOf Stack
12929     * @param {string} key The key of the value to set.
12930     * @param {*} value The value to set.
12931     * @returns {Object} Returns the stack cache instance.
12932     */
12933    function stackSet(key, value) {
12934      var data = this.__data__;
12935      if (data instanceof ListCache) {
12936        var pairs = data.__data__;
12937        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
12938          pairs.push([key, value]);
12939          this.size = ++data.size;
12940          return this;
12941        }
12942        data = this.__data__ = new MapCache(pairs);
12943      }
12944      data.set(key, value);
12945      this.size = data.size;
12946      return this;
12947    }
12948
12949    // Add methods to `Stack`.
12950    Stack.prototype.clear = stackClear;
12951    Stack.prototype['delete'] = stackDelete;
12952    Stack.prototype.get = stackGet;
12953    Stack.prototype.has = stackHas;
12954    Stack.prototype.set = stackSet;
12955
12956    /*------------------------------------------------------------------------*/
12957
12958    /**
12959     * Creates an array of the enumerable property names of the array-like `value`.
12960     *
12961     * @private
12962     * @param {*} value The value to query.
12963     * @param {boolean} inherited Specify returning inherited property names.
12964     * @returns {Array} Returns the array of property names.
12965     */
12966    function arrayLikeKeys(value, inherited) {
12967      var isArr = isArray(value),
12968          isArg = !isArr && isArguments(value),
12969          isBuff = !isArr && !isArg && isBuffer(value),
12970          isType = !isArr && !isArg && !isBuff && isTypedArray(value),
12971          skipIndexes = isArr || isArg || isBuff || isType,
12972          result = skipIndexes ? baseTimes(value.length, String) : [],
12973          length = result.length;
12974
12975      for (var key in value) {
12976        if ((inherited || hasOwnProperty.call(value, key)) &&
12977            !(skipIndexes && (
12978               // Safari 9 has enumerable `arguments.length` in strict mode.
12979               key == 'length' ||
12980               // Node.js 0.10 has enumerable non-index properties on buffers.
12981               (isBuff && (key == 'offset' || key == 'parent')) ||
12982               // PhantomJS 2 has enumerable non-index properties on typed arrays.
12983               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
12984               // Skip index properties.
12985               isIndex(key, length)
12986            ))) {
12987          result.push(key);
12988        }
12989      }
12990      return result;
12991    }
12992
12993    /**
12994     * A specialized version of `_.sample` for arrays.
12995     *
12996     * @private
12997     * @param {Array} array The array to sample.
12998     * @returns {*} Returns the random element.
12999     */
13000    function arraySample(array) {
13001      var length = array.length;
13002      return length ? array[baseRandom(0, length - 1)] : undefined;
13003    }
13004
13005    /**
13006     * A specialized version of `_.sampleSize` for arrays.
13007     *
13008     * @private
13009     * @param {Array} array The array to sample.
13010     * @param {number} n The number of elements to sample.
13011     * @returns {Array} Returns the random elements.
13012     */
13013    function arraySampleSize(array, n) {
13014      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));
13015    }
13016
13017    /**
13018     * A specialized version of `_.shuffle` for arrays.
13019     *
13020     * @private
13021     * @param {Array} array The array to shuffle.
13022     * @returns {Array} Returns the new shuffled array.
13023     */
13024    function arrayShuffle(array) {
13025      return shuffleSelf(copyArray(array));
13026    }
13027
13028    /**
13029     * This function is like `assignValue` except that it doesn't assign
13030     * `undefined` values.
13031     *
13032     * @private
13033     * @param {Object} object The object to modify.
13034     * @param {string} key The key of the property to assign.
13035     * @param {*} value The value to assign.
13036     */
13037    function assignMergeValue(object, key, value) {
13038      if ((value !== undefined && !eq(object[key], value)) ||
13039          (value === undefined && !(key in object))) {
13040        baseAssignValue(object, key, value);
13041      }
13042    }
13043
13044    /**
13045     * Assigns `value` to `key` of `object` if the existing value is not equivalent
13046     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
13047     * for equality comparisons.
13048     *
13049     * @private
13050     * @param {Object} object The object to modify.
13051     * @param {string} key The key of the property to assign.
13052     * @param {*} value The value to assign.
13053     */
13054    function assignValue(object, key, value) {
13055      var objValue = object[key];
13056      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
13057          (value === undefined && !(key in object))) {
13058        baseAssignValue(object, key, value);
13059      }
13060    }
13061
13062    /**
13063     * Gets the index at which the `key` is found in `array` of key-value pairs.
13064     *
13065     * @private
13066     * @param {Array} array The array to inspect.
13067     * @param {*} key The key to search for.
13068     * @returns {number} Returns the index of the matched value, else `-1`.
13069     */
13070    function assocIndexOf(array, key) {
13071      var length = array.length;
13072      while (length--) {
13073        if (eq(array[length][0], key)) {
13074          return length;
13075        }
13076      }
13077      return -1;
13078    }
13079
13080    /**
13081     * Aggregates elements of `collection` on `accumulator` with keys transformed
13082     * by `iteratee` and values set by `setter`.
13083     *
13084     * @private
13085     * @param {Array|Object} collection The collection to iterate over.
13086     * @param {Function} setter The function to set `accumulator` values.
13087     * @param {Function} iteratee The iteratee to transform keys.
13088     * @param {Object} accumulator The initial aggregated object.
13089     * @returns {Function} Returns `accumulator`.
13090     */
13091    function baseAggregator(collection, setter, iteratee, accumulator) {
13092      baseEach(collection, function(value, key, collection) {
13093        setter(accumulator, value, iteratee(value), collection);
13094      });
13095      return accumulator;
13096    }
13097
13098    /**
13099     * The base implementation of `_.assign` without support for multiple sources
13100     * or `customizer` functions.
13101     *
13102     * @private
13103     * @param {Object} object The destination object.
13104     * @param {Object} source The source object.
13105     * @returns {Object} Returns `object`.
13106     */
13107    function baseAssign(object, source) {
13108      return object && copyObject(source, keys(source), object);
13109    }
13110
13111    /**
13112     * The base implementation of `_.assignIn` without support for multiple sources
13113     * or `customizer` functions.
13114     *
13115     * @private
13116     * @param {Object} object The destination object.
13117     * @param {Object} source The source object.
13118     * @returns {Object} Returns `object`.
13119     */
13120    function baseAssignIn(object, source) {
13121      return object && copyObject(source, keysIn(source), object);
13122    }
13123
13124    /**
13125     * The base implementation of `assignValue` and `assignMergeValue` without
13126     * value checks.
13127     *
13128     * @private
13129     * @param {Object} object The object to modify.
13130     * @param {string} key The key of the property to assign.
13131     * @param {*} value The value to assign.
13132     */
13133    function baseAssignValue(object, key, value) {
13134      if (key == '__proto__' && defineProperty) {
13135        defineProperty(object, key, {
13136          'configurable': true,
13137          'enumerable': true,
13138          'value': value,
13139          'writable': true
13140        });
13141      } else {
13142        object[key] = value;
13143      }
13144    }
13145
13146    /**
13147     * The base implementation of `_.at` without support for individual paths.
13148     *
13149     * @private
13150     * @param {Object} object The object to iterate over.
13151     * @param {string[]} paths The property paths to pick.
13152     * @returns {Array} Returns the picked elements.
13153     */
13154    function baseAt(object, paths) {
13155      var index = -1,
13156          length = paths.length,
13157          result = Array(length),
13158          skip = object == null;
13159
13160      while (++index < length) {
13161        result[index] = skip ? undefined : get(object, paths[index]);
13162      }
13163      return result;
13164    }
13165
13166    /**
13167     * The base implementation of `_.clamp` which doesn't coerce arguments.
13168     *
13169     * @private
13170     * @param {number} number The number to clamp.
13171     * @param {number} [lower] The lower bound.
13172     * @param {number} upper The upper bound.
13173     * @returns {number} Returns the clamped number.
13174     */
13175    function baseClamp(number, lower, upper) {
13176      if (number === number) {
13177        if (upper !== undefined) {
13178          number = number <= upper ? number : upper;
13179        }
13180        if (lower !== undefined) {
13181          number = number >= lower ? number : lower;
13182        }
13183      }
13184      return number;
13185    }
13186
13187    /**
13188     * The base implementation of `_.clone` and `_.cloneDeep` which tracks
13189     * traversed objects.
13190     *
13191     * @private
13192     * @param {*} value The value to clone.
13193     * @param {boolean} bitmask The bitmask flags.
13194     *  1 - Deep clone
13195     *  2 - Flatten inherited properties
13196     *  4 - Clone symbols
13197     * @param {Function} [customizer] The function to customize cloning.
13198     * @param {string} [key] The key of `value`.
13199     * @param {Object} [object] The parent object of `value`.
13200     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.
13201     * @returns {*} Returns the cloned value.
13202     */
13203    function baseClone(value, bitmask, customizer, key, object, stack) {
13204      var result,
13205          isDeep = bitmask & CLONE_DEEP_FLAG,
13206          isFlat = bitmask & CLONE_FLAT_FLAG,
13207          isFull = bitmask & CLONE_SYMBOLS_FLAG;
13208
13209      if (customizer) {
13210        result = object ? customizer(value, key, object, stack) : customizer(value);
13211      }
13212      if (result !== undefined) {
13213        return result;
13214      }
13215      if (!isObject(value)) {
13216        return value;
13217      }
13218      var isArr = isArray(value);
13219      if (isArr) {
13220        result = initCloneArray(value);
13221        if (!isDeep) {
13222          return copyArray(value, result);
13223        }
13224      } else {
13225        var tag = getTag(value),
13226            isFunc = tag == funcTag || tag == genTag;
13227
13228        if (isBuffer(value)) {
13229          return cloneBuffer(value, isDeep);
13230        }
13231        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
13232          result = (isFlat || isFunc) ? {} : initCloneObject(value);
13233          if (!isDeep) {
13234            return isFlat
13235              ? copySymbolsIn(value, baseAssignIn(result, value))
13236              : copySymbols(value, baseAssign(result, value));
13237          }
13238        } else {
13239          if (!cloneableTags[tag]) {
13240            return object ? value : {};
13241          }
13242          result = initCloneByTag(value, tag, isDeep);
13243        }
13244      }
13245      // Check for circular references and return its corresponding clone.
13246      stack || (stack = new Stack);
13247      var stacked = stack.get(value);
13248      if (stacked) {
13249        return stacked;
13250      }
13251      stack.set(value, result);
13252
13253      if (isSet(value)) {
13254        value.forEach(function(subValue) {
13255          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
13256        });
13257      } else if (isMap(value)) {
13258        value.forEach(function(subValue, key) {
13259          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));
13260        });
13261      }
13262
13263      var keysFunc = isFull
13264        ? (isFlat ? getAllKeysIn : getAllKeys)
13265        : (isFlat ? keysIn : keys);
13266
13267      var props = isArr ? undefined : keysFunc(value);
13268      arrayEach(props || value, function(subValue, key) {
13269        if (props) {
13270          key = subValue;
13271          subValue = value[key];
13272        }
13273        // Recursively populate clone (susceptible to call stack limits).
13274        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
13275      });
13276      return result;
13277    }
13278
13279    /**
13280     * The base implementation of `_.conforms` which doesn't clone `source`.
13281     *
13282     * @private
13283     * @param {Object} source The object of property predicates to conform to.
13284     * @returns {Function} Returns the new spec function.
13285     */
13286    function baseConforms(source) {
13287      var props = keys(source);
13288      return function(object) {
13289        return baseConformsTo(object, source, props);
13290      };
13291    }
13292
13293    /**
13294     * The base implementation of `_.conformsTo` which accepts `props` to check.
13295     *
13296     * @private
13297     * @param {Object} object The object to inspect.
13298     * @param {Object} source The object of property predicates to conform to.
13299     * @returns {boolean} Returns `true` if `object` conforms, else `false`.
13300     */
13301    function baseConformsTo(object, source, props) {
13302      var length = props.length;
13303      if (object == null) {
13304        return !length;
13305      }
13306      object = Object(object);
13307      while (length--) {
13308        var key = props[length],
13309            predicate = source[key],
13310            value = object[key];
13311
13312        if ((value === undefined && !(key in object)) || !predicate(value)) {
13313          return false;
13314        }
13315      }
13316      return true;
13317    }
13318
13319    /**
13320     * The base implementation of `_.delay` and `_.defer` which accepts `args`
13321     * to provide to `func`.
13322     *
13323     * @private
13324     * @param {Function} func The function to delay.
13325     * @param {number} wait The number of milliseconds to delay invocation.
13326     * @param {Array} args The arguments to provide to `func`.
13327     * @returns {number|Object} Returns the timer id or timeout object.
13328     */
13329    function baseDelay(func, wait, args) {
13330      if (typeof func != 'function') {
13331        throw new TypeError(FUNC_ERROR_TEXT);
13332      }
13333      return setTimeout(function() { func.apply(undefined, args); }, wait);
13334    }
13335
13336    /**
13337     * The base implementation of methods like `_.difference` without support
13338     * for excluding multiple arrays or iteratee shorthands.
13339     *
13340     * @private
13341     * @param {Array} array The array to inspect.
13342     * @param {Array} values The values to exclude.
13343     * @param {Function} [iteratee] The iteratee invoked per element.
13344     * @param {Function} [comparator] The comparator invoked per element.
13345     * @returns {Array} Returns the new array of filtered values.
13346     */
13347    function baseDifference(array, values, iteratee, comparator) {
13348      var index = -1,
13349          includes = arrayIncludes,
13350          isCommon = true,
13351          length = array.length,
13352          result = [],
13353          valuesLength = values.length;
13354
13355      if (!length) {
13356        return result;
13357      }
13358      if (iteratee) {
13359        values = arrayMap(values, baseUnary(iteratee));
13360      }
13361      if (comparator) {
13362        includes = arrayIncludesWith;
13363        isCommon = false;
13364      }
13365      else if (values.length >= LARGE_ARRAY_SIZE) {
13366        includes = cacheHas;
13367        isCommon = false;
13368        values = new SetCache(values);
13369      }
13370      outer:
13371      while (++index < length) {
13372        var value = array[index],
13373            computed = iteratee == null ? value : iteratee(value);
13374
13375        value = (comparator || value !== 0) ? value : 0;
13376        if (isCommon && computed === computed) {
13377          var valuesIndex = valuesLength;
13378          while (valuesIndex--) {
13379            if (values[valuesIndex] === computed) {
13380              continue outer;
13381            }
13382          }
13383          result.push(value);
13384        }
13385        else if (!includes(values, computed, comparator)) {
13386          result.push(value);
13387        }
13388      }
13389      return result;
13390    }
13391
13392    /**
13393     * The base implementation of `_.forEach` without support for iteratee shorthands.
13394     *
13395     * @private
13396     * @param {Array|Object} collection The collection to iterate over.
13397     * @param {Function} iteratee The function invoked per iteration.
13398     * @returns {Array|Object} Returns `collection`.
13399     */
13400    var baseEach = createBaseEach(baseForOwn);
13401
13402    /**
13403     * The base implementation of `_.forEachRight` without support for iteratee shorthands.
13404     *
13405     * @private
13406     * @param {Array|Object} collection The collection to iterate over.
13407     * @param {Function} iteratee The function invoked per iteration.
13408     * @returns {Array|Object} Returns `collection`.
13409     */
13410    var baseEachRight = createBaseEach(baseForOwnRight, true);
13411
13412    /**
13413     * The base implementation of `_.every` without support for iteratee shorthands.
13414     *
13415     * @private
13416     * @param {Array|Object} collection The collection to iterate over.
13417     * @param {Function} predicate The function invoked per iteration.
13418     * @returns {boolean} Returns `true` if all elements pass the predicate check,
13419     *  else `false`
13420     */
13421    function baseEvery(collection, predicate) {
13422      var result = true;
13423      baseEach(collection, function(value, index, collection) {
13424        result = !!predicate(value, index, collection);
13425        return result;
13426      });
13427      return result;
13428    }
13429
13430    /**
13431     * The base implementation of methods like `_.max` and `_.min` which accepts a
13432     * `comparator` to determine the extremum value.
13433     *
13434     * @private
13435     * @param {Array} array The array to iterate over.
13436     * @param {Function} iteratee The iteratee invoked per iteration.
13437     * @param {Function} comparator The comparator used to compare values.
13438     * @returns {*} Returns the extremum value.
13439     */
13440    function baseExtremum(array, iteratee, comparator) {
13441      var index = -1,
13442          length = array.length;
13443
13444      while (++index < length) {
13445        var value = array[index],
13446            current = iteratee(value);
13447
13448        if (current != null && (computed === undefined
13449              ? (current === current && !isSymbol(current))
13450              : comparator(current, computed)
13451            )) {
13452          var computed = current,
13453              result = value;
13454        }
13455      }
13456      return result;
13457    }
13458
13459    /**
13460     * The base implementation of `_.fill` without an iteratee call guard.
13461     *
13462     * @private
13463     * @param {Array} array The array to fill.
13464     * @param {*} value The value to fill `array` with.
13465     * @param {number} [start=0] The start position.
13466     * @param {number} [end=array.length] The end position.
13467     * @returns {Array} Returns `array`.
13468     */
13469    function baseFill(array, value, start, end) {
13470      var length = array.length;
13471
13472      start = toInteger(start);
13473      if (start < 0) {
13474        start = -start > length ? 0 : (length + start);
13475      }
13476      end = (end === undefined || end > length) ? length : toInteger(end);
13477      if (end < 0) {
13478        end += length;
13479      }
13480      end = start > end ? 0 : toLength(end);
13481      while (start < end) {
13482        array[start++] = value;
13483      }
13484      return array;
13485    }
13486
13487    /**
13488     * The base implementation of `_.filter` without support for iteratee shorthands.
13489     *
13490     * @private
13491     * @param {Array|Object} collection The collection to iterate over.
13492     * @param {Function} predicate The function invoked per iteration.
13493     * @returns {Array} Returns the new filtered array.
13494     */
13495    function baseFilter(collection, predicate) {
13496      var result = [];
13497      baseEach(collection, function(value, index, collection) {
13498        if (predicate(value, index, collection)) {
13499          result.push(value);
13500        }
13501      });
13502      return result;
13503    }
13504
13505    /**
13506     * The base implementation of `_.flatten` with support for restricting flattening.
13507     *
13508     * @private
13509     * @param {Array} array The array to flatten.
13510     * @param {number} depth The maximum recursion depth.
13511     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
13512     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
13513     * @param {Array} [result=[]] The initial result value.
13514     * @returns {Array} Returns the new flattened array.
13515     */
13516    function baseFlatten(array, depth, predicate, isStrict, result) {
13517      var index = -1,
13518          length = array.length;
13519
13520      predicate || (predicate = isFlattenable);
13521      result || (result = []);
13522
13523      while (++index < length) {
13524        var value = array[index];
13525        if (depth > 0 && predicate(value)) {
13526          if (depth > 1) {
13527            // Recursively flatten arrays (susceptible to call stack limits).
13528            baseFlatten(value, depth - 1, predicate, isStrict, result);
13529          } else {
13530            arrayPush(result, value);
13531          }
13532        } else if (!isStrict) {
13533          result[result.length] = value;
13534        }
13535      }
13536      return result;
13537    }
13538
13539    /**
13540     * The base implementation of `baseForOwn` which iterates over `object`
13541     * properties returned by `keysFunc` and invokes `iteratee` for each property.
13542     * Iteratee functions may exit iteration early by explicitly returning `false`.
13543     *
13544     * @private
13545     * @param {Object} object The object to iterate over.
13546     * @param {Function} iteratee The function invoked per iteration.
13547     * @param {Function} keysFunc The function to get the keys of `object`.
13548     * @returns {Object} Returns `object`.
13549     */
13550    var baseFor = createBaseFor();
13551
13552    /**
13553     * This function is like `baseFor` except that it iterates over properties
13554     * in the opposite order.
13555     *
13556     * @private
13557     * @param {Object} object The object to iterate over.
13558     * @param {Function} iteratee The function invoked per iteration.
13559     * @param {Function} keysFunc The function to get the keys of `object`.
13560     * @returns {Object} Returns `object`.
13561     */
13562    var baseForRight = createBaseFor(true);
13563
13564    /**
13565     * The base implementation of `_.forOwn` without support for iteratee shorthands.
13566     *
13567     * @private
13568     * @param {Object} object The object to iterate over.
13569     * @param {Function} iteratee The function invoked per iteration.
13570     * @returns {Object} Returns `object`.
13571     */
13572    function baseForOwn(object, iteratee) {
13573      return object && baseFor(object, iteratee, keys);
13574    }
13575
13576    /**
13577     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.
13578     *
13579     * @private
13580     * @param {Object} object The object to iterate over.
13581     * @param {Function} iteratee The function invoked per iteration.
13582     * @returns {Object} Returns `object`.
13583     */
13584    function baseForOwnRight(object, iteratee) {
13585      return object && baseForRight(object, iteratee, keys);
13586    }
13587
13588    /**
13589     * The base implementation of `_.functions` which creates an array of
13590     * `object` function property names filtered from `props`.
13591     *
13592     * @private
13593     * @param {Object} object The object to inspect.
13594     * @param {Array} props The property names to filter.
13595     * @returns {Array} Returns the function names.
13596     */
13597    function baseFunctions(object, props) {
13598      return arrayFilter(props, function(key) {
13599        return isFunction(object[key]);
13600      });
13601    }
13602
13603    /**
13604     * The base implementation of `_.get` without support for default values.
13605     *
13606     * @private
13607     * @param {Object} object The object to query.
13608     * @param {Array|string} path The path of the property to get.
13609     * @returns {*} Returns the resolved value.
13610     */
13611    function baseGet(object, path) {
13612      path = castPath(path, object);
13613
13614      var index = 0,
13615          length = path.length;
13616
13617      while (object != null && index < length) {
13618        object = object[toKey(path[index++])];
13619      }
13620      return (index && index == length) ? object : undefined;
13621    }
13622
13623    /**
13624     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
13625     * `keysFunc` and `symbolsFunc` to get the enumerable property names and
13626     * symbols of `object`.
13627     *
13628     * @private
13629     * @param {Object} object The object to query.
13630     * @param {Function} keysFunc The function to get the keys of `object`.
13631     * @param {Function} symbolsFunc The function to get the symbols of `object`.
13632     * @returns {Array} Returns the array of property names and symbols.
13633     */
13634    function baseGetAllKeys(object, keysFunc, symbolsFunc) {
13635      var result = keysFunc(object);
13636      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
13637    }
13638
13639    /**
13640     * The base implementation of `getTag` without fallbacks for buggy environments.
13641     *
13642     * @private
13643     * @param {*} value The value to query.
13644     * @returns {string} Returns the `toStringTag`.
13645     */
13646    function baseGetTag(value) {
13647      if (value == null) {
13648        return value === undefined ? undefinedTag : nullTag;
13649      }
13650      return (symToStringTag && symToStringTag in Object(value))
13651        ? getRawTag(value)
13652        : objectToString(value);
13653    }
13654
13655    /**
13656     * The base implementation of `_.gt` which doesn't coerce arguments.
13657     *
13658     * @private
13659     * @param {*} value The value to compare.
13660     * @param {*} other The other value to compare.
13661     * @returns {boolean} Returns `true` if `value` is greater than `other`,
13662     *  else `false`.
13663     */
13664    function baseGt(value, other) {
13665      return value > other;
13666    }
13667
13668    /**
13669     * The base implementation of `_.has` without support for deep paths.
13670     *
13671     * @private
13672     * @param {Object} [object] The object to query.
13673     * @param {Array|string} key The key to check.
13674     * @returns {boolean} Returns `true` if `key` exists, else `false`.
13675     */
13676    function baseHas(object, key) {
13677      return object != null && hasOwnProperty.call(object, key);
13678    }
13679
13680    /**
13681     * The base implementation of `_.hasIn` without support for deep paths.
13682     *
13683     * @private
13684     * @param {Object} [object] The object to query.
13685     * @param {Array|string} key The key to check.
13686     * @returns {boolean} Returns `true` if `key` exists, else `false`.
13687     */
13688    function baseHasIn(object, key) {
13689      return object != null && key in Object(object);
13690    }
13691
13692    /**
13693     * The base implementation of `_.inRange` which doesn't coerce arguments.
13694     *
13695     * @private
13696     * @param {number} number The number to check.
13697     * @param {number} start The start of the range.
13698     * @param {number} end The end of the range.
13699     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.
13700     */
13701    function baseInRange(number, start, end) {
13702      return number >= nativeMin(start, end) && number < nativeMax(start, end);
13703    }
13704
13705    /**
13706     * The base implementation of methods like `_.intersection`, without support
13707     * for iteratee shorthands, that accepts an array of arrays to inspect.
13708     *
13709     * @private
13710     * @param {Array} arrays The arrays to inspect.
13711     * @param {Function} [iteratee] The iteratee invoked per element.
13712     * @param {Function} [comparator] The comparator invoked per element.
13713     * @returns {Array} Returns the new array of shared values.
13714     */
13715    function baseIntersection(arrays, iteratee, comparator) {
13716      var includes = comparator ? arrayIncludesWith : arrayIncludes,
13717          length = arrays[0].length,
13718          othLength = arrays.length,
13719          othIndex = othLength,
13720          caches = Array(othLength),
13721          maxLength = Infinity,
13722          result = [];
13723
13724      while (othIndex--) {
13725        var array = arrays[othIndex];
13726        if (othIndex && iteratee) {
13727          array = arrayMap(array, baseUnary(iteratee));
13728        }
13729        maxLength = nativeMin(array.length, maxLength);
13730        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))
13731          ? new SetCache(othIndex && array)
13732          : undefined;
13733      }
13734      array = arrays[0];
13735
13736      var index = -1,
13737          seen = caches[0];
13738
13739      outer:
13740      while (++index < length && result.length < maxLength) {
13741        var value = array[index],
13742            computed = iteratee ? iteratee(value) : value;
13743
13744        value = (comparator || value !== 0) ? value : 0;
13745        if (!(seen
13746              ? cacheHas(seen, computed)
13747              : includes(result, computed, comparator)
13748            )) {
13749          othIndex = othLength;
13750          while (--othIndex) {
13751            var cache = caches[othIndex];
13752            if (!(cache
13753                  ? cacheHas(cache, computed)
13754                  : includes(arrays[othIndex], computed, comparator))
13755                ) {
13756              continue outer;
13757            }
13758          }
13759          if (seen) {
13760            seen.push(computed);
13761          }
13762          result.push(value);
13763        }
13764      }
13765      return result;
13766    }
13767
13768    /**
13769     * The base implementation of `_.invert` and `_.invertBy` which inverts
13770     * `object` with values transformed by `iteratee` and set by `setter`.
13771     *
13772     * @private
13773     * @param {Object} object The object to iterate over.
13774     * @param {Function} setter The function to set `accumulator` values.
13775     * @param {Function} iteratee The iteratee to transform values.
13776     * @param {Object} accumulator The initial inverted object.
13777     * @returns {Function} Returns `accumulator`.
13778     */
13779    function baseInverter(object, setter, iteratee, accumulator) {
13780      baseForOwn(object, function(value, key, object) {
13781        setter(accumulator, iteratee(value), key, object);
13782      });
13783      return accumulator;
13784    }
13785
13786    /**
13787     * The base implementation of `_.invoke` without support for individual
13788     * method arguments.
13789     *
13790     * @private
13791     * @param {Object} object The object to query.
13792     * @param {Array|string} path The path of the method to invoke.
13793     * @param {Array} args The arguments to invoke the method with.
13794     * @returns {*} Returns the result of the invoked method.
13795     */
13796    function baseInvoke(object, path, args) {
13797      path = castPath(path, object);
13798      object = parent(object, path);
13799      var func = object == null ? object : object[toKey(last(path))];
13800      return func == null ? undefined : apply(func, object, args);
13801    }
13802
13803    /**
13804     * The base implementation of `_.isArguments`.
13805     *
13806     * @private
13807     * @param {*} value The value to check.
13808     * @returns {boolean} Returns `true` if `value` is an `arguments` object,
13809     */
13810    function baseIsArguments(value) {
13811      return isObjectLike(value) && baseGetTag(value) == argsTag;
13812    }
13813
13814    /**
13815     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.
13816     *
13817     * @private
13818     * @param {*} value The value to check.
13819     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
13820     */
13821    function baseIsArrayBuffer(value) {
13822      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;
13823    }
13824
13825    /**
13826     * The base implementation of `_.isDate` without Node.js optimizations.
13827     *
13828     * @private
13829     * @param {*} value The value to check.
13830     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
13831     */
13832    function baseIsDate(value) {
13833      return isObjectLike(value) && baseGetTag(value) == dateTag;
13834    }
13835
13836    /**
13837     * The base implementation of `_.isEqual` which supports partial comparisons
13838     * and tracks traversed objects.
13839     *
13840     * @private
13841     * @param {*} value The value to compare.
13842     * @param {*} other The other value to compare.
13843     * @param {boolean} bitmask The bitmask flags.
13844     *  1 - Unordered comparison
13845     *  2 - Partial comparison
13846     * @param {Function} [customizer] The function to customize comparisons.
13847     * @param {Object} [stack] Tracks traversed `value` and `other` objects.
13848     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
13849     */
13850    function baseIsEqual(value, other, bitmask, customizer, stack) {
13851      if (value === other) {
13852        return true;
13853      }
13854      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {
13855        return value !== value && other !== other;
13856      }
13857      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
13858    }
13859
13860    /**
13861     * A specialized version of `baseIsEqual` for arrays and objects which performs
13862     * deep comparisons and tracks traversed objects enabling objects with circular
13863     * references to be compared.
13864     *
13865     * @private
13866     * @param {Object} object The object to compare.
13867     * @param {Object} other The other object to compare.
13868     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
13869     * @param {Function} customizer The function to customize comparisons.
13870     * @param {Function} equalFunc The function to determine equivalents of values.
13871     * @param {Object} [stack] Tracks traversed `object` and `other` objects.
13872     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
13873     */
13874    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
13875      var objIsArr = isArray(object),
13876          othIsArr = isArray(other),
13877          objTag = objIsArr ? arrayTag : getTag(object),
13878          othTag = othIsArr ? arrayTag : getTag(other);
13879
13880      objTag = objTag == argsTag ? objectTag : objTag;
13881      othTag = othTag == argsTag ? objectTag : othTag;
13882
13883      var objIsObj = objTag == objectTag,
13884          othIsObj = othTag == objectTag,
13885          isSameTag = objTag == othTag;
13886
13887      if (isSameTag && isBuffer(object)) {
13888        if (!isBuffer(other)) {
13889          return false;
13890        }
13891        objIsArr = true;
13892        objIsObj = false;
13893      }
13894      if (isSameTag && !objIsObj) {
13895        stack || (stack = new Stack);
13896        return (objIsArr || isTypedArray(object))
13897          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
13898          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
13899      }
13900      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
13901        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
13902            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
13903
13904        if (objIsWrapped || othIsWrapped) {
13905          var objUnwrapped = objIsWrapped ? object.value() : object,
13906              othUnwrapped = othIsWrapped ? other.value() : other;
13907
13908          stack || (stack = new Stack);
13909          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
13910        }
13911      }
13912      if (!isSameTag) {
13913        return false;
13914      }
13915      stack || (stack = new Stack);
13916      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
13917    }
13918
13919    /**
13920     * The base implementation of `_.isMap` without Node.js optimizations.
13921     *
13922     * @private
13923     * @param {*} value The value to check.
13924     * @returns {boolean} Returns `true` if `value` is a map, else `false`.
13925     */
13926    function baseIsMap(value) {
13927      return isObjectLike(value) && getTag(value) == mapTag;
13928    }
13929
13930    /**
13931     * The base implementation of `_.isMatch` without support for iteratee shorthands.
13932     *
13933     * @private
13934     * @param {Object} object The object to inspect.
13935     * @param {Object} source The object of property values to match.
13936     * @param {Array} matchData The property names, values, and compare flags to match.
13937     * @param {Function} [customizer] The function to customize comparisons.
13938     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
13939     */
13940    function baseIsMatch(object, source, matchData, customizer) {
13941      var index = matchData.length,
13942          length = index,
13943          noCustomizer = !customizer;
13944
13945      if (object == null) {
13946        return !length;
13947      }
13948      object = Object(object);
13949      while (index--) {
13950        var data = matchData[index];
13951        if ((noCustomizer && data[2])
13952              ? data[1] !== object[data[0]]
13953              : !(data[0] in object)
13954            ) {
13955          return false;
13956        }
13957      }
13958      while (++index < length) {
13959        data = matchData[index];
13960        var key = data[0],
13961            objValue = object[key],
13962            srcValue = data[1];
13963
13964        if (noCustomizer && data[2]) {
13965          if (objValue === undefined && !(key in object)) {
13966            return false;
13967          }
13968        } else {
13969          var stack = new Stack;
13970          if (customizer) {
13971            var result = customizer(objValue, srcValue, key, object, source, stack);
13972          }
13973          if (!(result === undefined
13974                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
13975                : result
13976              )) {
13977            return false;
13978          }
13979        }
13980      }
13981      return true;
13982    }
13983
13984    /**
13985     * The base implementation of `_.isNative` without bad shim checks.
13986     *
13987     * @private
13988     * @param {*} value The value to check.
13989     * @returns {boolean} Returns `true` if `value` is a native function,
13990     *  else `false`.
13991     */
13992    function baseIsNative(value) {
13993      if (!isObject(value) || isMasked(value)) {
13994        return false;
13995      }
13996      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
13997      return pattern.test(toSource(value));
13998    }
13999
14000    /**
14001     * The base implementation of `_.isRegExp` without Node.js optimizations.
14002     *
14003     * @private
14004     * @param {*} value The value to check.
14005     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
14006     */
14007    function baseIsRegExp(value) {
14008      return isObjectLike(value) && baseGetTag(value) == regexpTag;
14009    }
14010
14011    /**
14012     * The base implementation of `_.isSet` without Node.js optimizations.
14013     *
14014     * @private
14015     * @param {*} value The value to check.
14016     * @returns {boolean} Returns `true` if `value` is a set, else `false`.
14017     */
14018    function baseIsSet(value) {
14019      return isObjectLike(value) && getTag(value) == setTag;
14020    }
14021
14022    /**
14023     * The base implementation of `_.isTypedArray` without Node.js optimizations.
14024     *
14025     * @private
14026     * @param {*} value The value to check.
14027     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
14028     */
14029    function baseIsTypedArray(value) {
14030      return isObjectLike(value) &&
14031        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
14032    }
14033
14034    /**
14035     * The base implementation of `_.iteratee`.
14036     *
14037     * @private
14038     * @param {*} [value=_.identity] The value to convert to an iteratee.
14039     * @returns {Function} Returns the iteratee.
14040     */
14041    function baseIteratee(value) {
14042      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
14043      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
14044      if (typeof value == 'function') {
14045        return value;
14046      }
14047      if (value == null) {
14048        return identity;
14049      }
14050      if (typeof value == 'object') {
14051        return isArray(value)
14052          ? baseMatchesProperty(value[0], value[1])
14053          : baseMatches(value);
14054      }
14055      return property(value);
14056    }
14057
14058    /**
14059     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
14060     *
14061     * @private
14062     * @param {Object} object The object to query.
14063     * @returns {Array} Returns the array of property names.
14064     */
14065    function baseKeys(object) {
14066      if (!isPrototype(object)) {
14067        return nativeKeys(object);
14068      }
14069      var result = [];
14070      for (var key in Object(object)) {
14071        if (hasOwnProperty.call(object, key) && key != 'constructor') {
14072          result.push(key);
14073        }
14074      }
14075      return result;
14076    }
14077
14078    /**
14079     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
14080     *
14081     * @private
14082     * @param {Object} object The object to query.
14083     * @returns {Array} Returns the array of property names.
14084     */
14085    function baseKeysIn(object) {
14086      if (!isObject(object)) {
14087        return nativeKeysIn(object);
14088      }
14089      var isProto = isPrototype(object),
14090          result = [];
14091
14092      for (var key in object) {
14093        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
14094          result.push(key);
14095        }
14096      }
14097      return result;
14098    }
14099
14100    /**
14101     * The base implementation of `_.lt` which doesn't coerce arguments.
14102     *
14103     * @private
14104     * @param {*} value The value to compare.
14105     * @param {*} other The other value to compare.
14106     * @returns {boolean} Returns `true` if `value` is less than `other`,
14107     *  else `false`.
14108     */
14109    function baseLt(value, other) {
14110      return value < other;
14111    }
14112
14113    /**
14114     * The base implementation of `_.map` without support for iteratee shorthands.
14115     *
14116     * @private
14117     * @param {Array|Object} collection The collection to iterate over.
14118     * @param {Function} iteratee The function invoked per iteration.
14119     * @returns {Array} Returns the new mapped array.
14120     */
14121    function baseMap(collection, iteratee) {
14122      var index = -1,
14123          result = isArrayLike(collection) ? Array(collection.length) : [];
14124
14125      baseEach(collection, function(value, key, collection) {
14126        result[++index] = iteratee(value, key, collection);
14127      });
14128      return result;
14129    }
14130
14131    /**
14132     * The base implementation of `_.matches` which doesn't clone `source`.
14133     *
14134     * @private
14135     * @param {Object} source The object of property values to match.
14136     * @returns {Function} Returns the new spec function.
14137     */
14138    function baseMatches(source) {
14139      var matchData = getMatchData(source);
14140      if (matchData.length == 1 && matchData[0][2]) {
14141        return matchesStrictComparable(matchData[0][0], matchData[0][1]);
14142      }
14143      return function(object) {
14144        return object === source || baseIsMatch(object, source, matchData);
14145      };
14146    }
14147
14148    /**
14149     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
14150     *
14151     * @private
14152     * @param {string} path The path of the property to get.
14153     * @param {*} srcValue The value to match.
14154     * @returns {Function} Returns the new spec function.
14155     */
14156    function baseMatchesProperty(path, srcValue) {
14157      if (isKey(path) && isStrictComparable(srcValue)) {
14158        return matchesStrictComparable(toKey(path), srcValue);
14159      }
14160      return function(object) {
14161        var objValue = get(object, path);
14162        return (objValue === undefined && objValue === srcValue)
14163          ? hasIn(object, path)
14164          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
14165      };
14166    }
14167
14168    /**
14169     * The base implementation of `_.merge` without support for multiple sources.
14170     *
14171     * @private
14172     * @param {Object} object The destination object.
14173     * @param {Object} source The source object.
14174     * @param {number} srcIndex The index of `source`.
14175     * @param {Function} [customizer] The function to customize merged values.
14176     * @param {Object} [stack] Tracks traversed source values and their merged
14177     *  counterparts.
14178     */
14179    function baseMerge(object, source, srcIndex, customizer, stack) {
14180      if (object === source) {
14181        return;
14182      }
14183      baseFor(source, function(srcValue, key) {
14184        stack || (stack = new Stack);
14185        if (isObject(srcValue)) {
14186          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
14187        }
14188        else {
14189          var newValue = customizer
14190            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)
14191            : undefined;
14192
14193          if (newValue === undefined) {
14194            newValue = srcValue;
14195          }
14196          assignMergeValue(object, key, newValue);
14197        }
14198      }, keysIn);
14199    }
14200
14201    /**
14202     * A specialized version of `baseMerge` for arrays and objects which performs
14203     * deep merges and tracks traversed objects enabling objects with circular
14204     * references to be merged.
14205     *
14206     * @private
14207     * @param {Object} object The destination object.
14208     * @param {Object} source The source object.
14209     * @param {string} key The key of the value to merge.
14210     * @param {number} srcIndex The index of `source`.
14211     * @param {Function} mergeFunc The function to merge values.
14212     * @param {Function} [customizer] The function to customize assigned values.
14213     * @param {Object} [stack] Tracks traversed source values and their merged
14214     *  counterparts.
14215     */
14216    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
14217      var objValue = safeGet(object, key),
14218          srcValue = safeGet(source, key),
14219          stacked = stack.get(srcValue);
14220
14221      if (stacked) {
14222        assignMergeValue(object, key, stacked);
14223        return;
14224      }
14225      var newValue = customizer
14226        ? customizer(objValue, srcValue, (key + ''), object, source, stack)
14227        : undefined;
14228
14229      var isCommon = newValue === undefined;
14230
14231      if (isCommon) {
14232        var isArr = isArray(srcValue),
14233            isBuff = !isArr && isBuffer(srcValue),
14234            isTyped = !isArr && !isBuff && isTypedArray(srcValue);
14235
14236        newValue = srcValue;
14237        if (isArr || isBuff || isTyped) {
14238          if (isArray(objValue)) {
14239            newValue = objValue;
14240          }
14241          else if (isArrayLikeObject(objValue)) {
14242            newValue = copyArray(objValue);
14243          }
14244          else if (isBuff) {
14245            isCommon = false;
14246            newValue = cloneBuffer(srcValue, true);
14247          }
14248          else if (isTyped) {
14249            isCommon = false;
14250            newValue = cloneTypedArray(srcValue, true);
14251          }
14252          else {
14253            newValue = [];
14254          }
14255        }
14256        else if (isPlainObject(srcValue) || isArguments(srcValue)) {
14257          newValue = objValue;
14258          if (isArguments(objValue)) {
14259            newValue = toPlainObject(objValue);
14260          }
14261          else if (!isObject(objValue) || isFunction(objValue)) {
14262            newValue = initCloneObject(srcValue);
14263          }
14264        }
14265        else {
14266          isCommon = false;
14267        }
14268      }
14269      if (isCommon) {
14270        // Recursively merge objects and arrays (susceptible to call stack limits).
14271        stack.set(srcValue, newValue);
14272        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
14273        stack['delete'](srcValue);
14274      }
14275      assignMergeValue(object, key, newValue);
14276    }
14277
14278    /**
14279     * The base implementation of `_.nth` which doesn't coerce arguments.
14280     *
14281     * @private
14282     * @param {Array} array The array to query.
14283     * @param {number} n The index of the element to return.
14284     * @returns {*} Returns the nth element of `array`.
14285     */
14286    function baseNth(array, n) {
14287      var length = array.length;
14288      if (!length) {
14289        return;
14290      }
14291      n += n < 0 ? length : 0;
14292      return isIndex(n, length) ? array[n] : undefined;
14293    }
14294
14295    /**
14296     * The base implementation of `_.orderBy` without param guards.
14297     *
14298     * @private
14299     * @param {Array|Object} collection The collection to iterate over.
14300     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
14301     * @param {string[]} orders The sort orders of `iteratees`.
14302     * @returns {Array} Returns the new sorted array.
14303     */
14304    function baseOrderBy(collection, iteratees, orders) {
14305      if (iteratees.length) {
14306        iteratees = arrayMap(iteratees, function(iteratee) {
14307          if (isArray(iteratee)) {
14308            return function(value) {
14309              return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);
14310            }
14311          }
14312          return iteratee;
14313        });
14314      } else {
14315        iteratees = [identity];
14316      }
14317
14318      var index = -1;
14319      iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
14320
14321      var result = baseMap(collection, function(value, key, collection) {
14322        var criteria = arrayMap(iteratees, function(iteratee) {
14323          return iteratee(value);
14324        });
14325        return { 'criteria': criteria, 'index': ++index, 'value': value };
14326      });
14327
14328      return baseSortBy(result, function(object, other) {
14329        return compareMultiple(object, other, orders);
14330      });
14331    }
14332
14333    /**
14334     * The base implementation of `_.pick` without support for individual
14335     * property identifiers.
14336     *
14337     * @private
14338     * @param {Object} object The source object.
14339     * @param {string[]} paths The property paths to pick.
14340     * @returns {Object} Returns the new object.
14341     */
14342    function basePick(object, paths) {
14343      return basePickBy(object, paths, function(value, path) {
14344        return hasIn(object, path);
14345      });
14346    }
14347
14348    /**
14349     * The base implementation of  `_.pickBy` without support for iteratee shorthands.
14350     *
14351     * @private
14352     * @param {Object} object The source object.
14353     * @param {string[]} paths The property paths to pick.
14354     * @param {Function} predicate The function invoked per property.
14355     * @returns {Object} Returns the new object.
14356     */
14357    function basePickBy(object, paths, predicate) {
14358      var index = -1,
14359          length = paths.length,
14360          result = {};
14361
14362      while (++index < length) {
14363        var path = paths[index],
14364            value = baseGet(object, path);
14365
14366        if (predicate(value, path)) {
14367          baseSet(result, castPath(path, object), value);
14368        }
14369      }
14370      return result;
14371    }
14372
14373    /**
14374     * A specialized version of `baseProperty` which supports deep paths.
14375     *
14376     * @private
14377     * @param {Array|string} path The path of the property to get.
14378     * @returns {Function} Returns the new accessor function.
14379     */
14380    function basePropertyDeep(path) {
14381      return function(object) {
14382        return baseGet(object, path);
14383      };
14384    }
14385
14386    /**
14387     * The base implementation of `_.pullAllBy` without support for iteratee
14388     * shorthands.
14389     *
14390     * @private
14391     * @param {Array} array The array to modify.
14392     * @param {Array} values The values to remove.
14393     * @param {Function} [iteratee] The iteratee invoked per element.
14394     * @param {Function} [comparator] The comparator invoked per element.
14395     * @returns {Array} Returns `array`.
14396     */
14397    function basePullAll(array, values, iteratee, comparator) {
14398      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,
14399          index = -1,
14400          length = values.length,
14401          seen = array;
14402
14403      if (array === values) {
14404        values = copyArray(values);
14405      }
14406      if (iteratee) {
14407        seen = arrayMap(array, baseUnary(iteratee));
14408      }
14409      while (++index < length) {
14410        var fromIndex = 0,
14411            value = values[index],
14412            computed = iteratee ? iteratee(value) : value;
14413
14414        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {
14415          if (seen !== array) {
14416            splice.call(seen, fromIndex, 1);
14417          }
14418          splice.call(array, fromIndex, 1);
14419        }
14420      }
14421      return array;
14422    }
14423
14424    /**
14425     * The base implementation of `_.pullAt` without support for individual
14426     * indexes or capturing the removed elements.
14427     *
14428     * @private
14429     * @param {Array} array The array to modify.
14430     * @param {number[]} indexes The indexes of elements to remove.
14431     * @returns {Array} Returns `array`.
14432     */
14433    function basePullAt(array, indexes) {
14434      var length = array ? indexes.length : 0,
14435          lastIndex = length - 1;
14436
14437      while (length--) {
14438        var index = indexes[length];
14439        if (length == lastIndex || index !== previous) {
14440          var previous = index;
14441          if (isIndex(index)) {
14442            splice.call(array, index, 1);
14443          } else {
14444            baseUnset(array, index);
14445          }
14446        }
14447      }
14448      return array;
14449    }
14450
14451    /**
14452     * The base implementation of `_.random` without support for returning
14453     * floating-point numbers.
14454     *
14455     * @private
14456     * @param {number} lower The lower bound.
14457     * @param {number} upper The upper bound.
14458     * @returns {number} Returns the random number.
14459     */
14460    function baseRandom(lower, upper) {
14461      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));
14462    }
14463
14464    /**
14465     * The base implementation of `_.range` and `_.rangeRight` which doesn't
14466     * coerce arguments.
14467     *
14468     * @private
14469     * @param {number} start The start of the range.
14470     * @param {number} end The end of the range.
14471     * @param {number} step The value to increment or decrement by.
14472     * @param {boolean} [fromRight] Specify iterating from right to left.
14473     * @returns {Array} Returns the range of numbers.
14474     */
14475    function baseRange(start, end, step, fromRight) {
14476      var index = -1,
14477          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),
14478          result = Array(length);
14479
14480      while (length--) {
14481        result[fromRight ? length : ++index] = start;
14482        start += step;
14483      }
14484      return result;
14485    }
14486
14487    /**
14488     * The base implementation of `_.repeat` which doesn't coerce arguments.
14489     *
14490     * @private
14491     * @param {string} string The string to repeat.
14492     * @param {number} n The number of times to repeat the string.
14493     * @returns {string} Returns the repeated string.
14494     */
14495    function baseRepeat(string, n) {
14496      var result = '';
14497      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {
14498        return result;
14499      }
14500      // Leverage the exponentiation by squaring algorithm for a faster repeat.
14501      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.
14502      do {
14503        if (n % 2) {
14504          result += string;
14505        }
14506        n = nativeFloor(n / 2);
14507        if (n) {
14508          string += string;
14509        }
14510      } while (n);
14511
14512      return result;
14513    }
14514
14515    /**
14516     * The base implementation of `_.rest` which doesn't validate or coerce arguments.
14517     *
14518     * @private
14519     * @param {Function} func The function to apply a rest parameter to.
14520     * @param {number} [start=func.length-1] The start position of the rest parameter.
14521     * @returns {Function} Returns the new function.
14522     */
14523    function baseRest(func, start) {
14524      return setToString(overRest(func, start, identity), func + '');
14525    }
14526
14527    /**
14528     * The base implementation of `_.sample`.
14529     *
14530     * @private
14531     * @param {Array|Object} collection The collection to sample.
14532     * @returns {*} Returns the random element.
14533     */
14534    function baseSample(collection) {
14535      return arraySample(values(collection));
14536    }
14537
14538    /**
14539     * The base implementation of `_.sampleSize` without param guards.
14540     *
14541     * @private
14542     * @param {Array|Object} collection The collection to sample.
14543     * @param {number} n The number of elements to sample.
14544     * @returns {Array} Returns the random elements.
14545     */
14546    function baseSampleSize(collection, n) {
14547      var array = values(collection);
14548      return shuffleSelf(array, baseClamp(n, 0, array.length));
14549    }
14550
14551    /**
14552     * The base implementation of `_.set`.
14553     *
14554     * @private
14555     * @param {Object} object The object to modify.
14556     * @param {Array|string} path The path of the property to set.
14557     * @param {*} value The value to set.
14558     * @param {Function} [customizer] The function to customize path creation.
14559     * @returns {Object} Returns `object`.
14560     */
14561    function baseSet(object, path, value, customizer) {
14562      if (!isObject(object)) {
14563        return object;
14564      }
14565      path = castPath(path, object);
14566
14567      var index = -1,
14568          length = path.length,
14569          lastIndex = length - 1,
14570          nested = object;
14571
14572      while (nested != null && ++index < length) {
14573        var key = toKey(path[index]),
14574            newValue = value;
14575
14576        if (key === '__proto__' || key === 'constructor' || key === 'prototype') {
14577          return object;
14578        }
14579
14580        if (index != lastIndex) {
14581          var objValue = nested[key];
14582          newValue = customizer ? customizer(objValue, key, nested) : undefined;
14583          if (newValue === undefined) {
14584            newValue = isObject(objValue)
14585              ? objValue
14586              : (isIndex(path[index + 1]) ? [] : {});
14587          }
14588        }
14589        assignValue(nested, key, newValue);
14590        nested = nested[key];
14591      }
14592      return object;
14593    }
14594
14595    /**
14596     * The base implementation of `setData` without support for hot loop shorting.
14597     *
14598     * @private
14599     * @param {Function} func The function to associate metadata with.
14600     * @param {*} data The metadata.
14601     * @returns {Function} Returns `func`.
14602     */
14603    var baseSetData = !metaMap ? identity : function(func, data) {
14604      metaMap.set(func, data);
14605      return func;
14606    };
14607
14608    /**
14609     * The base implementation of `setToString` without support for hot loop shorting.
14610     *
14611     * @private
14612     * @param {Function} func The function to modify.
14613     * @param {Function} string The `toString` result.
14614     * @returns {Function} Returns `func`.
14615     */
14616    var baseSetToString = !defineProperty ? identity : function(func, string) {
14617      return defineProperty(func, 'toString', {
14618        'configurable': true,
14619        'enumerable': false,
14620        'value': constant(string),
14621        'writable': true
14622      });
14623    };
14624
14625    /**
14626     * The base implementation of `_.shuffle`.
14627     *
14628     * @private
14629     * @param {Array|Object} collection The collection to shuffle.
14630     * @returns {Array} Returns the new shuffled array.
14631     */
14632    function baseShuffle(collection) {
14633      return shuffleSelf(values(collection));
14634    }
14635
14636    /**
14637     * The base implementation of `_.slice` without an iteratee call guard.
14638     *
14639     * @private
14640     * @param {Array} array The array to slice.
14641     * @param {number} [start=0] The start position.
14642     * @param {number} [end=array.length] The end position.
14643     * @returns {Array} Returns the slice of `array`.
14644     */
14645    function baseSlice(array, start, end) {
14646      var index = -1,
14647          length = array.length;
14648
14649      if (start < 0) {
14650        start = -start > length ? 0 : (length + start);
14651      }
14652      end = end > length ? length : end;
14653      if (end < 0) {
14654        end += length;
14655      }
14656      length = start > end ? 0 : ((end - start) >>> 0);
14657      start >>>= 0;
14658
14659      var result = Array(length);
14660      while (++index < length) {
14661        result[index] = array[index + start];
14662      }
14663      return result;
14664    }
14665
14666    /**
14667     * The base implementation of `_.some` without support for iteratee shorthands.
14668     *
14669     * @private
14670     * @param {Array|Object} collection The collection to iterate over.
14671     * @param {Function} predicate The function invoked per iteration.
14672     * @returns {boolean} Returns `true` if any element passes the predicate check,
14673     *  else `false`.
14674     */
14675    function baseSome(collection, predicate) {
14676      var result;
14677
14678      baseEach(collection, function(value, index, collection) {
14679        result = predicate(value, index, collection);
14680        return !result;
14681      });
14682      return !!result;
14683    }
14684
14685    /**
14686     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which
14687     * performs a binary search of `array` to determine the index at which `value`
14688     * should be inserted into `array` in order to maintain its sort order.
14689     *
14690     * @private
14691     * @param {Array} array The sorted array to inspect.
14692     * @param {*} value The value to evaluate.
14693     * @param {boolean} [retHighest] Specify returning the highest qualified index.
14694     * @returns {number} Returns the index at which `value` should be inserted
14695     *  into `array`.
14696     */
14697    function baseSortedIndex(array, value, retHighest) {
14698      var low = 0,
14699          high = array == null ? low : array.length;
14700
14701      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {
14702        while (low < high) {
14703          var mid = (low + high) >>> 1,
14704              computed = array[mid];
14705
14706          if (computed !== null && !isSymbol(computed) &&
14707              (retHighest ? (computed <= value) : (computed < value))) {
14708            low = mid + 1;
14709          } else {
14710            high = mid;
14711          }
14712        }
14713        return high;
14714      }
14715      return baseSortedIndexBy(array, value, identity, retHighest);
14716    }
14717
14718    /**
14719     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`
14720     * which invokes `iteratee` for `value` and each element of `array` to compute
14721     * their sort ranking. The iteratee is invoked with one argument; (value).
14722     *
14723     * @private
14724     * @param {Array} array The sorted array to inspect.
14725     * @param {*} value The value to evaluate.
14726     * @param {Function} iteratee The iteratee invoked per element.
14727     * @param {boolean} [retHighest] Specify returning the highest qualified index.
14728     * @returns {number} Returns the index at which `value` should be inserted
14729     *  into `array`.
14730     */
14731    function baseSortedIndexBy(array, value, iteratee, retHighest) {
14732      var low = 0,
14733          high = array == null ? 0 : array.length;
14734      if (high === 0) {
14735        return 0;
14736      }
14737
14738      value = iteratee(value);
14739      var valIsNaN = value !== value,
14740          valIsNull = value === null,
14741          valIsSymbol = isSymbol(value),
14742          valIsUndefined = value === undefined;
14743
14744      while (low < high) {
14745        var mid = nativeFloor((low + high) / 2),
14746            computed = iteratee(array[mid]),
14747            othIsDefined = computed !== undefined,
14748            othIsNull = computed === null,
14749            othIsReflexive = computed === computed,
14750            othIsSymbol = isSymbol(computed);
14751
14752        if (valIsNaN) {
14753          var setLow = retHighest || othIsReflexive;
14754        } else if (valIsUndefined) {
14755          setLow = othIsReflexive && (retHighest || othIsDefined);
14756        } else if (valIsNull) {
14757          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);
14758        } else if (valIsSymbol) {
14759          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);
14760        } else if (othIsNull || othIsSymbol) {
14761          setLow = false;
14762        } else {
14763          setLow = retHighest ? (computed <= value) : (computed < value);
14764        }
14765        if (setLow) {
14766          low = mid + 1;
14767        } else {
14768          high = mid;
14769        }
14770      }
14771      return nativeMin(high, MAX_ARRAY_INDEX);
14772    }
14773
14774    /**
14775     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without
14776     * support for iteratee shorthands.
14777     *
14778     * @private
14779     * @param {Array} array The array to inspect.
14780     * @param {Function} [iteratee] The iteratee invoked per element.
14781     * @returns {Array} Returns the new duplicate free array.
14782     */
14783    function baseSortedUniq(array, iteratee) {
14784      var index = -1,
14785          length = array.length,
14786          resIndex = 0,
14787          result = [];
14788
14789      while (++index < length) {
14790        var value = array[index],
14791            computed = iteratee ? iteratee(value) : value;
14792
14793        if (!index || !eq(computed, seen)) {
14794          var seen = computed;
14795          result[resIndex++] = value === 0 ? 0 : value;
14796        }
14797      }
14798      return result;
14799    }
14800
14801    /**
14802     * The base implementation of `_.toNumber` which doesn't ensure correct
14803     * conversions of binary, hexadecimal, or octal string values.
14804     *
14805     * @private
14806     * @param {*} value The value to process.
14807     * @returns {number} Returns the number.
14808     */
14809    function baseToNumber(value) {
14810      if (typeof value == 'number') {
14811        return value;
14812      }
14813      if (isSymbol(value)) {
14814        return NAN;
14815      }
14816      return +value;
14817    }
14818
14819    /**
14820     * The base implementation of `_.toString` which doesn't convert nullish
14821     * values to empty strings.
14822     *
14823     * @private
14824     * @param {*} value The value to process.
14825     * @returns {string} Returns the string.
14826     */
14827    function baseToString(value) {
14828      // Exit early for strings to avoid a performance hit in some environments.
14829      if (typeof value == 'string') {
14830        return value;
14831      }
14832      if (isArray(value)) {
14833        // Recursively convert values (susceptible to call stack limits).
14834        return arrayMap(value, baseToString) + '';
14835      }
14836      if (isSymbol(value)) {
14837        return symbolToString ? symbolToString.call(value) : '';
14838      }
14839      var result = (value + '');
14840      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
14841    }
14842
14843    /**
14844     * The base implementation of `_.uniqBy` without support for iteratee shorthands.
14845     *
14846     * @private
14847     * @param {Array} array The array to inspect.
14848     * @param {Function} [iteratee] The iteratee invoked per element.
14849     * @param {Function} [comparator] The comparator invoked per element.
14850     * @returns {Array} Returns the new duplicate free array.
14851     */
14852    function baseUniq(array, iteratee, comparator) {
14853      var index = -1,
14854          includes = arrayIncludes,
14855          length = array.length,
14856          isCommon = true,
14857          result = [],
14858          seen = result;
14859
14860      if (comparator) {
14861        isCommon = false;
14862        includes = arrayIncludesWith;
14863      }
14864      else if (length >= LARGE_ARRAY_SIZE) {
14865        var set = iteratee ? null : createSet(array);
14866        if (set) {
14867          return setToArray(set);
14868        }
14869        isCommon = false;
14870        includes = cacheHas;
14871        seen = new SetCache;
14872      }
14873      else {
14874        seen = iteratee ? [] : result;
14875      }
14876      outer:
14877      while (++index < length) {
14878        var value = array[index],
14879            computed = iteratee ? iteratee(value) : value;
14880
14881        value = (comparator || value !== 0) ? value : 0;
14882        if (isCommon && computed === computed) {
14883          var seenIndex = seen.length;
14884          while (seenIndex--) {
14885            if (seen[seenIndex] === computed) {
14886              continue outer;
14887            }
14888          }
14889          if (iteratee) {
14890            seen.push(computed);
14891          }
14892          result.push(value);
14893        }
14894        else if (!includes(seen, computed, comparator)) {
14895          if (seen !== result) {
14896            seen.push(computed);
14897          }
14898          result.push(value);
14899        }
14900      }
14901      return result;
14902    }
14903
14904    /**
14905     * The base implementation of `_.unset`.
14906     *
14907     * @private
14908     * @param {Object} object The object to modify.
14909     * @param {Array|string} path The property path to unset.
14910     * @returns {boolean} Returns `true` if the property is deleted, else `false`.
14911     */
14912    function baseUnset(object, path) {
14913      path = castPath(path, object);
14914      object = parent(object, path);
14915      return object == null || delete object[toKey(last(path))];
14916    }
14917
14918    /**
14919     * The base implementation of `_.update`.
14920     *
14921     * @private
14922     * @param {Object} object The object to modify.
14923     * @param {Array|string} path The path of the property to update.
14924     * @param {Function} updater The function to produce the updated value.
14925     * @param {Function} [customizer] The function to customize path creation.
14926     * @returns {Object} Returns `object`.
14927     */
14928    function baseUpdate(object, path, updater, customizer) {
14929      return baseSet(object, path, updater(baseGet(object, path)), customizer);
14930    }
14931
14932    /**
14933     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`
14934     * without support for iteratee shorthands.
14935     *
14936     * @private
14937     * @param {Array} array The array to query.
14938     * @param {Function} predicate The function invoked per iteration.
14939     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.
14940     * @param {boolean} [fromRight] Specify iterating from right to left.
14941     * @returns {Array} Returns the slice of `array`.
14942     */
14943    function baseWhile(array, predicate, isDrop, fromRight) {
14944      var length = array.length,
14945          index = fromRight ? length : -1;
14946
14947      while ((fromRight ? index-- : ++index < length) &&
14948        predicate(array[index], index, array)) {}
14949
14950      return isDrop
14951        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))
14952        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));
14953    }
14954
14955    /**
14956     * The base implementation of `wrapperValue` which returns the result of
14957     * performing a sequence of actions on the unwrapped `value`, where each
14958     * successive action is supplied the return value of the previous.
14959     *
14960     * @private
14961     * @param {*} value The unwrapped value.
14962     * @param {Array} actions Actions to perform to resolve the unwrapped value.
14963     * @returns {*} Returns the resolved value.
14964     */
14965    function baseWrapperValue(value, actions) {
14966      var result = value;
14967      if (result instanceof LazyWrapper) {
14968        result = result.value();
14969      }
14970      return arrayReduce(actions, function(result, action) {
14971        return action.func.apply(action.thisArg, arrayPush([result], action.args));
14972      }, result);
14973    }
14974
14975    /**
14976     * The base implementation of methods like `_.xor`, without support for
14977     * iteratee shorthands, that accepts an array of arrays to inspect.
14978     *
14979     * @private
14980     * @param {Array} arrays The arrays to inspect.
14981     * @param {Function} [iteratee] The iteratee invoked per element.
14982     * @param {Function} [comparator] The comparator invoked per element.
14983     * @returns {Array} Returns the new array of values.
14984     */
14985    function baseXor(arrays, iteratee, comparator) {
14986      var length = arrays.length;
14987      if (length < 2) {
14988        return length ? baseUniq(arrays[0]) : [];
14989      }
14990      var index = -1,
14991          result = Array(length);
14992
14993      while (++index < length) {
14994        var array = arrays[index],
14995            othIndex = -1;
14996
14997        while (++othIndex < length) {
14998          if (othIndex != index) {
14999            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);
15000          }
15001        }
15002      }
15003      return baseUniq(baseFlatten(result, 1), iteratee, comparator);
15004    }
15005
15006    /**
15007     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.
15008     *
15009     * @private
15010     * @param {Array} props The property identifiers.
15011     * @param {Array} values The property values.
15012     * @param {Function} assignFunc The function to assign values.
15013     * @returns {Object} Returns the new object.
15014     */
15015    function baseZipObject(props, values, assignFunc) {
15016      var index = -1,
15017          length = props.length,
15018          valsLength = values.length,
15019          result = {};
15020
15021      while (++index < length) {
15022        var value = index < valsLength ? values[index] : undefined;
15023        assignFunc(result, props[index], value);
15024      }
15025      return result;
15026    }
15027
15028    /**
15029     * Casts `value` to an empty array if it's not an array like object.
15030     *
15031     * @private
15032     * @param {*} value The value to inspect.
15033     * @returns {Array|Object} Returns the cast array-like object.
15034     */
15035    function castArrayLikeObject(value) {
15036      return isArrayLikeObject(value) ? value : [];
15037    }
15038
15039    /**
15040     * Casts `value` to `identity` if it's not a function.
15041     *
15042     * @private
15043     * @param {*} value The value to inspect.
15044     * @returns {Function} Returns cast function.
15045     */
15046    function castFunction(value) {
15047      return typeof value == 'function' ? value : identity;
15048    }
15049
15050    /**
15051     * Casts `value` to a path array if it's not one.
15052     *
15053     * @private
15054     * @param {*} value The value to inspect.
15055     * @param {Object} [object] The object to query keys on.
15056     * @returns {Array} Returns the cast property path array.
15057     */
15058    function castPath(value, object) {
15059      if (isArray(value)) {
15060        return value;
15061      }
15062      return isKey(value, object) ? [value] : stringToPath(toString(value));
15063    }
15064
15065    /**
15066     * A `baseRest` alias which can be replaced with `identity` by module
15067     * replacement plugins.
15068     *
15069     * @private
15070     * @type {Function}
15071     * @param {Function} func The function to apply a rest parameter to.
15072     * @returns {Function} Returns the new function.
15073     */
15074    var castRest = baseRest;
15075
15076    /**
15077     * Casts `array` to a slice if it's needed.
15078     *
15079     * @private
15080     * @param {Array} array The array to inspect.
15081     * @param {number} start The start position.
15082     * @param {number} [end=array.length] The end position.
15083     * @returns {Array} Returns the cast slice.
15084     */
15085    function castSlice(array, start, end) {
15086      var length = array.length;
15087      end = end === undefined ? length : end;
15088      return (!start && end >= length) ? array : baseSlice(array, start, end);
15089    }
15090
15091    /**
15092     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).
15093     *
15094     * @private
15095     * @param {number|Object} id The timer id or timeout object of the timer to clear.
15096     */
15097    var clearTimeout = ctxClearTimeout || function(id) {
15098      return root.clearTimeout(id);
15099    };
15100
15101    /**
15102     * Creates a clone of  `buffer`.
15103     *
15104     * @private
15105     * @param {Buffer} buffer The buffer to clone.
15106     * @param {boolean} [isDeep] Specify a deep clone.
15107     * @returns {Buffer} Returns the cloned buffer.
15108     */
15109    function cloneBuffer(buffer, isDeep) {
15110      if (isDeep) {
15111        return buffer.slice();
15112      }
15113      var length = buffer.length,
15114          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);
15115
15116      buffer.copy(result);
15117      return result;
15118    }
15119
15120    /**
15121     * Creates a clone of `arrayBuffer`.
15122     *
15123     * @private
15124     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.
15125     * @returns {ArrayBuffer} Returns the cloned array buffer.
15126     */
15127    function cloneArrayBuffer(arrayBuffer) {
15128      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
15129      new Uint8Array(result).set(new Uint8Array(arrayBuffer));
15130      return result;
15131    }
15132
15133    /**
15134     * Creates a clone of `dataView`.
15135     *
15136     * @private
15137     * @param {Object} dataView The data view to clone.
15138     * @param {boolean} [isDeep] Specify a deep clone.
15139     * @returns {Object} Returns the cloned data view.
15140     */
15141    function cloneDataView(dataView, isDeep) {
15142      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
15143      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
15144    }
15145
15146    /**
15147     * Creates a clone of `regexp`.
15148     *
15149     * @private
15150     * @param {Object} regexp The regexp to clone.
15151     * @returns {Object} Returns the cloned regexp.
15152     */
15153    function cloneRegExp(regexp) {
15154      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
15155      result.lastIndex = regexp.lastIndex;
15156      return result;
15157    }
15158
15159    /**
15160     * Creates a clone of the `symbol` object.
15161     *
15162     * @private
15163     * @param {Object} symbol The symbol object to clone.
15164     * @returns {Object} Returns the cloned symbol object.
15165     */
15166    function cloneSymbol(symbol) {
15167      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
15168    }
15169
15170    /**
15171     * Creates a clone of `typedArray`.
15172     *
15173     * @private
15174     * @param {Object} typedArray The typed array to clone.
15175     * @param {boolean} [isDeep] Specify a deep clone.
15176     * @returns {Object} Returns the cloned typed array.
15177     */
15178    function cloneTypedArray(typedArray, isDeep) {
15179      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
15180      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
15181    }
15182
15183    /**
15184     * Compares values to sort them in ascending order.
15185     *
15186     * @private
15187     * @param {*} value The value to compare.
15188     * @param {*} other The other value to compare.
15189     * @returns {number} Returns the sort order indicator for `value`.
15190     */
15191    function compareAscending(value, other) {
15192      if (value !== other) {
15193        var valIsDefined = value !== undefined,
15194            valIsNull = value === null,
15195            valIsReflexive = value === value,
15196            valIsSymbol = isSymbol(value);
15197
15198        var othIsDefined = other !== undefined,
15199            othIsNull = other === null,
15200            othIsReflexive = other === other,
15201            othIsSymbol = isSymbol(other);
15202
15203        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||
15204            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||
15205            (valIsNull && othIsDefined && othIsReflexive) ||
15206            (!valIsDefined && othIsReflexive) ||
15207            !valIsReflexive) {
15208          return 1;
15209        }
15210        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||
15211            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||
15212            (othIsNull && valIsDefined && valIsReflexive) ||
15213            (!othIsDefined && valIsReflexive) ||
15214            !othIsReflexive) {
15215          return -1;
15216        }
15217      }
15218      return 0;
15219    }
15220
15221    /**
15222     * Used by `_.orderBy` to compare multiple properties of a value to another
15223     * and stable sort them.
15224     *
15225     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,
15226     * specify an order of "desc" for descending or "asc" for ascending sort order
15227     * of corresponding values.
15228     *
15229     * @private
15230     * @param {Object} object The object to compare.
15231     * @param {Object} other The other object to compare.
15232     * @param {boolean[]|string[]} orders The order to sort by for each property.
15233     * @returns {number} Returns the sort order indicator for `object`.
15234     */
15235    function compareMultiple(object, other, orders) {
15236      var index = -1,
15237          objCriteria = object.criteria,
15238          othCriteria = other.criteria,
15239          length = objCriteria.length,
15240          ordersLength = orders.length;
15241
15242      while (++index < length) {
15243        var result = compareAscending(objCriteria[index], othCriteria[index]);
15244        if (result) {
15245          if (index >= ordersLength) {
15246            return result;
15247          }
15248          var order = orders[index];
15249          return result * (order == 'desc' ? -1 : 1);
15250        }
15251      }
15252      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
15253      // that causes it, under certain circumstances, to provide the same value for
15254      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247
15255      // for more details.
15256      //
15257      // This also ensures a stable sort in V8 and other engines.
15258      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.
15259      return object.index - other.index;
15260    }
15261
15262    /**
15263     * Creates an array that is the composition of partially applied arguments,
15264     * placeholders, and provided arguments into a single array of arguments.
15265     *
15266     * @private
15267     * @param {Array} args The provided arguments.
15268     * @param {Array} partials The arguments to prepend to those provided.
15269     * @param {Array} holders The `partials` placeholder indexes.
15270     * @params {boolean} [isCurried] Specify composing for a curried function.
15271     * @returns {Array} Returns the new array of composed arguments.
15272     */
15273    function composeArgs(args, partials, holders, isCurried) {
15274      var argsIndex = -1,
15275          argsLength = args.length,
15276          holdersLength = holders.length,
15277          leftIndex = -1,
15278          leftLength = partials.length,
15279          rangeLength = nativeMax(argsLength - holdersLength, 0),
15280          result = Array(leftLength + rangeLength),
15281          isUncurried = !isCurried;
15282
15283      while (++leftIndex < leftLength) {
15284        result[leftIndex] = partials[leftIndex];
15285      }
15286      while (++argsIndex < holdersLength) {
15287        if (isUncurried || argsIndex < argsLength) {
15288          result[holders[argsIndex]] = args[argsIndex];
15289        }
15290      }
15291      while (rangeLength--) {
15292        result[leftIndex++] = args[argsIndex++];
15293      }
15294      return result;
15295    }
15296
15297    /**
15298     * This function is like `composeArgs` except that the arguments composition
15299     * is tailored for `_.partialRight`.
15300     *
15301     * @private
15302     * @param {Array} args The provided arguments.
15303     * @param {Array} partials The arguments to append to those provided.
15304     * @param {Array} holders The `partials` placeholder indexes.
15305     * @params {boolean} [isCurried] Specify composing for a curried function.
15306     * @returns {Array} Returns the new array of composed arguments.
15307     */
15308    function composeArgsRight(args, partials, holders, isCurried) {
15309      var argsIndex = -1,
15310          argsLength = args.length,
15311          holdersIndex = -1,
15312          holdersLength = holders.length,
15313          rightIndex = -1,
15314          rightLength = partials.length,
15315          rangeLength = nativeMax(argsLength - holdersLength, 0),
15316          result = Array(rangeLength + rightLength),
15317          isUncurried = !isCurried;
15318
15319      while (++argsIndex < rangeLength) {
15320        result[argsIndex] = args[argsIndex];
15321      }
15322      var offset = argsIndex;
15323      while (++rightIndex < rightLength) {
15324        result[offset + rightIndex] = partials[rightIndex];
15325      }
15326      while (++holdersIndex < holdersLength) {
15327        if (isUncurried || argsIndex < argsLength) {
15328          result[offset + holders[holdersIndex]] = args[argsIndex++];
15329        }
15330      }
15331      return result;
15332    }
15333
15334    /**
15335     * Copies the values of `source` to `array`.
15336     *
15337     * @private
15338     * @param {Array} source The array to copy values from.
15339     * @param {Array} [array=[]] The array to copy values to.
15340     * @returns {Array} Returns `array`.
15341     */
15342    function copyArray(source, array) {
15343      var index = -1,
15344          length = source.length;
15345
15346      array || (array = Array(length));
15347      while (++index < length) {
15348        array[index] = source[index];
15349      }
15350      return array;
15351    }
15352
15353    /**
15354     * Copies properties of `source` to `object`.
15355     *
15356     * @private
15357     * @param {Object} source The object to copy properties from.
15358     * @param {Array} props The property identifiers to copy.
15359     * @param {Object} [object={}] The object to copy properties to.
15360     * @param {Function} [customizer] The function to customize copied values.
15361     * @returns {Object} Returns `object`.
15362     */
15363    function copyObject(source, props, object, customizer) {
15364      var isNew = !object;
15365      object || (object = {});
15366
15367      var index = -1,
15368          length = props.length;
15369
15370      while (++index < length) {
15371        var key = props[index];
15372
15373        var newValue = customizer
15374          ? customizer(object[key], source[key], key, object, source)
15375          : undefined;
15376
15377        if (newValue === undefined) {
15378          newValue = source[key];
15379        }
15380        if (isNew) {
15381          baseAssignValue(object, key, newValue);
15382        } else {
15383          assignValue(object, key, newValue);
15384        }
15385      }
15386      return object;
15387    }
15388
15389    /**
15390     * Copies own symbols of `source` to `object`.
15391     *
15392     * @private
15393     * @param {Object} source The object to copy symbols from.
15394     * @param {Object} [object={}] The object to copy symbols to.
15395     * @returns {Object} Returns `object`.
15396     */
15397    function copySymbols(source, object) {
15398      return copyObject(source, getSymbols(source), object);
15399    }
15400
15401    /**
15402     * Copies own and inherited symbols of `source` to `object`.
15403     *
15404     * @private
15405     * @param {Object} source The object to copy symbols from.
15406     * @param {Object} [object={}] The object to copy symbols to.
15407     * @returns {Object} Returns `object`.
15408     */
15409    function copySymbolsIn(source, object) {
15410      return copyObject(source, getSymbolsIn(source), object);
15411    }
15412
15413    /**
15414     * Creates a function like `_.groupBy`.
15415     *
15416     * @private
15417     * @param {Function} setter The function to set accumulator values.
15418     * @param {Function} [initializer] The accumulator object initializer.
15419     * @returns {Function} Returns the new aggregator function.
15420     */
15421    function createAggregator(setter, initializer) {
15422      return function(collection, iteratee) {
15423        var func = isArray(collection) ? arrayAggregator : baseAggregator,
15424            accumulator = initializer ? initializer() : {};
15425
15426        return func(collection, setter, getIteratee(iteratee, 2), accumulator);
15427      };
15428    }
15429
15430    /**
15431     * Creates a function like `_.assign`.
15432     *
15433     * @private
15434     * @param {Function} assigner The function to assign values.
15435     * @returns {Function} Returns the new assigner function.
15436     */
15437    function createAssigner(assigner) {
15438      return baseRest(function(object, sources) {
15439        var index = -1,
15440            length = sources.length,
15441            customizer = length > 1 ? sources[length - 1] : undefined,
15442            guard = length > 2 ? sources[2] : undefined;
15443
15444        customizer = (assigner.length > 3 && typeof customizer == 'function')
15445          ? (length--, customizer)
15446          : undefined;
15447
15448        if (guard && isIterateeCall(sources[0], sources[1], guard)) {
15449          customizer = length < 3 ? undefined : customizer;
15450          length = 1;
15451        }
15452        object = Object(object);
15453        while (++index < length) {
15454          var source = sources[index];
15455          if (source) {
15456            assigner(object, source, index, customizer);
15457          }
15458        }
15459        return object;
15460      });
15461    }
15462
15463    /**
15464     * Creates a `baseEach` or `baseEachRight` function.
15465     *
15466     * @private
15467     * @param {Function} eachFunc The function to iterate over a collection.
15468     * @param {boolean} [fromRight] Specify iterating from right to left.
15469     * @returns {Function} Returns the new base function.
15470     */
15471    function createBaseEach(eachFunc, fromRight) {
15472      return function(collection, iteratee) {
15473        if (collection == null) {
15474          return collection;
15475        }
15476        if (!isArrayLike(collection)) {
15477          return eachFunc(collection, iteratee);
15478        }
15479        var length = collection.length,
15480            index = fromRight ? length : -1,
15481            iterable = Object(collection);
15482
15483        while ((fromRight ? index-- : ++index < length)) {
15484          if (iteratee(iterable[index], index, iterable) === false) {
15485            break;
15486          }
15487        }
15488        return collection;
15489      };
15490    }
15491
15492    /**
15493     * Creates a base function for methods like `_.forIn` and `_.forOwn`.
15494     *
15495     * @private
15496     * @param {boolean} [fromRight] Specify iterating from right to left.
15497     * @returns {Function} Returns the new base function.
15498     */
15499    function createBaseFor(fromRight) {
15500      return function(object, iteratee, keysFunc) {
15501        var index = -1,
15502            iterable = Object(object),
15503            props = keysFunc(object),
15504            length = props.length;
15505
15506        while (length--) {
15507          var key = props[fromRight ? length : ++index];
15508          if (iteratee(iterable[key], key, iterable) === false) {
15509            break;
15510          }
15511        }
15512        return object;
15513      };
15514    }
15515
15516    /**
15517     * Creates a function that wraps `func` to invoke it with the optional `this`
15518     * binding of `thisArg`.
15519     *
15520     * @private
15521     * @param {Function} func The function to wrap.
15522     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
15523     * @param {*} [thisArg] The `this` binding of `func`.
15524     * @returns {Function} Returns the new wrapped function.
15525     */
15526    function createBind(func, bitmask, thisArg) {
15527      var isBind = bitmask & WRAP_BIND_FLAG,
15528          Ctor = createCtor(func);
15529
15530      function wrapper() {
15531        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
15532        return fn.apply(isBind ? thisArg : this, arguments);
15533      }
15534      return wrapper;
15535    }
15536
15537    /**
15538     * Creates a function like `_.lowerFirst`.
15539     *
15540     * @private
15541     * @param {string} methodName The name of the `String` case method to use.
15542     * @returns {Function} Returns the new case function.
15543     */
15544    function createCaseFirst(methodName) {
15545      return function(string) {
15546        string = toString(string);
15547
15548        var strSymbols = hasUnicode(string)
15549          ? stringToArray(string)
15550          : undefined;
15551
15552        var chr = strSymbols
15553          ? strSymbols[0]
15554          : string.charAt(0);
15555
15556        var trailing = strSymbols
15557          ? castSlice(strSymbols, 1).join('')
15558          : string.slice(1);
15559
15560        return chr[methodName]() + trailing;
15561      };
15562    }
15563
15564    /**
15565     * Creates a function like `_.camelCase`.
15566     *
15567     * @private
15568     * @param {Function} callback The function to combine each word.
15569     * @returns {Function} Returns the new compounder function.
15570     */
15571    function createCompounder(callback) {
15572      return function(string) {
15573        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');
15574      };
15575    }
15576
15577    /**
15578     * Creates a function that produces an instance of `Ctor` regardless of
15579     * whether it was invoked as part of a `new` expression or by `call` or `apply`.
15580     *
15581     * @private
15582     * @param {Function} Ctor The constructor to wrap.
15583     * @returns {Function} Returns the new wrapped function.
15584     */
15585    function createCtor(Ctor) {
15586      return function() {
15587        // Use a `switch` statement to work with class constructors. See
15588        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist
15589        // for more details.
15590        var args = arguments;
15591        switch (args.length) {
15592          case 0: return new Ctor;
15593          case 1: return new Ctor(args[0]);
15594          case 2: return new Ctor(args[0], args[1]);
15595          case 3: return new Ctor(args[0], args[1], args[2]);
15596          case 4: return new Ctor(args[0], args[1], args[2], args[3]);
15597          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);
15598          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);
15599          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
15600        }
15601        var thisBinding = baseCreate(Ctor.prototype),
15602            result = Ctor.apply(thisBinding, args);
15603
15604        // Mimic the constructor's `return` behavior.
15605        // See https://es5.github.io/#x13.2.2 for more details.
15606        return isObject(result) ? result : thisBinding;
15607      };
15608    }
15609
15610    /**
15611     * Creates a function that wraps `func` to enable currying.
15612     *
15613     * @private
15614     * @param {Function} func The function to wrap.
15615     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
15616     * @param {number} arity The arity of `func`.
15617     * @returns {Function} Returns the new wrapped function.
15618     */
15619    function createCurry(func, bitmask, arity) {
15620      var Ctor = createCtor(func);
15621
15622      function wrapper() {
15623        var length = arguments.length,
15624            args = Array(length),
15625            index = length,
15626            placeholder = getHolder(wrapper);
15627
15628        while (index--) {
15629          args[index] = arguments[index];
15630        }
15631        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)
15632          ? []
15633          : replaceHolders(args, placeholder);
15634
15635        length -= holders.length;
15636        if (length < arity) {
15637          return createRecurry(
15638            func, bitmask, createHybrid, wrapper.placeholder, undefined,
15639            args, holders, undefined, undefined, arity - length);
15640        }
15641        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
15642        return apply(fn, this, args);
15643      }
15644      return wrapper;
15645    }
15646
15647    /**
15648     * Creates a `_.find` or `_.findLast` function.
15649     *
15650     * @private
15651     * @param {Function} findIndexFunc The function to find the collection index.
15652     * @returns {Function} Returns the new find function.
15653     */
15654    function createFind(findIndexFunc) {
15655      return function(collection, predicate, fromIndex) {
15656        var iterable = Object(collection);
15657        if (!isArrayLike(collection)) {
15658          var iteratee = getIteratee(predicate, 3);
15659          collection = keys(collection);
15660          predicate = function(key) { return iteratee(iterable[key], key, iterable); };
15661        }
15662        var index = findIndexFunc(collection, predicate, fromIndex);
15663        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;
15664      };
15665    }
15666
15667    /**
15668     * Creates a `_.flow` or `_.flowRight` function.
15669     *
15670     * @private
15671     * @param {boolean} [fromRight] Specify iterating from right to left.
15672     * @returns {Function} Returns the new flow function.
15673     */
15674    function createFlow(fromRight) {
15675      return flatRest(function(funcs) {
15676        var length = funcs.length,
15677            index = length,
15678            prereq = LodashWrapper.prototype.thru;
15679
15680        if (fromRight) {
15681          funcs.reverse();
15682        }
15683        while (index--) {
15684          var func = funcs[index];
15685          if (typeof func != 'function') {
15686            throw new TypeError(FUNC_ERROR_TEXT);
15687          }
15688          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {
15689            var wrapper = new LodashWrapper([], true);
15690          }
15691        }
15692        index = wrapper ? index : length;
15693        while (++index < length) {
15694          func = funcs[index];
15695
15696          var funcName = getFuncName(func),
15697              data = funcName == 'wrapper' ? getData(func) : undefined;
15698
15699          if (data && isLaziable(data[0]) &&
15700                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&
15701                !data[4].length && data[9] == 1
15702              ) {
15703            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
15704          } else {
15705            wrapper = (func.length == 1 && isLaziable(func))
15706              ? wrapper[funcName]()
15707              : wrapper.thru(func);
15708          }
15709        }
15710        return function() {
15711          var args = arguments,
15712              value = args[0];
15713
15714          if (wrapper && args.length == 1 && isArray(value)) {
15715            return wrapper.plant(value).value();
15716          }
15717          var index = 0,
15718              result = length ? funcs[index].apply(this, args) : value;
15719
15720          while (++index < length) {
15721            result = funcs[index].call(this, result);
15722          }
15723          return result;
15724        };
15725      });
15726    }
15727
15728    /**
15729     * Creates a function that wraps `func` to invoke it with optional `this`
15730     * binding of `thisArg`, partial application, and currying.
15731     *
15732     * @private
15733     * @param {Function|string} func The function or method name to wrap.
15734     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
15735     * @param {*} [thisArg] The `this` binding of `func`.
15736     * @param {Array} [partials] The arguments to prepend to those provided to
15737     *  the new function.
15738     * @param {Array} [holders] The `partials` placeholder indexes.
15739     * @param {Array} [partialsRight] The arguments to append to those provided
15740     *  to the new function.
15741     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.
15742     * @param {Array} [argPos] The argument positions of the new function.
15743     * @param {number} [ary] The arity cap of `func`.
15744     * @param {number} [arity] The arity of `func`.
15745     * @returns {Function} Returns the new wrapped function.
15746     */
15747    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
15748      var isAry = bitmask & WRAP_ARY_FLAG,
15749          isBind = bitmask & WRAP_BIND_FLAG,
15750          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,
15751          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),
15752          isFlip = bitmask & WRAP_FLIP_FLAG,
15753          Ctor = isBindKey ? undefined : createCtor(func);
15754
15755      function wrapper() {
15756        var length = arguments.length,
15757            args = Array(length),
15758            index = length;
15759
15760        while (index--) {
15761          args[index] = arguments[index];
15762        }
15763        if (isCurried) {
15764          var placeholder = getHolder(wrapper),
15765              holdersCount = countHolders(args, placeholder);
15766        }
15767        if (partials) {
15768          args = composeArgs(args, partials, holders, isCurried);
15769        }
15770        if (partialsRight) {
15771          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);
15772        }
15773        length -= holdersCount;
15774        if (isCurried && length < arity) {
15775          var newHolders = replaceHolders(args, placeholder);
15776          return createRecurry(
15777            func, bitmask, createHybrid, wrapper.placeholder, thisArg,
15778            args, newHolders, argPos, ary, arity - length
15779          );
15780        }
15781        var thisBinding = isBind ? thisArg : this,
15782            fn = isBindKey ? thisBinding[func] : func;
15783
15784        length = args.length;
15785        if (argPos) {
15786          args = reorder(args, argPos);
15787        } else if (isFlip && length > 1) {
15788          args.reverse();
15789        }
15790        if (isAry && ary < length) {
15791          args.length = ary;
15792        }
15793        if (this && this !== root && this instanceof wrapper) {
15794          fn = Ctor || createCtor(fn);
15795        }
15796        return fn.apply(thisBinding, args);
15797      }
15798      return wrapper;
15799    }
15800
15801    /**
15802     * Creates a function like `_.invertBy`.
15803     *
15804     * @private
15805     * @param {Function} setter The function to set accumulator values.
15806     * @param {Function} toIteratee The function to resolve iteratees.
15807     * @returns {Function} Returns the new inverter function.
15808     */
15809    function createInverter(setter, toIteratee) {
15810      return function(object, iteratee) {
15811        return baseInverter(object, setter, toIteratee(iteratee), {});
15812      };
15813    }
15814
15815    /**
15816     * Creates a function that performs a mathematical operation on two values.
15817     *
15818     * @private
15819     * @param {Function} operator The function to perform the operation.
15820     * @param {number} [defaultValue] The value used for `undefined` arguments.
15821     * @returns {Function} Returns the new mathematical operation function.
15822     */
15823    function createMathOperation(operator, defaultValue) {
15824      return function(value, other) {
15825        var result;
15826        if (value === undefined && other === undefined) {
15827          return defaultValue;
15828        }
15829        if (value !== undefined) {
15830          result = value;
15831        }
15832        if (other !== undefined) {
15833          if (result === undefined) {
15834            return other;
15835          }
15836          if (typeof value == 'string' || typeof other == 'string') {
15837            value = baseToString(value);
15838            other = baseToString(other);
15839          } else {
15840            value = baseToNumber(value);
15841            other = baseToNumber(other);
15842          }
15843          result = operator(value, other);
15844        }
15845        return result;
15846      };
15847    }
15848
15849    /**
15850     * Creates a function like `_.over`.
15851     *
15852     * @private
15853     * @param {Function} arrayFunc The function to iterate over iteratees.
15854     * @returns {Function} Returns the new over function.
15855     */
15856    function createOver(arrayFunc) {
15857      return flatRest(function(iteratees) {
15858        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
15859        return baseRest(function(args) {
15860          var thisArg = this;
15861          return arrayFunc(iteratees, function(iteratee) {
15862            return apply(iteratee, thisArg, args);
15863          });
15864        });
15865      });
15866    }
15867
15868    /**
15869     * Creates the padding for `string` based on `length`. The `chars` string
15870     * is truncated if the number of characters exceeds `length`.
15871     *
15872     * @private
15873     * @param {number} length The padding length.
15874     * @param {string} [chars=' '] The string used as padding.
15875     * @returns {string} Returns the padding for `string`.
15876     */
15877    function createPadding(length, chars) {
15878      chars = chars === undefined ? ' ' : baseToString(chars);
15879
15880      var charsLength = chars.length;
15881      if (charsLength < 2) {
15882        return charsLength ? baseRepeat(chars, length) : chars;
15883      }
15884      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));
15885      return hasUnicode(chars)
15886        ? castSlice(stringToArray(result), 0, length).join('')
15887        : result.slice(0, length);
15888    }
15889
15890    /**
15891     * Creates a function that wraps `func` to invoke it with the `this` binding
15892     * of `thisArg` and `partials` prepended to the arguments it receives.
15893     *
15894     * @private
15895     * @param {Function} func The function to wrap.
15896     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
15897     * @param {*} thisArg The `this` binding of `func`.
15898     * @param {Array} partials The arguments to prepend to those provided to
15899     *  the new function.
15900     * @returns {Function} Returns the new wrapped function.
15901     */
15902    function createPartial(func, bitmask, thisArg, partials) {
15903      var isBind = bitmask & WRAP_BIND_FLAG,
15904          Ctor = createCtor(func);
15905
15906      function wrapper() {
15907        var argsIndex = -1,
15908            argsLength = arguments.length,
15909            leftIndex = -1,
15910            leftLength = partials.length,
15911            args = Array(leftLength + argsLength),
15912            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
15913
15914        while (++leftIndex < leftLength) {
15915          args[leftIndex] = partials[leftIndex];
15916        }
15917        while (argsLength--) {
15918          args[leftIndex++] = arguments[++argsIndex];
15919        }
15920        return apply(fn, isBind ? thisArg : this, args);
15921      }
15922      return wrapper;
15923    }
15924
15925    /**
15926     * Creates a `_.range` or `_.rangeRight` function.
15927     *
15928     * @private
15929     * @param {boolean} [fromRight] Specify iterating from right to left.
15930     * @returns {Function} Returns the new range function.
15931     */
15932    function createRange(fromRight) {
15933      return function(start, end, step) {
15934        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {
15935          end = step = undefined;
15936        }
15937        // Ensure the sign of `-0` is preserved.
15938        start = toFinite(start);
15939        if (end === undefined) {
15940          end = start;
15941          start = 0;
15942        } else {
15943          end = toFinite(end);
15944        }
15945        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);
15946        return baseRange(start, end, step, fromRight);
15947      };
15948    }
15949
15950    /**
15951     * Creates a function that performs a relational operation on two values.
15952     *
15953     * @private
15954     * @param {Function} operator The function to perform the operation.
15955     * @returns {Function} Returns the new relational operation function.
15956     */
15957    function createRelationalOperation(operator) {
15958      return function(value, other) {
15959        if (!(typeof value == 'string' && typeof other == 'string')) {
15960          value = toNumber(value);
15961          other = toNumber(other);
15962        }
15963        return operator(value, other);
15964      };
15965    }
15966
15967    /**
15968     * Creates a function that wraps `func` to continue currying.
15969     *
15970     * @private
15971     * @param {Function} func The function to wrap.
15972     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
15973     * @param {Function} wrapFunc The function to create the `func` wrapper.
15974     * @param {*} placeholder The placeholder value.
15975     * @param {*} [thisArg] The `this` binding of `func`.
15976     * @param {Array} [partials] The arguments to prepend to those provided to
15977     *  the new function.
15978     * @param {Array} [holders] The `partials` placeholder indexes.
15979     * @param {Array} [argPos] The argument positions of the new function.
15980     * @param {number} [ary] The arity cap of `func`.
15981     * @param {number} [arity] The arity of `func`.
15982     * @returns {Function} Returns the new wrapped function.
15983     */
15984    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {
15985      var isCurry = bitmask & WRAP_CURRY_FLAG,
15986          newHolders = isCurry ? holders : undefined,
15987          newHoldersRight = isCurry ? undefined : holders,
15988          newPartials = isCurry ? partials : undefined,
15989          newPartialsRight = isCurry ? undefined : partials;
15990
15991      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);
15992      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);
15993
15994      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {
15995        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);
15996      }
15997      var newData = [
15998        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,
15999        newHoldersRight, argPos, ary, arity
16000      ];
16001
16002      var result = wrapFunc.apply(undefined, newData);
16003      if (isLaziable(func)) {
16004        setData(result, newData);
16005      }
16006      result.placeholder = placeholder;
16007      return setWrapToString(result, func, bitmask);
16008    }
16009
16010    /**
16011     * Creates a function like `_.round`.
16012     *
16013     * @private
16014     * @param {string} methodName The name of the `Math` method to use when rounding.
16015     * @returns {Function} Returns the new round function.
16016     */
16017    function createRound(methodName) {
16018      var func = Math[methodName];
16019      return function(number, precision) {
16020        number = toNumber(number);
16021        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);
16022        if (precision && nativeIsFinite(number)) {
16023          // Shift with exponential notation to avoid floating-point issues.
16024          // See [MDN](https://mdn.io/round#Examples) for more details.
16025          var pair = (toString(number) + 'e').split('e'),
16026              value = func(pair[0] + 'e' + (+pair[1] + precision));
16027
16028          pair = (toString(value) + 'e').split('e');
16029          return +(pair[0] + 'e' + (+pair[1] - precision));
16030        }
16031        return func(number);
16032      };
16033    }
16034
16035    /**
16036     * Creates a set object of `values`.
16037     *
16038     * @private
16039     * @param {Array} values The values to add to the set.
16040     * @returns {Object} Returns the new set.
16041     */
16042    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {
16043      return new Set(values);
16044    };
16045
16046    /**
16047     * Creates a `_.toPairs` or `_.toPairsIn` function.
16048     *
16049     * @private
16050     * @param {Function} keysFunc The function to get the keys of a given object.
16051     * @returns {Function} Returns the new pairs function.
16052     */
16053    function createToPairs(keysFunc) {
16054      return function(object) {
16055        var tag = getTag(object);
16056        if (tag == mapTag) {
16057          return mapToArray(object);
16058        }
16059        if (tag == setTag) {
16060          return setToPairs(object);
16061        }
16062        return baseToPairs(object, keysFunc(object));
16063      };
16064    }
16065
16066    /**
16067     * Creates a function that either curries or invokes `func` with optional
16068     * `this` binding and partially applied arguments.
16069     *
16070     * @private
16071     * @param {Function|string} func The function or method name to wrap.
16072     * @param {number} bitmask The bitmask flags.
16073     *    1 - `_.bind`
16074     *    2 - `_.bindKey`
16075     *    4 - `_.curry` or `_.curryRight` of a bound function
16076     *    8 - `_.curry`
16077     *   16 - `_.curryRight`
16078     *   32 - `_.partial`
16079     *   64 - `_.partialRight`
16080     *  128 - `_.rearg`
16081     *  256 - `_.ary`
16082     *  512 - `_.flip`
16083     * @param {*} [thisArg] The `this` binding of `func`.
16084     * @param {Array} [partials] The arguments to be partially applied.
16085     * @param {Array} [holders] The `partials` placeholder indexes.
16086     * @param {Array} [argPos] The argument positions of the new function.
16087     * @param {number} [ary] The arity cap of `func`.
16088     * @param {number} [arity] The arity of `func`.
16089     * @returns {Function} Returns the new wrapped function.
16090     */
16091    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {
16092      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;
16093      if (!isBindKey && typeof func != 'function') {
16094        throw new TypeError(FUNC_ERROR_TEXT);
16095      }
16096      var length = partials ? partials.length : 0;
16097      if (!length) {
16098        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);
16099        partials = holders = undefined;
16100      }
16101      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);
16102      arity = arity === undefined ? arity : toInteger(arity);
16103      length -= holders ? holders.length : 0;
16104
16105      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {
16106        var partialsRight = partials,
16107            holdersRight = holders;
16108
16109        partials = holders = undefined;
16110      }
16111      var data = isBindKey ? undefined : getData(func);
16112
16113      var newData = [
16114        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,
16115        argPos, ary, arity
16116      ];
16117
16118      if (data) {
16119        mergeData(newData, data);
16120      }
16121      func = newData[0];
16122      bitmask = newData[1];
16123      thisArg = newData[2];
16124      partials = newData[3];
16125      holders = newData[4];
16126      arity = newData[9] = newData[9] === undefined
16127        ? (isBindKey ? 0 : func.length)
16128        : nativeMax(newData[9] - length, 0);
16129
16130      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {
16131        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);
16132      }
16133      if (!bitmask || bitmask == WRAP_BIND_FLAG) {
16134        var result = createBind(func, bitmask, thisArg);
16135      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {
16136        result = createCurry(func, bitmask, arity);
16137      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {
16138        result = createPartial(func, bitmask, thisArg, partials);
16139      } else {
16140        result = createHybrid.apply(undefined, newData);
16141      }
16142      var setter = data ? baseSetData : setData;
16143      return setWrapToString(setter(result, newData), func, bitmask);
16144    }
16145
16146    /**
16147     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties
16148     * of source objects to the destination object for all destination properties
16149     * that resolve to `undefined`.
16150     *
16151     * @private
16152     * @param {*} objValue The destination value.
16153     * @param {*} srcValue The source value.
16154     * @param {string} key The key of the property to assign.
16155     * @param {Object} object The parent object of `objValue`.
16156     * @returns {*} Returns the value to assign.
16157     */
16158    function customDefaultsAssignIn(objValue, srcValue, key, object) {
16159      if (objValue === undefined ||
16160          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {
16161        return srcValue;
16162      }
16163      return objValue;
16164    }
16165
16166    /**
16167     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source
16168     * objects into destination objects that are passed thru.
16169     *
16170     * @private
16171     * @param {*} objValue The destination value.
16172     * @param {*} srcValue The source value.
16173     * @param {string} key The key of the property to merge.
16174     * @param {Object} object The parent object of `objValue`.
16175     * @param {Object} source The parent object of `srcValue`.
16176     * @param {Object} [stack] Tracks traversed source values and their merged
16177     *  counterparts.
16178     * @returns {*} Returns the value to assign.
16179     */
16180    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {
16181      if (isObject(objValue) && isObject(srcValue)) {
16182        // Recursively merge objects and arrays (susceptible to call stack limits).
16183        stack.set(srcValue, objValue);
16184        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);
16185        stack['delete'](srcValue);
16186      }
16187      return objValue;
16188    }
16189
16190    /**
16191     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain
16192     * objects.
16193     *
16194     * @private
16195     * @param {*} value The value to inspect.
16196     * @param {string} key The key of the property to inspect.
16197     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.
16198     */
16199    function customOmitClone(value) {
16200      return isPlainObject(value) ? undefined : value;
16201    }
16202
16203    /**
16204     * A specialized version of `baseIsEqualDeep` for arrays with support for
16205     * partial deep comparisons.
16206     *
16207     * @private
16208     * @param {Array} array The array to compare.
16209     * @param {Array} other The other array to compare.
16210     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
16211     * @param {Function} customizer The function to customize comparisons.
16212     * @param {Function} equalFunc The function to determine equivalents of values.
16213     * @param {Object} stack Tracks traversed `array` and `other` objects.
16214     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
16215     */
16216    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
16217      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
16218          arrLength = array.length,
16219          othLength = other.length;
16220
16221      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
16222        return false;
16223      }
16224      // Check that cyclic values are equal.
16225      var arrStacked = stack.get(array);
16226      var othStacked = stack.get(other);
16227      if (arrStacked && othStacked) {
16228        return arrStacked == other && othStacked == array;
16229      }
16230      var index = -1,
16231          result = true,
16232          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;
16233
16234      stack.set(array, other);
16235      stack.set(other, array);
16236
16237      // Ignore non-index properties.
16238      while (++index < arrLength) {
16239        var arrValue = array[index],
16240            othValue = other[index];
16241
16242        if (customizer) {
16243          var compared = isPartial
16244            ? customizer(othValue, arrValue, index, other, array, stack)
16245            : customizer(arrValue, othValue, index, array, other, stack);
16246        }
16247        if (compared !== undefined) {
16248          if (compared) {
16249            continue;
16250          }
16251          result = false;
16252          break;
16253        }
16254        // Recursively compare arrays (susceptible to call stack limits).
16255        if (seen) {
16256          if (!arraySome(other, function(othValue, othIndex) {
16257                if (!cacheHas(seen, othIndex) &&
16258                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
16259                  return seen.push(othIndex);
16260                }
16261              })) {
16262            result = false;
16263            break;
16264          }
16265        } else if (!(
16266              arrValue === othValue ||
16267                equalFunc(arrValue, othValue, bitmask, customizer, stack)
16268            )) {
16269          result = false;
16270          break;
16271        }
16272      }
16273      stack['delete'](array);
16274      stack['delete'](other);
16275      return result;
16276    }
16277
16278    /**
16279     * A specialized version of `baseIsEqualDeep` for comparing objects of
16280     * the same `toStringTag`.
16281     *
16282     * **Note:** This function only supports comparing values with tags of
16283     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
16284     *
16285     * @private
16286     * @param {Object} object The object to compare.
16287     * @param {Object} other The other object to compare.
16288     * @param {string} tag The `toStringTag` of the objects to compare.
16289     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
16290     * @param {Function} customizer The function to customize comparisons.
16291     * @param {Function} equalFunc The function to determine equivalents of values.
16292     * @param {Object} stack Tracks traversed `object` and `other` objects.
16293     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
16294     */
16295    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
16296      switch (tag) {
16297        case dataViewTag:
16298          if ((object.byteLength != other.byteLength) ||
16299              (object.byteOffset != other.byteOffset)) {
16300            return false;
16301          }
16302          object = object.buffer;
16303          other = other.buffer;
16304
16305        case arrayBufferTag:
16306          if ((object.byteLength != other.byteLength) ||
16307              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
16308            return false;
16309          }
16310          return true;
16311
16312        case boolTag:
16313        case dateTag:
16314        case numberTag:
16315          // Coerce booleans to `1` or `0` and dates to milliseconds.
16316          // Invalid dates are coerced to `NaN`.
16317          return eq(+object, +other);
16318
16319        case errorTag:
16320          return object.name == other.name && object.message == other.message;
16321
16322        case regexpTag:
16323        case stringTag:
16324          // Coerce regexes to strings and treat strings, primitives and objects,
16325          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
16326          // for more details.
16327          return object == (other + '');
16328
16329        case mapTag:
16330          var convert = mapToArray;
16331
16332        case setTag:
16333          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
16334          convert || (convert = setToArray);
16335
16336          if (object.size != other.size && !isPartial) {
16337            return false;
16338          }
16339          // Assume cyclic values are equal.
16340          var stacked = stack.get(object);
16341          if (stacked) {
16342            return stacked == other;
16343          }
16344          bitmask |= COMPARE_UNORDERED_FLAG;
16345
16346          // Recursively compare objects (susceptible to call stack limits).
16347          stack.set(object, other);
16348          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
16349          stack['delete'](object);
16350          return result;
16351
16352        case symbolTag:
16353          if (symbolValueOf) {
16354            return symbolValueOf.call(object) == symbolValueOf.call(other);
16355          }
16356      }
16357      return false;
16358    }
16359
16360    /**
16361     * A specialized version of `baseIsEqualDeep` for objects with support for
16362     * partial deep comparisons.
16363     *
16364     * @private
16365     * @param {Object} object The object to compare.
16366     * @param {Object} other The other object to compare.
16367     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
16368     * @param {Function} customizer The function to customize comparisons.
16369     * @param {Function} equalFunc The function to determine equivalents of values.
16370     * @param {Object} stack Tracks traversed `object` and `other` objects.
16371     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
16372     */
16373    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
16374      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
16375          objProps = getAllKeys(object),
16376          objLength = objProps.length,
16377          othProps = getAllKeys(other),
16378          othLength = othProps.length;
16379
16380      if (objLength != othLength && !isPartial) {
16381        return false;
16382      }
16383      var index = objLength;
16384      while (index--) {
16385        var key = objProps[index];
16386        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
16387          return false;
16388        }
16389      }
16390      // Check that cyclic values are equal.
16391      var objStacked = stack.get(object);
16392      var othStacked = stack.get(other);
16393      if (objStacked && othStacked) {
16394        return objStacked == other && othStacked == object;
16395      }
16396      var result = true;
16397      stack.set(object, other);
16398      stack.set(other, object);
16399
16400      var skipCtor = isPartial;
16401      while (++index < objLength) {
16402        key = objProps[index];
16403        var objValue = object[key],
16404            othValue = other[key];
16405
16406        if (customizer) {
16407          var compared = isPartial
16408            ? customizer(othValue, objValue, key, other, object, stack)
16409            : customizer(objValue, othValue, key, object, other, stack);
16410        }
16411        // Recursively compare objects (susceptible to call stack limits).
16412        if (!(compared === undefined
16413              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
16414              : compared
16415            )) {
16416          result = false;
16417          break;
16418        }
16419        skipCtor || (skipCtor = key == 'constructor');
16420      }
16421      if (result && !skipCtor) {
16422        var objCtor = object.constructor,
16423            othCtor = other.constructor;
16424
16425        // Non `Object` object instances with different constructors are not equal.
16426        if (objCtor != othCtor &&
16427            ('constructor' in object && 'constructor' in other) &&
16428            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
16429              typeof othCtor == 'function' && othCtor instanceof othCtor)) {
16430          result = false;
16431        }
16432      }
16433      stack['delete'](object);
16434      stack['delete'](other);
16435      return result;
16436    }
16437
16438    /**
16439     * A specialized version of `baseRest` which flattens the rest array.
16440     *
16441     * @private
16442     * @param {Function} func The function to apply a rest parameter to.
16443     * @returns {Function} Returns the new function.
16444     */
16445    function flatRest(func) {
16446      return setToString(overRest(func, undefined, flatten), func + '');
16447    }
16448
16449    /**
16450     * Creates an array of own enumerable property names and symbols of `object`.
16451     *
16452     * @private
16453     * @param {Object} object The object to query.
16454     * @returns {Array} Returns the array of property names and symbols.
16455     */
16456    function getAllKeys(object) {
16457      return baseGetAllKeys(object, keys, getSymbols);
16458    }
16459
16460    /**
16461     * Creates an array of own and inherited enumerable property names and
16462     * symbols of `object`.
16463     *
16464     * @private
16465     * @param {Object} object The object to query.
16466     * @returns {Array} Returns the array of property names and symbols.
16467     */
16468    function getAllKeysIn(object) {
16469      return baseGetAllKeys(object, keysIn, getSymbolsIn);
16470    }
16471
16472    /**
16473     * Gets metadata for `func`.
16474     *
16475     * @private
16476     * @param {Function} func The function to query.
16477     * @returns {*} Returns the metadata for `func`.
16478     */
16479    var getData = !metaMap ? noop : function(func) {
16480      return metaMap.get(func);
16481    };
16482
16483    /**
16484     * Gets the name of `func`.
16485     *
16486     * @private
16487     * @param {Function} func The function to query.
16488     * @returns {string} Returns the function name.
16489     */
16490    function getFuncName(func) {
16491      var result = (func.name + ''),
16492          array = realNames[result],
16493          length = hasOwnProperty.call(realNames, result) ? array.length : 0;
16494
16495      while (length--) {
16496        var data = array[length],
16497            otherFunc = data.func;
16498        if (otherFunc == null || otherFunc == func) {
16499          return data.name;
16500        }
16501      }
16502      return result;
16503    }
16504
16505    /**
16506     * Gets the argument placeholder value for `func`.
16507     *
16508     * @private
16509     * @param {Function} func The function to inspect.
16510     * @returns {*} Returns the placeholder value.
16511     */
16512    function getHolder(func) {
16513      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;
16514      return object.placeholder;
16515    }
16516
16517    /**
16518     * Gets the appropriate "iteratee" function. If `_.iteratee` is customized,
16519     * this function returns the custom method, otherwise it returns `baseIteratee`.
16520     * If arguments are provided, the chosen function is invoked with them and
16521     * its result is returned.
16522     *
16523     * @private
16524     * @param {*} [value] The value to convert to an iteratee.
16525     * @param {number} [arity] The arity of the created iteratee.
16526     * @returns {Function} Returns the chosen function or its result.
16527     */
16528    function getIteratee() {
16529      var result = lodash.iteratee || iteratee;
16530      result = result === iteratee ? baseIteratee : result;
16531      return arguments.length ? result(arguments[0], arguments[1]) : result;
16532    }
16533
16534    /**
16535     * Gets the data for `map`.
16536     *
16537     * @private
16538     * @param {Object} map The map to query.
16539     * @param {string} key The reference key.
16540     * @returns {*} Returns the map data.
16541     */
16542    function getMapData(map, key) {
16543      var data = map.__data__;
16544      return isKeyable(key)
16545        ? data[typeof key == 'string' ? 'string' : 'hash']
16546        : data.map;
16547    }
16548
16549    /**
16550     * Gets the property names, values, and compare flags of `object`.
16551     *
16552     * @private
16553     * @param {Object} object The object to query.
16554     * @returns {Array} Returns the match data of `object`.
16555     */
16556    function getMatchData(object) {
16557      var result = keys(object),
16558          length = result.length;
16559
16560      while (length--) {
16561        var key = result[length],
16562            value = object[key];
16563
16564        result[length] = [key, value, isStrictComparable(value)];
16565      }
16566      return result;
16567    }
16568
16569    /**
16570     * Gets the native function at `key` of `object`.
16571     *
16572     * @private
16573     * @param {Object} object The object to query.
16574     * @param {string} key The key of the method to get.
16575     * @returns {*} Returns the function if it's native, else `undefined`.
16576     */
16577    function getNative(object, key) {
16578      var value = getValue(object, key);
16579      return baseIsNative(value) ? value : undefined;
16580    }
16581
16582    /**
16583     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
16584     *
16585     * @private
16586     * @param {*} value The value to query.
16587     * @returns {string} Returns the raw `toStringTag`.
16588     */
16589    function getRawTag(value) {
16590      var isOwn = hasOwnProperty.call(value, symToStringTag),
16591          tag = value[symToStringTag];
16592
16593      try {
16594        value[symToStringTag] = undefined;
16595        var unmasked = true;
16596      } catch (e) {}
16597
16598      var result = nativeObjectToString.call(value);
16599      if (unmasked) {
16600        if (isOwn) {
16601          value[symToStringTag] = tag;
16602        } else {
16603          delete value[symToStringTag];
16604        }
16605      }
16606      return result;
16607    }
16608
16609    /**
16610     * Creates an array of the own enumerable symbols of `object`.
16611     *
16612     * @private
16613     * @param {Object} object The object to query.
16614     * @returns {Array} Returns the array of symbols.
16615     */
16616    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
16617      if (object == null) {
16618        return [];
16619      }
16620      object = Object(object);
16621      return arrayFilter(nativeGetSymbols(object), function(symbol) {
16622        return propertyIsEnumerable.call(object, symbol);
16623      });
16624    };
16625
16626    /**
16627     * Creates an array of the own and inherited enumerable symbols of `object`.
16628     *
16629     * @private
16630     * @param {Object} object The object to query.
16631     * @returns {Array} Returns the array of symbols.
16632     */
16633    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {
16634      var result = [];
16635      while (object) {
16636        arrayPush(result, getSymbols(object));
16637        object = getPrototype(object);
16638      }
16639      return result;
16640    };
16641
16642    /**
16643     * Gets the `toStringTag` of `value`.
16644     *
16645     * @private
16646     * @param {*} value The value to query.
16647     * @returns {string} Returns the `toStringTag`.
16648     */
16649    var getTag = baseGetTag;
16650
16651    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
16652    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
16653        (Map && getTag(new Map) != mapTag) ||
16654        (Promise && getTag(Promise.resolve()) != promiseTag) ||
16655        (Set && getTag(new Set) != setTag) ||
16656        (WeakMap && getTag(new WeakMap) != weakMapTag)) {
16657      getTag = function(value) {
16658        var result = baseGetTag(value),
16659            Ctor = result == objectTag ? value.constructor : undefined,
16660            ctorString = Ctor ? toSource(Ctor) : '';
16661
16662        if (ctorString) {
16663          switch (ctorString) {
16664            case dataViewCtorString: return dataViewTag;
16665            case mapCtorString: return mapTag;
16666            case promiseCtorString: return promiseTag;
16667            case setCtorString: return setTag;
16668            case weakMapCtorString: return weakMapTag;
16669          }
16670        }
16671        return result;
16672      };
16673    }
16674
16675    /**
16676     * Gets the view, applying any `transforms` to the `start` and `end` positions.
16677     *
16678     * @private
16679     * @param {number} start The start of the view.
16680     * @param {number} end The end of the view.
16681     * @param {Array} transforms The transformations to apply to the view.
16682     * @returns {Object} Returns an object containing the `start` and `end`
16683     *  positions of the view.
16684     */
16685    function getView(start, end, transforms) {
16686      var index = -1,
16687          length = transforms.length;
16688
16689      while (++index < length) {
16690        var data = transforms[index],
16691            size = data.size;
16692
16693        switch (data.type) {
16694          case 'drop':      start += size; break;
16695          case 'dropRight': end -= size; break;
16696          case 'take':      end = nativeMin(end, start + size); break;
16697          case 'takeRight': start = nativeMax(start, end - size); break;
16698        }
16699      }
16700      return { 'start': start, 'end': end };
16701    }
16702
16703    /**
16704     * Extracts wrapper details from the `source` body comment.
16705     *
16706     * @private
16707     * @param {string} source The source to inspect.
16708     * @returns {Array} Returns the wrapper details.
16709     */
16710    function getWrapDetails(source) {
16711      var match = source.match(reWrapDetails);
16712      return match ? match[1].split(reSplitDetails) : [];
16713    }
16714
16715    /**
16716     * Checks if `path` exists on `object`.
16717     *
16718     * @private
16719     * @param {Object} object The object to query.
16720     * @param {Array|string} path The path to check.
16721     * @param {Function} hasFunc The function to check properties.
16722     * @returns {boolean} Returns `true` if `path` exists, else `false`.
16723     */
16724    function hasPath(object, path, hasFunc) {
16725      path = castPath(path, object);
16726
16727      var index = -1,
16728          length = path.length,
16729          result = false;
16730
16731      while (++index < length) {
16732        var key = toKey(path[index]);
16733        if (!(result = object != null && hasFunc(object, key))) {
16734          break;
16735        }
16736        object = object[key];
16737      }
16738      if (result || ++index != length) {
16739        return result;
16740      }
16741      length = object == null ? 0 : object.length;
16742      return !!length && isLength(length) && isIndex(key, length) &&
16743        (isArray(object) || isArguments(object));
16744    }
16745
16746    /**
16747     * Initializes an array clone.
16748     *
16749     * @private
16750     * @param {Array} array The array to clone.
16751     * @returns {Array} Returns the initialized clone.
16752     */
16753    function initCloneArray(array) {
16754      var length = array.length,
16755          result = new array.constructor(length);
16756
16757      // Add properties assigned by `RegExp#exec`.
16758      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
16759        result.index = array.index;
16760        result.input = array.input;
16761      }
16762      return result;
16763    }
16764
16765    /**
16766     * Initializes an object clone.
16767     *
16768     * @private
16769     * @param {Object} object The object to clone.
16770     * @returns {Object} Returns the initialized clone.
16771     */
16772    function initCloneObject(object) {
16773      return (typeof object.constructor == 'function' && !isPrototype(object))
16774        ? baseCreate(getPrototype(object))
16775        : {};
16776    }
16777
16778    /**
16779     * Initializes an object clone based on its `toStringTag`.
16780     *
16781     * **Note:** This function only supports cloning values with tags of
16782     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.
16783     *
16784     * @private
16785     * @param {Object} object The object to clone.
16786     * @param {string} tag The `toStringTag` of the object to clone.
16787     * @param {boolean} [isDeep] Specify a deep clone.
16788     * @returns {Object} Returns the initialized clone.
16789     */
16790    function initCloneByTag(object, tag, isDeep) {
16791      var Ctor = object.constructor;
16792      switch (tag) {
16793        case arrayBufferTag:
16794          return cloneArrayBuffer(object);
16795
16796        case boolTag:
16797        case dateTag:
16798          return new Ctor(+object);
16799
16800        case dataViewTag:
16801          return cloneDataView(object, isDeep);
16802
16803        case float32Tag: case float64Tag:
16804        case int8Tag: case int16Tag: case int32Tag:
16805        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
16806          return cloneTypedArray(object, isDeep);
16807
16808        case mapTag:
16809          return new Ctor;
16810
16811        case numberTag:
16812        case stringTag:
16813          return new Ctor(object);
16814
16815        case regexpTag:
16816          return cloneRegExp(object);
16817
16818        case setTag:
16819          return new Ctor;
16820
16821        case symbolTag:
16822          return cloneSymbol(object);
16823      }
16824    }
16825
16826    /**
16827     * Inserts wrapper `details` in a comment at the top of the `source` body.
16828     *
16829     * @private
16830     * @param {string} source The source to modify.
16831     * @returns {Array} details The details to insert.
16832     * @returns {string} Returns the modified source.
16833     */
16834    function insertWrapDetails(source, details) {
16835      var length = details.length;
16836      if (!length) {
16837        return source;
16838      }
16839      var lastIndex = length - 1;
16840      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];
16841      details = details.join(length > 2 ? ', ' : ' ');
16842      return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n');
16843    }
16844
16845    /**
16846     * Checks if `value` is a flattenable `arguments` object or array.
16847     *
16848     * @private
16849     * @param {*} value The value to check.
16850     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
16851     */
16852    function isFlattenable(value) {
16853      return isArray(value) || isArguments(value) ||
16854        !!(spreadableSymbol && value && value[spreadableSymbol]);
16855    }
16856
16857    /**
16858     * Checks if `value` is a valid array-like index.
16859     *
16860     * @private
16861     * @param {*} value The value to check.
16862     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
16863     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
16864     */
16865    function isIndex(value, length) {
16866      var type = typeof value;
16867      length = length == null ? MAX_SAFE_INTEGER : length;
16868
16869      return !!length &&
16870        (type == 'number' ||
16871          (type != 'symbol' && reIsUint.test(value))) &&
16872            (value > -1 && value % 1 == 0 && value < length);
16873    }
16874
16875    /**
16876     * Checks if the given arguments are from an iteratee call.
16877     *
16878     * @private
16879     * @param {*} value The potential iteratee value argument.
16880     * @param {*} index The potential iteratee index or key argument.
16881     * @param {*} object The potential iteratee object argument.
16882     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,
16883     *  else `false`.
16884     */
16885    function isIterateeCall(value, index, object) {
16886      if (!isObject(object)) {
16887        return false;
16888      }
16889      var type = typeof index;
16890      if (type == 'number'
16891            ? (isArrayLike(object) && isIndex(index, object.length))
16892            : (type == 'string' && index in object)
16893          ) {
16894        return eq(object[index], value);
16895      }
16896      return false;
16897    }
16898
16899    /**
16900     * Checks if `value` is a property name and not a property path.
16901     *
16902     * @private
16903     * @param {*} value The value to check.
16904     * @param {Object} [object] The object to query keys on.
16905     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
16906     */
16907    function isKey(value, object) {
16908      if (isArray(value)) {
16909        return false;
16910      }
16911      var type = typeof value;
16912      if (type == 'number' || type == 'symbol' || type == 'boolean' ||
16913          value == null || isSymbol(value)) {
16914        return true;
16915      }
16916      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
16917        (object != null && value in Object(object));
16918    }
16919
16920    /**
16921     * Checks if `value` is suitable for use as unique object key.
16922     *
16923     * @private
16924     * @param {*} value The value to check.
16925     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
16926     */
16927    function isKeyable(value) {
16928      var type = typeof value;
16929      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
16930        ? (value !== '__proto__')
16931        : (value === null);
16932    }
16933
16934    /**
16935     * Checks if `func` has a lazy counterpart.
16936     *
16937     * @private
16938     * @param {Function} func The function to check.
16939     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,
16940     *  else `false`.
16941     */
16942    function isLaziable(func) {
16943      var funcName = getFuncName(func),
16944          other = lodash[funcName];
16945
16946      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {
16947        return false;
16948      }
16949      if (func === other) {
16950        return true;
16951      }
16952      var data = getData(other);
16953      return !!data && func === data[0];
16954    }
16955
16956    /**
16957     * Checks if `func` has its source masked.
16958     *
16959     * @private
16960     * @param {Function} func The function to check.
16961     * @returns {boolean} Returns `true` if `func` is masked, else `false`.
16962     */
16963    function isMasked(func) {
16964      return !!maskSrcKey && (maskSrcKey in func);
16965    }
16966
16967    /**
16968     * Checks if `func` is capable of being masked.
16969     *
16970     * @private
16971     * @param {*} value The value to check.
16972     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.
16973     */
16974    var isMaskable = coreJsData ? isFunction : stubFalse;
16975
16976    /**
16977     * Checks if `value` is likely a prototype object.
16978     *
16979     * @private
16980     * @param {*} value The value to check.
16981     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
16982     */
16983    function isPrototype(value) {
16984      var Ctor = value && value.constructor,
16985          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
16986
16987      return value === proto;
16988    }
16989
16990    /**
16991     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
16992     *
16993     * @private
16994     * @param {*} value The value to check.
16995     * @returns {boolean} Returns `true` if `value` if suitable for strict
16996     *  equality comparisons, else `false`.
16997     */
16998    function isStrictComparable(value) {
16999      return value === value && !isObject(value);
17000    }
17001
17002    /**
17003     * A specialized version of `matchesProperty` for source values suitable
17004     * for strict equality comparisons, i.e. `===`.
17005     *
17006     * @private
17007     * @param {string} key The key of the property to get.
17008     * @param {*} srcValue The value to match.
17009     * @returns {Function} Returns the new spec function.
17010     */
17011    function matchesStrictComparable(key, srcValue) {
17012      return function(object) {
17013        if (object == null) {
17014          return false;
17015        }
17016        return object[key] === srcValue &&
17017          (srcValue !== undefined || (key in Object(object)));
17018      };
17019    }
17020
17021    /**
17022     * A specialized version of `_.memoize` which clears the memoized function's
17023     * cache when it exceeds `MAX_MEMOIZE_SIZE`.
17024     *
17025     * @private
17026     * @param {Function} func The function to have its output memoized.
17027     * @returns {Function} Returns the new memoized function.
17028     */
17029    function memoizeCapped(func) {
17030      var result = memoize(func, function(key) {
17031        if (cache.size === MAX_MEMOIZE_SIZE) {
17032          cache.clear();
17033        }
17034        return key;
17035      });
17036
17037      var cache = result.cache;
17038      return result;
17039    }
17040
17041    /**
17042     * Merges the function metadata of `source` into `data`.
17043     *
17044     * Merging metadata reduces the number of wrappers used to invoke a function.
17045     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`
17046     * may be applied regardless of execution order. Methods like `_.ary` and
17047     * `_.rearg` modify function arguments, making the order in which they are
17048     * executed important, preventing the merging of metadata. However, we make
17049     * an exception for a safe combined case where curried functions have `_.ary`
17050     * and or `_.rearg` applied.
17051     *
17052     * @private
17053     * @param {Array} data The destination metadata.
17054     * @param {Array} source The source metadata.
17055     * @returns {Array} Returns `data`.
17056     */
17057    function mergeData(data, source) {
17058      var bitmask = data[1],
17059          srcBitmask = source[1],
17060          newBitmask = bitmask | srcBitmask,
17061          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);
17062
17063      var isCombo =
17064        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||
17065        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||
17066        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));
17067
17068      // Exit early if metadata can't be merged.
17069      if (!(isCommon || isCombo)) {
17070        return data;
17071      }
17072      // Use source `thisArg` if available.
17073      if (srcBitmask & WRAP_BIND_FLAG) {
17074        data[2] = source[2];
17075        // Set when currying a bound function.
17076        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;
17077      }
17078      // Compose partial arguments.
17079      var value = source[3];
17080      if (value) {
17081        var partials = data[3];
17082        data[3] = partials ? composeArgs(partials, value, source[4]) : value;
17083        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];
17084      }
17085      // Compose partial right arguments.
17086      value = source[5];
17087      if (value) {
17088        partials = data[5];
17089        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;
17090        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];
17091      }
17092      // Use source `argPos` if available.
17093      value = source[7];
17094      if (value) {
17095        data[7] = value;
17096      }
17097      // Use source `ary` if it's smaller.
17098      if (srcBitmask & WRAP_ARY_FLAG) {
17099        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
17100      }
17101      // Use source `arity` if one is not provided.
17102      if (data[9] == null) {
17103        data[9] = source[9];
17104      }
17105      // Use source `func` and merge bitmasks.
17106      data[0] = source[0];
17107      data[1] = newBitmask;
17108
17109      return data;
17110    }
17111
17112    /**
17113     * This function is like
17114     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
17115     * except that it includes inherited enumerable properties.
17116     *
17117     * @private
17118     * @param {Object} object The object to query.
17119     * @returns {Array} Returns the array of property names.
17120     */
17121    function nativeKeysIn(object) {
17122      var result = [];
17123      if (object != null) {
17124        for (var key in Object(object)) {
17125          result.push(key);
17126        }
17127      }
17128      return result;
17129    }
17130
17131    /**
17132     * Converts `value` to a string using `Object.prototype.toString`.
17133     *
17134     * @private
17135     * @param {*} value The value to convert.
17136     * @returns {string} Returns the converted string.
17137     */
17138    function objectToString(value) {
17139      return nativeObjectToString.call(value);
17140    }
17141
17142    /**
17143     * A specialized version of `baseRest` which transforms the rest array.
17144     *
17145     * @private
17146     * @param {Function} func The function to apply a rest parameter to.
17147     * @param {number} [start=func.length-1] The start position of the rest parameter.
17148     * @param {Function} transform The rest array transform.
17149     * @returns {Function} Returns the new function.
17150     */
17151    function overRest(func, start, transform) {
17152      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
17153      return function() {
17154        var args = arguments,
17155            index = -1,
17156            length = nativeMax(args.length - start, 0),
17157            array = Array(length);
17158
17159        while (++index < length) {
17160          array[index] = args[start + index];
17161        }
17162        index = -1;
17163        var otherArgs = Array(start + 1);
17164        while (++index < start) {
17165          otherArgs[index] = args[index];
17166        }
17167        otherArgs[start] = transform(array);
17168        return apply(func, this, otherArgs);
17169      };
17170    }
17171
17172    /**
17173     * Gets the parent value at `path` of `object`.
17174     *
17175     * @private
17176     * @param {Object} object The object to query.
17177     * @param {Array} path The path to get the parent value of.
17178     * @returns {*} Returns the parent value.
17179     */
17180    function parent(object, path) {
17181      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));
17182    }
17183
17184    /**
17185     * Reorder `array` according to the specified indexes where the element at
17186     * the first index is assigned as the first element, the element at
17187     * the second index is assigned as the second element, and so on.
17188     *
17189     * @private
17190     * @param {Array} array The array to reorder.
17191     * @param {Array} indexes The arranged array indexes.
17192     * @returns {Array} Returns `array`.
17193     */
17194    function reorder(array, indexes) {
17195      var arrLength = array.length,
17196          length = nativeMin(indexes.length, arrLength),
17197          oldArray = copyArray(array);
17198
17199      while (length--) {
17200        var index = indexes[length];
17201        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;
17202      }
17203      return array;
17204    }
17205
17206    /**
17207     * Gets the value at `key`, unless `key` is "__proto__" or "constructor".
17208     *
17209     * @private
17210     * @param {Object} object The object to query.
17211     * @param {string} key The key of the property to get.
17212     * @returns {*} Returns the property value.
17213     */
17214    function safeGet(object, key) {
17215      if (key === 'constructor' && typeof object[key] === 'function') {
17216        return;
17217      }
17218
17219      if (key == '__proto__') {
17220        return;
17221      }
17222
17223      return object[key];
17224    }
17225
17226    /**
17227     * Sets metadata for `func`.
17228     *
17229     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short
17230     * period of time, it will trip its breaker and transition to an identity
17231     * function to avoid garbage collection pauses in V8. See
17232     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)
17233     * for more details.
17234     *
17235     * @private
17236     * @param {Function} func The function to associate metadata with.
17237     * @param {*} data The metadata.
17238     * @returns {Function} Returns `func`.
17239     */
17240    var setData = shortOut(baseSetData);
17241
17242    /**
17243     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).
17244     *
17245     * @private
17246     * @param {Function} func The function to delay.
17247     * @param {number} wait The number of milliseconds to delay invocation.
17248     * @returns {number|Object} Returns the timer id or timeout object.
17249     */
17250    var setTimeout = ctxSetTimeout || function(func, wait) {
17251      return root.setTimeout(func, wait);
17252    };
17253
17254    /**
17255     * Sets the `toString` method of `func` to return `string`.
17256     *
17257     * @private
17258     * @param {Function} func The function to modify.
17259     * @param {Function} string The `toString` result.
17260     * @returns {Function} Returns `func`.
17261     */
17262    var setToString = shortOut(baseSetToString);
17263
17264    /**
17265     * Sets the `toString` method of `wrapper` to mimic the source of `reference`
17266     * with wrapper details in a comment at the top of the source body.
17267     *
17268     * @private
17269     * @param {Function} wrapper The function to modify.
17270     * @param {Function} reference The reference function.
17271     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
17272     * @returns {Function} Returns `wrapper`.
17273     */
17274    function setWrapToString(wrapper, reference, bitmask) {
17275      var source = (reference + '');
17276      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));
17277    }
17278
17279    /**
17280     * Creates a function that'll short out and invoke `identity` instead
17281     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`
17282     * milliseconds.
17283     *
17284     * @private
17285     * @param {Function} func The function to restrict.
17286     * @returns {Function} Returns the new shortable function.
17287     */
17288    function shortOut(func) {
17289      var count = 0,
17290          lastCalled = 0;
17291
17292      return function() {
17293        var stamp = nativeNow(),
17294            remaining = HOT_SPAN - (stamp - lastCalled);
17295
17296        lastCalled = stamp;
17297        if (remaining > 0) {
17298          if (++count >= HOT_COUNT) {
17299            return arguments[0];
17300          }
17301        } else {
17302          count = 0;
17303        }
17304        return func.apply(undefined, arguments);
17305      };
17306    }
17307
17308    /**
17309     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.
17310     *
17311     * @private
17312     * @param {Array} array The array to shuffle.
17313     * @param {number} [size=array.length] The size of `array`.
17314     * @returns {Array} Returns `array`.
17315     */
17316    function shuffleSelf(array, size) {
17317      var index = -1,
17318          length = array.length,
17319          lastIndex = length - 1;
17320
17321      size = size === undefined ? length : size;
17322      while (++index < size) {
17323        var rand = baseRandom(index, lastIndex),
17324            value = array[rand];
17325
17326        array[rand] = array[index];
17327        array[index] = value;
17328      }
17329      array.length = size;
17330      return array;
17331    }
17332
17333    /**
17334     * Converts `string` to a property path array.
17335     *
17336     * @private
17337     * @param {string} string The string to convert.
17338     * @returns {Array} Returns the property path array.
17339     */
17340    var stringToPath = memoizeCapped(function(string) {
17341      var result = [];
17342      if (string.charCodeAt(0) === 46 /* . */) {
17343        result.push('');
17344      }
17345      string.replace(rePropName, function(match, number, quote, subString) {
17346        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));
17347      });
17348      return result;
17349    });
17350
17351    /**
17352     * Converts `value` to a string key if it's not a string or symbol.
17353     *
17354     * @private
17355     * @param {*} value The value to inspect.
17356     * @returns {string|symbol} Returns the key.
17357     */
17358    function toKey(value) {
17359      if (typeof value == 'string' || isSymbol(value)) {
17360        return value;
17361      }
17362      var result = (value + '');
17363      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
17364    }
17365
17366    /**
17367     * Converts `func` to its source code.
17368     *
17369     * @private
17370     * @param {Function} func The function to convert.
17371     * @returns {string} Returns the source code.
17372     */
17373    function toSource(func) {
17374      if (func != null) {
17375        try {
17376          return funcToString.call(func);
17377        } catch (e) {}
17378        try {
17379          return (func + '');
17380        } catch (e) {}
17381      }
17382      return '';
17383    }
17384
17385    /**
17386     * Updates wrapper `details` based on `bitmask` flags.
17387     *
17388     * @private
17389     * @returns {Array} details The details to modify.
17390     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
17391     * @returns {Array} Returns `details`.
17392     */
17393    function updateWrapDetails(details, bitmask) {
17394      arrayEach(wrapFlags, function(pair) {
17395        var value = '_.' + pair[0];
17396        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {
17397          details.push(value);
17398        }
17399      });
17400      return details.sort();
17401    }
17402
17403    /**
17404     * Creates a clone of `wrapper`.
17405     *
17406     * @private
17407     * @param {Object} wrapper The wrapper to clone.
17408     * @returns {Object} Returns the cloned wrapper.
17409     */
17410    function wrapperClone(wrapper) {
17411      if (wrapper instanceof LazyWrapper) {
17412        return wrapper.clone();
17413      }
17414      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);
17415      result.__actions__ = copyArray(wrapper.__actions__);
17416      result.__index__  = wrapper.__index__;
17417      result.__values__ = wrapper.__values__;
17418      return result;
17419    }
17420
17421    /*------------------------------------------------------------------------*/
17422
17423    /**
17424     * Creates an array of elements split into groups the length of `size`.
17425     * If `array` can't be split evenly, the final chunk will be the remaining
17426     * elements.
17427     *
17428     * @static
17429     * @memberOf _
17430     * @since 3.0.0
17431     * @category Array
17432     * @param {Array} array The array to process.
17433     * @param {number} [size=1] The length of each chunk
17434     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
17435     * @returns {Array} Returns the new array of chunks.
17436     * @example
17437     *
17438     * _.chunk(['a', 'b', 'c', 'd'], 2);
17439     * // => [['a', 'b'], ['c', 'd']]
17440     *
17441     * _.chunk(['a', 'b', 'c', 'd'], 3);
17442     * // => [['a', 'b', 'c'], ['d']]
17443     */
17444    function chunk(array, size, guard) {
17445      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {
17446        size = 1;
17447      } else {
17448        size = nativeMax(toInteger(size), 0);
17449      }
17450      var length = array == null ? 0 : array.length;
17451      if (!length || size < 1) {
17452        return [];
17453      }
17454      var index = 0,
17455          resIndex = 0,
17456          result = Array(nativeCeil(length / size));
17457
17458      while (index < length) {
17459        result[resIndex++] = baseSlice(array, index, (index += size));
17460      }
17461      return result;
17462    }
17463
17464    /**
17465     * Creates an array with all falsey values removed. The values `false`, `null`,
17466     * `0`, `""`, `undefined`, and `NaN` are falsey.
17467     *
17468     * @static
17469     * @memberOf _
17470     * @since 0.1.0
17471     * @category Array
17472     * @param {Array} array The array to compact.
17473     * @returns {Array} Returns the new array of filtered values.
17474     * @example
17475     *
17476     * _.compact([0, 1, false, 2, '', 3]);
17477     * // => [1, 2, 3]
17478     */
17479    function compact(array) {
17480      var index = -1,
17481          length = array == null ? 0 : array.length,
17482          resIndex = 0,
17483          result = [];
17484
17485      while (++index < length) {
17486        var value = array[index];
17487        if (value) {
17488          result[resIndex++] = value;
17489        }
17490      }
17491      return result;
17492    }
17493
17494    /**
17495     * Creates a new array concatenating `array` with any additional arrays
17496     * and/or values.
17497     *
17498     * @static
17499     * @memberOf _
17500     * @since 4.0.0
17501     * @category Array
17502     * @param {Array} array The array to concatenate.
17503     * @param {...*} [values] The values to concatenate.
17504     * @returns {Array} Returns the new concatenated array.
17505     * @example
17506     *
17507     * var array = [1];
17508     * var other = _.concat(array, 2, [3], [[4]]);
17509     *
17510     * console.log(other);
17511     * // => [1, 2, 3, [4]]
17512     *
17513     * console.log(array);
17514     * // => [1]
17515     */
17516    function concat() {
17517      var length = arguments.length;
17518      if (!length) {
17519        return [];
17520      }
17521      var args = Array(length - 1),
17522          array = arguments[0],
17523          index = length;
17524
17525      while (index--) {
17526        args[index - 1] = arguments[index];
17527      }
17528      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));
17529    }
17530
17531    /**
17532     * Creates an array of `array` values not included in the other given arrays
17533     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
17534     * for equality comparisons. The order and references of result values are
17535     * determined by the first array.
17536     *
17537     * **Note:** Unlike `_.pullAll`, this method returns a new array.
17538     *
17539     * @static
17540     * @memberOf _
17541     * @since 0.1.0
17542     * @category Array
17543     * @param {Array} array The array to inspect.
17544     * @param {...Array} [values] The values to exclude.
17545     * @returns {Array} Returns the new array of filtered values.
17546     * @see _.without, _.xor
17547     * @example
17548     *
17549     * _.difference([2, 1], [2, 3]);
17550     * // => [1]
17551     */
17552    var difference = baseRest(function(array, values) {
17553      return isArrayLikeObject(array)
17554        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))
17555        : [];
17556    });
17557
17558    /**
17559     * This method is like `_.difference` except that it accepts `iteratee` which
17560     * is invoked for each element of `array` and `values` to generate the criterion
17561     * by which they're compared. The order and references of result values are
17562     * determined by the first array. The iteratee is invoked with one argument:
17563     * (value).
17564     *
17565     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.
17566     *
17567     * @static
17568     * @memberOf _
17569     * @since 4.0.0
17570     * @category Array
17571     * @param {Array} array The array to inspect.
17572     * @param {...Array} [values] The values to exclude.
17573     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
17574     * @returns {Array} Returns the new array of filtered values.
17575     * @example
17576     *
17577     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);
17578     * // => [1.2]
17579     *
17580     * // The `_.property` iteratee shorthand.
17581     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');
17582     * // => [{ 'x': 2 }]
17583     */
17584    var differenceBy = baseRest(function(array, values) {
17585      var iteratee = last(values);
17586      if (isArrayLikeObject(iteratee)) {
17587        iteratee = undefined;
17588      }
17589      return isArrayLikeObject(array)
17590        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))
17591        : [];
17592    });
17593
17594    /**
17595     * This method is like `_.difference` except that it accepts `comparator`
17596     * which is invoked to compare elements of `array` to `values`. The order and
17597     * references of result values are determined by the first array. The comparator
17598     * is invoked with two arguments: (arrVal, othVal).
17599     *
17600     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.
17601     *
17602     * @static
17603     * @memberOf _
17604     * @since 4.0.0
17605     * @category Array
17606     * @param {Array} array The array to inspect.
17607     * @param {...Array} [values] The values to exclude.
17608     * @param {Function} [comparator] The comparator invoked per element.
17609     * @returns {Array} Returns the new array of filtered values.
17610     * @example
17611     *
17612     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
17613     *
17614     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);
17615     * // => [{ 'x': 2, 'y': 1 }]
17616     */
17617    var differenceWith = baseRest(function(array, values) {
17618      var comparator = last(values);
17619      if (isArrayLikeObject(comparator)) {
17620        comparator = undefined;
17621      }
17622      return isArrayLikeObject(array)
17623        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)
17624        : [];
17625    });
17626
17627    /**
17628     * Creates a slice of `array` with `n` elements dropped from the beginning.
17629     *
17630     * @static
17631     * @memberOf _
17632     * @since 0.5.0
17633     * @category Array
17634     * @param {Array} array The array to query.
17635     * @param {number} [n=1] The number of elements to drop.
17636     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
17637     * @returns {Array} Returns the slice of `array`.
17638     * @example
17639     *
17640     * _.drop([1, 2, 3]);
17641     * // => [2, 3]
17642     *
17643     * _.drop([1, 2, 3], 2);
17644     * // => [3]
17645     *
17646     * _.drop([1, 2, 3], 5);
17647     * // => []
17648     *
17649     * _.drop([1, 2, 3], 0);
17650     * // => [1, 2, 3]
17651     */
17652    function drop(array, n, guard) {
17653      var length = array == null ? 0 : array.length;
17654      if (!length) {
17655        return [];
17656      }
17657      n = (guard || n === undefined) ? 1 : toInteger(n);
17658      return baseSlice(array, n < 0 ? 0 : n, length);
17659    }
17660
17661    /**
17662     * Creates a slice of `array` with `n` elements dropped from the end.
17663     *
17664     * @static
17665     * @memberOf _
17666     * @since 3.0.0
17667     * @category Array
17668     * @param {Array} array The array to query.
17669     * @param {number} [n=1] The number of elements to drop.
17670     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
17671     * @returns {Array} Returns the slice of `array`.
17672     * @example
17673     *
17674     * _.dropRight([1, 2, 3]);
17675     * // => [1, 2]
17676     *
17677     * _.dropRight([1, 2, 3], 2);
17678     * // => [1]
17679     *
17680     * _.dropRight([1, 2, 3], 5);
17681     * // => []
17682     *
17683     * _.dropRight([1, 2, 3], 0);
17684     * // => [1, 2, 3]
17685     */
17686    function dropRight(array, n, guard) {
17687      var length = array == null ? 0 : array.length;
17688      if (!length) {
17689        return [];
17690      }
17691      n = (guard || n === undefined) ? 1 : toInteger(n);
17692      n = length - n;
17693      return baseSlice(array, 0, n < 0 ? 0 : n);
17694    }
17695
17696    /**
17697     * Creates a slice of `array` excluding elements dropped from the end.
17698     * Elements are dropped until `predicate` returns falsey. The predicate is
17699     * invoked with three arguments: (value, index, array).
17700     *
17701     * @static
17702     * @memberOf _
17703     * @since 3.0.0
17704     * @category Array
17705     * @param {Array} array The array to query.
17706     * @param {Function} [predicate=_.identity] The function invoked per iteration.
17707     * @returns {Array} Returns the slice of `array`.
17708     * @example
17709     *
17710     * var users = [
17711     *   { 'user': 'barney',  'active': true },
17712     *   { 'user': 'fred',    'active': false },
17713     *   { 'user': 'pebbles', 'active': false }
17714     * ];
17715     *
17716     * _.dropRightWhile(users, function(o) { return !o.active; });
17717     * // => objects for ['barney']
17718     *
17719     * // The `_.matches` iteratee shorthand.
17720     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });
17721     * // => objects for ['barney', 'fred']
17722     *
17723     * // The `_.matchesProperty` iteratee shorthand.
17724     * _.dropRightWhile(users, ['active', false]);
17725     * // => objects for ['barney']
17726     *
17727     * // The `_.property` iteratee shorthand.
17728     * _.dropRightWhile(users, 'active');
17729     * // => objects for ['barney', 'fred', 'pebbles']
17730     */
17731    function dropRightWhile(array, predicate) {
17732      return (array && array.length)
17733        ? baseWhile(array, getIteratee(predicate, 3), true, true)
17734        : [];
17735    }
17736
17737    /**
17738     * Creates a slice of `array` excluding elements dropped from the beginning.
17739     * Elements are dropped until `predicate` returns falsey. The predicate is
17740     * invoked with three arguments: (value, index, array).
17741     *
17742     * @static
17743     * @memberOf _
17744     * @since 3.0.0
17745     * @category Array
17746     * @param {Array} array The array to query.
17747     * @param {Function} [predicate=_.identity] The function invoked per iteration.
17748     * @returns {Array} Returns the slice of `array`.
17749     * @example
17750     *
17751     * var users = [
17752     *   { 'user': 'barney',  'active': false },
17753     *   { 'user': 'fred',    'active': false },
17754     *   { 'user': 'pebbles', 'active': true }
17755     * ];
17756     *
17757     * _.dropWhile(users, function(o) { return !o.active; });
17758     * // => objects for ['pebbles']
17759     *
17760     * // The `_.matches` iteratee shorthand.
17761     * _.dropWhile(users, { 'user': 'barney', 'active': false });
17762     * // => objects for ['fred', 'pebbles']
17763     *
17764     * // The `_.matchesProperty` iteratee shorthand.
17765     * _.dropWhile(users, ['active', false]);
17766     * // => objects for ['pebbles']
17767     *
17768     * // The `_.property` iteratee shorthand.
17769     * _.dropWhile(users, 'active');
17770     * // => objects for ['barney', 'fred', 'pebbles']
17771     */
17772    function dropWhile(array, predicate) {
17773      return (array && array.length)
17774        ? baseWhile(array, getIteratee(predicate, 3), true)
17775        : [];
17776    }
17777
17778    /**
17779     * Fills elements of `array` with `value` from `start` up to, but not
17780     * including, `end`.
17781     *
17782     * **Note:** This method mutates `array`.
17783     *
17784     * @static
17785     * @memberOf _
17786     * @since 3.2.0
17787     * @category Array
17788     * @param {Array} array The array to fill.
17789     * @param {*} value The value to fill `array` with.
17790     * @param {number} [start=0] The start position.
17791     * @param {number} [end=array.length] The end position.
17792     * @returns {Array} Returns `array`.
17793     * @example
17794     *
17795     * var array = [1, 2, 3];
17796     *
17797     * _.fill(array, 'a');
17798     * console.log(array);
17799     * // => ['a', 'a', 'a']
17800     *
17801     * _.fill(Array(3), 2);
17802     * // => [2, 2, 2]
17803     *
17804     * _.fill([4, 6, 8, 10], '*', 1, 3);
17805     * // => [4, '*', '*', 10]
17806     */
17807    function fill(array, value, start, end) {
17808      var length = array == null ? 0 : array.length;
17809      if (!length) {
17810        return [];
17811      }
17812      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {
17813        start = 0;
17814        end = length;
17815      }
17816      return baseFill(array, value, start, end);
17817    }
17818
17819    /**
17820     * This method is like `_.find` except that it returns the index of the first
17821     * element `predicate` returns truthy for instead of the element itself.
17822     *
17823     * @static
17824     * @memberOf _
17825     * @since 1.1.0
17826     * @category Array
17827     * @param {Array} array The array to inspect.
17828     * @param {Function} [predicate=_.identity] The function invoked per iteration.
17829     * @param {number} [fromIndex=0] The index to search from.
17830     * @returns {number} Returns the index of the found element, else `-1`.
17831     * @example
17832     *
17833     * var users = [
17834     *   { 'user': 'barney',  'active': false },
17835     *   { 'user': 'fred',    'active': false },
17836     *   { 'user': 'pebbles', 'active': true }
17837     * ];
17838     *
17839     * _.findIndex(users, function(o) { return o.user == 'barney'; });
17840     * // => 0
17841     *
17842     * // The `_.matches` iteratee shorthand.
17843     * _.findIndex(users, { 'user': 'fred', 'active': false });
17844     * // => 1
17845     *
17846     * // The `_.matchesProperty` iteratee shorthand.
17847     * _.findIndex(users, ['active', false]);
17848     * // => 0
17849     *
17850     * // The `_.property` iteratee shorthand.
17851     * _.findIndex(users, 'active');
17852     * // => 2
17853     */
17854    function findIndex(array, predicate, fromIndex) {
17855      var length = array == null ? 0 : array.length;
17856      if (!length) {
17857        return -1;
17858      }
17859      var index = fromIndex == null ? 0 : toInteger(fromIndex);
17860      if (index < 0) {
17861        index = nativeMax(length + index, 0);
17862      }
17863      return baseFindIndex(array, getIteratee(predicate, 3), index);
17864    }
17865
17866    /**
17867     * This method is like `_.findIndex` except that it iterates over elements
17868     * of `collection` from right to left.
17869     *
17870     * @static
17871     * @memberOf _
17872     * @since 2.0.0
17873     * @category Array
17874     * @param {Array} array The array to inspect.
17875     * @param {Function} [predicate=_.identity] The function invoked per iteration.
17876     * @param {number} [fromIndex=array.length-1] The index to search from.
17877     * @returns {number} Returns the index of the found element, else `-1`.
17878     * @example
17879     *
17880     * var users = [
17881     *   { 'user': 'barney',  'active': true },
17882     *   { 'user': 'fred',    'active': false },
17883     *   { 'user': 'pebbles', 'active': false }
17884     * ];
17885     *
17886     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });
17887     * // => 2
17888     *
17889     * // The `_.matches` iteratee shorthand.
17890     * _.findLastIndex(users, { 'user': 'barney', 'active': true });
17891     * // => 0
17892     *
17893     * // The `_.matchesProperty` iteratee shorthand.
17894     * _.findLastIndex(users, ['active', false]);
17895     * // => 2
17896     *
17897     * // The `_.property` iteratee shorthand.
17898     * _.findLastIndex(users, 'active');
17899     * // => 0
17900     */
17901    function findLastIndex(array, predicate, fromIndex) {
17902      var length = array == null ? 0 : array.length;
17903      if (!length) {
17904        return -1;
17905      }
17906      var index = length - 1;
17907      if (fromIndex !== undefined) {
17908        index = toInteger(fromIndex);
17909        index = fromIndex < 0
17910          ? nativeMax(length + index, 0)
17911          : nativeMin(index, length - 1);
17912      }
17913      return baseFindIndex(array, getIteratee(predicate, 3), index, true);
17914    }
17915
17916    /**
17917     * Flattens `array` a single level deep.
17918     *
17919     * @static
17920     * @memberOf _
17921     * @since 0.1.0
17922     * @category Array
17923     * @param {Array} array The array to flatten.
17924     * @returns {Array} Returns the new flattened array.
17925     * @example
17926     *
17927     * _.flatten([1, [2, [3, [4]], 5]]);
17928     * // => [1, 2, [3, [4]], 5]
17929     */
17930    function flatten(array) {
17931      var length = array == null ? 0 : array.length;
17932      return length ? baseFlatten(array, 1) : [];
17933    }
17934
17935    /**
17936     * Recursively flattens `array`.
17937     *
17938     * @static
17939     * @memberOf _
17940     * @since 3.0.0
17941     * @category Array
17942     * @param {Array} array The array to flatten.
17943     * @returns {Array} Returns the new flattened array.
17944     * @example
17945     *
17946     * _.flattenDeep([1, [2, [3, [4]], 5]]);
17947     * // => [1, 2, 3, 4, 5]
17948     */
17949    function flattenDeep(array) {
17950      var length = array == null ? 0 : array.length;
17951      return length ? baseFlatten(array, INFINITY) : [];
17952    }
17953
17954    /**
17955     * Recursively flatten `array` up to `depth` times.
17956     *
17957     * @static
17958     * @memberOf _
17959     * @since 4.4.0
17960     * @category Array
17961     * @param {Array} array The array to flatten.
17962     * @param {number} [depth=1] The maximum recursion depth.
17963     * @returns {Array} Returns the new flattened array.
17964     * @example
17965     *
17966     * var array = [1, [2, [3, [4]], 5]];
17967     *
17968     * _.flattenDepth(array, 1);
17969     * // => [1, 2, [3, [4]], 5]
17970     *
17971     * _.flattenDepth(array, 2);
17972     * // => [1, 2, 3, [4], 5]
17973     */
17974    function flattenDepth(array, depth) {
17975      var length = array == null ? 0 : array.length;
17976      if (!length) {
17977        return [];
17978      }
17979      depth = depth === undefined ? 1 : toInteger(depth);
17980      return baseFlatten(array, depth);
17981    }
17982
17983    /**
17984     * The inverse of `_.toPairs`; this method returns an object composed
17985     * from key-value `pairs`.
17986     *
17987     * @static
17988     * @memberOf _
17989     * @since 4.0.0
17990     * @category Array
17991     * @param {Array} pairs The key-value pairs.
17992     * @returns {Object} Returns the new object.
17993     * @example
17994     *
17995     * _.fromPairs([['a', 1], ['b', 2]]);
17996     * // => { 'a': 1, 'b': 2 }
17997     */
17998    function fromPairs(pairs) {
17999      var index = -1,
18000          length = pairs == null ? 0 : pairs.length,
18001          result = {};
18002
18003      while (++index < length) {
18004        var pair = pairs[index];
18005        result[pair[0]] = pair[1];
18006      }
18007      return result;
18008    }
18009
18010    /**
18011     * Gets the first element of `array`.
18012     *
18013     * @static
18014     * @memberOf _
18015     * @since 0.1.0
18016     * @alias first
18017     * @category Array
18018     * @param {Array} array The array to query.
18019     * @returns {*} Returns the first element of `array`.
18020     * @example
18021     *
18022     * _.head([1, 2, 3]);
18023     * // => 1
18024     *
18025     * _.head([]);
18026     * // => undefined
18027     */
18028    function head(array) {
18029      return (array && array.length) ? array[0] : undefined;
18030    }
18031
18032    /**
18033     * Gets the index at which the first occurrence of `value` is found in `array`
18034     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
18035     * for equality comparisons. If `fromIndex` is negative, it's used as the
18036     * offset from the end of `array`.
18037     *
18038     * @static
18039     * @memberOf _
18040     * @since 0.1.0
18041     * @category Array
18042     * @param {Array} array The array to inspect.
18043     * @param {*} value The value to search for.
18044     * @param {number} [fromIndex=0] The index to search from.
18045     * @returns {number} Returns the index of the matched value, else `-1`.
18046     * @example
18047     *
18048     * _.indexOf([1, 2, 1, 2], 2);
18049     * // => 1
18050     *
18051     * // Search from the `fromIndex`.
18052     * _.indexOf([1, 2, 1, 2], 2, 2);
18053     * // => 3
18054     */
18055    function indexOf(array, value, fromIndex) {
18056      var length = array == null ? 0 : array.length;
18057      if (!length) {
18058        return -1;
18059      }
18060      var index = fromIndex == null ? 0 : toInteger(fromIndex);
18061      if (index < 0) {
18062        index = nativeMax(length + index, 0);
18063      }
18064      return baseIndexOf(array, value, index);
18065    }
18066
18067    /**
18068     * Gets all but the last element of `array`.
18069     *
18070     * @static
18071     * @memberOf _
18072     * @since 0.1.0
18073     * @category Array
18074     * @param {Array} array The array to query.
18075     * @returns {Array} Returns the slice of `array`.
18076     * @example
18077     *
18078     * _.initial([1, 2, 3]);
18079     * // => [1, 2]
18080     */
18081    function initial(array) {
18082      var length = array == null ? 0 : array.length;
18083      return length ? baseSlice(array, 0, -1) : [];
18084    }
18085
18086    /**
18087     * Creates an array of unique values that are included in all given arrays
18088     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
18089     * for equality comparisons. The order and references of result values are
18090     * determined by the first array.
18091     *
18092     * @static
18093     * @memberOf _
18094     * @since 0.1.0
18095     * @category Array
18096     * @param {...Array} [arrays] The arrays to inspect.
18097     * @returns {Array} Returns the new array of intersecting values.
18098     * @example
18099     *
18100     * _.intersection([2, 1], [2, 3]);
18101     * // => [2]
18102     */
18103    var intersection = baseRest(function(arrays) {
18104      var mapped = arrayMap(arrays, castArrayLikeObject);
18105      return (mapped.length && mapped[0] === arrays[0])
18106        ? baseIntersection(mapped)
18107        : [];
18108    });
18109
18110    /**
18111     * This method is like `_.intersection` except that it accepts `iteratee`
18112     * which is invoked for each element of each `arrays` to generate the criterion
18113     * by which they're compared. The order and references of result values are
18114     * determined by the first array. The iteratee is invoked with one argument:
18115     * (value).
18116     *
18117     * @static
18118     * @memberOf _
18119     * @since 4.0.0
18120     * @category Array
18121     * @param {...Array} [arrays] The arrays to inspect.
18122     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
18123     * @returns {Array} Returns the new array of intersecting values.
18124     * @example
18125     *
18126     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);
18127     * // => [2.1]
18128     *
18129     * // The `_.property` iteratee shorthand.
18130     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
18131     * // => [{ 'x': 1 }]
18132     */
18133    var intersectionBy = baseRest(function(arrays) {
18134      var iteratee = last(arrays),
18135          mapped = arrayMap(arrays, castArrayLikeObject);
18136
18137      if (iteratee === last(mapped)) {
18138        iteratee = undefined;
18139      } else {
18140        mapped.pop();
18141      }
18142      return (mapped.length && mapped[0] === arrays[0])
18143        ? baseIntersection(mapped, getIteratee(iteratee, 2))
18144        : [];
18145    });
18146
18147    /**
18148     * This method is like `_.intersection` except that it accepts `comparator`
18149     * which is invoked to compare elements of `arrays`. The order and references
18150     * of result values are determined by the first array. The comparator is
18151     * invoked with two arguments: (arrVal, othVal).
18152     *
18153     * @static
18154     * @memberOf _
18155     * @since 4.0.0
18156     * @category Array
18157     * @param {...Array} [arrays] The arrays to inspect.
18158     * @param {Function} [comparator] The comparator invoked per element.
18159     * @returns {Array} Returns the new array of intersecting values.
18160     * @example
18161     *
18162     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
18163     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
18164     *
18165     * _.intersectionWith(objects, others, _.isEqual);
18166     * // => [{ 'x': 1, 'y': 2 }]
18167     */
18168    var intersectionWith = baseRest(function(arrays) {
18169      var comparator = last(arrays),
18170          mapped = arrayMap(arrays, castArrayLikeObject);
18171
18172      comparator = typeof comparator == 'function' ? comparator : undefined;
18173      if (comparator) {
18174        mapped.pop();
18175      }
18176      return (mapped.length && mapped[0] === arrays[0])
18177        ? baseIntersection(mapped, undefined, comparator)
18178        : [];
18179    });
18180
18181    /**
18182     * Converts all elements in `array` into a string separated by `separator`.
18183     *
18184     * @static
18185     * @memberOf _
18186     * @since 4.0.0
18187     * @category Array
18188     * @param {Array} array The array to convert.
18189     * @param {string} [separator=','] The element separator.
18190     * @returns {string} Returns the joined string.
18191     * @example
18192     *
18193     * _.join(['a', 'b', 'c'], '~');
18194     * // => 'a~b~c'
18195     */
18196    function join(array, separator) {
18197      return array == null ? '' : nativeJoin.call(array, separator);
18198    }
18199
18200    /**
18201     * Gets the last element of `array`.
18202     *
18203     * @static
18204     * @memberOf _
18205     * @since 0.1.0
18206     * @category Array
18207     * @param {Array} array The array to query.
18208     * @returns {*} Returns the last element of `array`.
18209     * @example
18210     *
18211     * _.last([1, 2, 3]);
18212     * // => 3
18213     */
18214    function last(array) {
18215      var length = array == null ? 0 : array.length;
18216      return length ? array[length - 1] : undefined;
18217    }
18218
18219    /**
18220     * This method is like `_.indexOf` except that it iterates over elements of
18221     * `array` from right to left.
18222     *
18223     * @static
18224     * @memberOf _
18225     * @since 0.1.0
18226     * @category Array
18227     * @param {Array} array The array to inspect.
18228     * @param {*} value The value to search for.
18229     * @param {number} [fromIndex=array.length-1] The index to search from.
18230     * @returns {number} Returns the index of the matched value, else `-1`.
18231     * @example
18232     *
18233     * _.lastIndexOf([1, 2, 1, 2], 2);
18234     * // => 3
18235     *
18236     * // Search from the `fromIndex`.
18237     * _.lastIndexOf([1, 2, 1, 2], 2, 2);
18238     * // => 1
18239     */
18240    function lastIndexOf(array, value, fromIndex) {
18241      var length = array == null ? 0 : array.length;
18242      if (!length) {
18243        return -1;
18244      }
18245      var index = length;
18246      if (fromIndex !== undefined) {
18247        index = toInteger(fromIndex);
18248        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);
18249      }
18250      return value === value
18251        ? strictLastIndexOf(array, value, index)
18252        : baseFindIndex(array, baseIsNaN, index, true);
18253    }
18254
18255    /**
18256     * Gets the element at index `n` of `array`. If `n` is negative, the nth
18257     * element from the end is returned.
18258     *
18259     * @static
18260     * @memberOf _
18261     * @since 4.11.0
18262     * @category Array
18263     * @param {Array} array The array to query.
18264     * @param {number} [n=0] The index of the element to return.
18265     * @returns {*} Returns the nth element of `array`.
18266     * @example
18267     *
18268     * var array = ['a', 'b', 'c', 'd'];
18269     *
18270     * _.nth(array, 1);
18271     * // => 'b'
18272     *
18273     * _.nth(array, -2);
18274     * // => 'c';
18275     */
18276    function nth(array, n) {
18277      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;
18278    }
18279
18280    /**
18281     * Removes all given values from `array` using
18282     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
18283     * for equality comparisons.
18284     *
18285     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`
18286     * to remove elements from an array by predicate.
18287     *
18288     * @static
18289     * @memberOf _
18290     * @since 2.0.0
18291     * @category Array
18292     * @param {Array} array The array to modify.
18293     * @param {...*} [values] The values to remove.
18294     * @returns {Array} Returns `array`.
18295     * @example
18296     *
18297     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
18298     *
18299     * _.pull(array, 'a', 'c');
18300     * console.log(array);
18301     * // => ['b', 'b']
18302     */
18303    var pull = baseRest(pullAll);
18304
18305    /**
18306     * This method is like `_.pull` except that it accepts an array of values to remove.
18307     *
18308     * **Note:** Unlike `_.difference`, this method mutates `array`.
18309     *
18310     * @static
18311     * @memberOf _
18312     * @since 4.0.0
18313     * @category Array
18314     * @param {Array} array The array to modify.
18315     * @param {Array} values The values to remove.
18316     * @returns {Array} Returns `array`.
18317     * @example
18318     *
18319     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
18320     *
18321     * _.pullAll(array, ['a', 'c']);
18322     * console.log(array);
18323     * // => ['b', 'b']
18324     */
18325    function pullAll(array, values) {
18326      return (array && array.length && values && values.length)
18327        ? basePullAll(array, values)
18328        : array;
18329    }
18330
18331    /**
18332     * This method is like `_.pullAll` except that it accepts `iteratee` which is
18333     * invoked for each element of `array` and `values` to generate the criterion
18334     * by which they're compared. The iteratee is invoked with one argument: (value).
18335     *
18336     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.
18337     *
18338     * @static
18339     * @memberOf _
18340     * @since 4.0.0
18341     * @category Array
18342     * @param {Array} array The array to modify.
18343     * @param {Array} values The values to remove.
18344     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
18345     * @returns {Array} Returns `array`.
18346     * @example
18347     *
18348     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];
18349     *
18350     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');
18351     * console.log(array);
18352     * // => [{ 'x': 2 }]
18353     */
18354    function pullAllBy(array, values, iteratee) {
18355      return (array && array.length && values && values.length)
18356        ? basePullAll(array, values, getIteratee(iteratee, 2))
18357        : array;
18358    }
18359
18360    /**
18361     * This method is like `_.pullAll` except that it accepts `comparator` which
18362     * is invoked to compare elements of `array` to `values`. The comparator is
18363     * invoked with two arguments: (arrVal, othVal).
18364     *
18365     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.
18366     *
18367     * @static
18368     * @memberOf _
18369     * @since 4.6.0
18370     * @category Array
18371     * @param {Array} array The array to modify.
18372     * @param {Array} values The values to remove.
18373     * @param {Function} [comparator] The comparator invoked per element.
18374     * @returns {Array} Returns `array`.
18375     * @example
18376     *
18377     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];
18378     *
18379     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);
18380     * console.log(array);
18381     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]
18382     */
18383    function pullAllWith(array, values, comparator) {
18384      return (array && array.length && values && values.length)
18385        ? basePullAll(array, values, undefined, comparator)
18386        : array;
18387    }
18388
18389    /**
18390     * Removes elements from `array` corresponding to `indexes` and returns an
18391     * array of removed elements.
18392     *
18393     * **Note:** Unlike `_.at`, this method mutates `array`.
18394     *
18395     * @static
18396     * @memberOf _
18397     * @since 3.0.0
18398     * @category Array
18399     * @param {Array} array The array to modify.
18400     * @param {...(number|number[])} [indexes] The indexes of elements to remove.
18401     * @returns {Array} Returns the new array of removed elements.
18402     * @example
18403     *
18404     * var array = ['a', 'b', 'c', 'd'];
18405     * var pulled = _.pullAt(array, [1, 3]);
18406     *
18407     * console.log(array);
18408     * // => ['a', 'c']
18409     *
18410     * console.log(pulled);
18411     * // => ['b', 'd']
18412     */
18413    var pullAt = flatRest(function(array, indexes) {
18414      var length = array == null ? 0 : array.length,
18415          result = baseAt(array, indexes);
18416
18417      basePullAt(array, arrayMap(indexes, function(index) {
18418        return isIndex(index, length) ? +index : index;
18419      }).sort(compareAscending));
18420
18421      return result;
18422    });
18423
18424    /**
18425     * Removes all elements from `array` that `predicate` returns truthy for
18426     * and returns an array of the removed elements. The predicate is invoked
18427     * with three arguments: (value, index, array).
18428     *
18429     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`
18430     * to pull elements from an array by value.
18431     *
18432     * @static
18433     * @memberOf _
18434     * @since 2.0.0
18435     * @category Array
18436     * @param {Array} array The array to modify.
18437     * @param {Function} [predicate=_.identity] The function invoked per iteration.
18438     * @returns {Array} Returns the new array of removed elements.
18439     * @example
18440     *
18441     * var array = [1, 2, 3, 4];
18442     * var evens = _.remove(array, function(n) {
18443     *   return n % 2 == 0;
18444     * });
18445     *
18446     * console.log(array);
18447     * // => [1, 3]
18448     *
18449     * console.log(evens);
18450     * // => [2, 4]
18451     */
18452    function remove(array, predicate) {
18453      var result = [];
18454      if (!(array && array.length)) {
18455        return result;
18456      }
18457      var index = -1,
18458          indexes = [],
18459          length = array.length;
18460
18461      predicate = getIteratee(predicate, 3);
18462      while (++index < length) {
18463        var value = array[index];
18464        if (predicate(value, index, array)) {
18465          result.push(value);
18466          indexes.push(index);
18467        }
18468      }
18469      basePullAt(array, indexes);
18470      return result;
18471    }
18472
18473    /**
18474     * Reverses `array` so that the first element becomes the last, the second
18475     * element becomes the second to last, and so on.
18476     *
18477     * **Note:** This method mutates `array` and is based on
18478     * [`Array#reverse`](https://mdn.io/Array/reverse).
18479     *
18480     * @static
18481     * @memberOf _
18482     * @since 4.0.0
18483     * @category Array
18484     * @param {Array} array The array to modify.
18485     * @returns {Array} Returns `array`.
18486     * @example
18487     *
18488     * var array = [1, 2, 3];
18489     *
18490     * _.reverse(array);
18491     * // => [3, 2, 1]
18492     *
18493     * console.log(array);
18494     * // => [3, 2, 1]
18495     */
18496    function reverse(array) {
18497      return array == null ? array : nativeReverse.call(array);
18498    }
18499
18500    /**
18501     * Creates a slice of `array` from `start` up to, but not including, `end`.
18502     *
18503     * **Note:** This method is used instead of
18504     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are
18505     * returned.
18506     *
18507     * @static
18508     * @memberOf _
18509     * @since 3.0.0
18510     * @category Array
18511     * @param {Array} array The array to slice.
18512     * @param {number} [start=0] The start position.
18513     * @param {number} [end=array.length] The end position.
18514     * @returns {Array} Returns the slice of `array`.
18515     */
18516    function slice(array, start, end) {
18517      var length = array == null ? 0 : array.length;
18518      if (!length) {
18519        return [];
18520      }
18521      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {
18522        start = 0;
18523        end = length;
18524      }
18525      else {
18526        start = start == null ? 0 : toInteger(start);
18527        end = end === undefined ? length : toInteger(end);
18528      }
18529      return baseSlice(array, start, end);
18530    }
18531
18532    /**
18533     * Uses a binary search to determine the lowest index at which `value`
18534     * should be inserted into `array` in order to maintain its sort order.
18535     *
18536     * @static
18537     * @memberOf _
18538     * @since 0.1.0
18539     * @category Array
18540     * @param {Array} array The sorted array to inspect.
18541     * @param {*} value The value to evaluate.
18542     * @returns {number} Returns the index at which `value` should be inserted
18543     *  into `array`.
18544     * @example
18545     *
18546     * _.sortedIndex([30, 50], 40);
18547     * // => 1
18548     */
18549    function sortedIndex(array, value) {
18550      return baseSortedIndex(array, value);
18551    }
18552
18553    /**
18554     * This method is like `_.sortedIndex` except that it accepts `iteratee`
18555     * which is invoked for `value` and each element of `array` to compute their
18556     * sort ranking. The iteratee is invoked with one argument: (value).
18557     *
18558     * @static
18559     * @memberOf _
18560     * @since 4.0.0
18561     * @category Array
18562     * @param {Array} array The sorted array to inspect.
18563     * @param {*} value The value to evaluate.
18564     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
18565     * @returns {number} Returns the index at which `value` should be inserted
18566     *  into `array`.
18567     * @example
18568     *
18569     * var objects = [{ 'x': 4 }, { 'x': 5 }];
18570     *
18571     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
18572     * // => 0
18573     *
18574     * // The `_.property` iteratee shorthand.
18575     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');
18576     * // => 0
18577     */
18578    function sortedIndexBy(array, value, iteratee) {
18579      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));
18580    }
18581
18582    /**
18583     * This method is like `_.indexOf` except that it performs a binary
18584     * search on a sorted `array`.
18585     *
18586     * @static
18587     * @memberOf _
18588     * @since 4.0.0
18589     * @category Array
18590     * @param {Array} array The array to inspect.
18591     * @param {*} value The value to search for.
18592     * @returns {number} Returns the index of the matched value, else `-1`.
18593     * @example
18594     *
18595     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);
18596     * // => 1
18597     */
18598    function sortedIndexOf(array, value) {
18599      var length = array == null ? 0 : array.length;
18600      if (length) {
18601        var index = baseSortedIndex(array, value);
18602        if (index < length && eq(array[index], value)) {
18603          return index;
18604        }
18605      }
18606      return -1;
18607    }
18608
18609    /**
18610     * This method is like `_.sortedIndex` except that it returns the highest
18611     * index at which `value` should be inserted into `array` in order to
18612     * maintain its sort order.
18613     *
18614     * @static
18615     * @memberOf _
18616     * @since 3.0.0
18617     * @category Array
18618     * @param {Array} array The sorted array to inspect.
18619     * @param {*} value The value to evaluate.
18620     * @returns {number} Returns the index at which `value` should be inserted
18621     *  into `array`.
18622     * @example
18623     *
18624     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);
18625     * // => 4
18626     */
18627    function sortedLastIndex(array, value) {
18628      return baseSortedIndex(array, value, true);
18629    }
18630
18631    /**
18632     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`
18633     * which is invoked for `value` and each element of `array` to compute their
18634     * sort ranking. The iteratee is invoked with one argument: (value).
18635     *
18636     * @static
18637     * @memberOf _
18638     * @since 4.0.0
18639     * @category Array
18640     * @param {Array} array The sorted array to inspect.
18641     * @param {*} value The value to evaluate.
18642     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
18643     * @returns {number} Returns the index at which `value` should be inserted
18644     *  into `array`.
18645     * @example
18646     *
18647     * var objects = [{ 'x': 4 }, { 'x': 5 }];
18648     *
18649     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
18650     * // => 1
18651     *
18652     * // The `_.property` iteratee shorthand.
18653     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');
18654     * // => 1
18655     */
18656    function sortedLastIndexBy(array, value, iteratee) {
18657      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);
18658    }
18659
18660    /**
18661     * This method is like `_.lastIndexOf` except that it performs a binary
18662     * search on a sorted `array`.
18663     *
18664     * @static
18665     * @memberOf _
18666     * @since 4.0.0
18667     * @category Array
18668     * @param {Array} array The array to inspect.
18669     * @param {*} value The value to search for.
18670     * @returns {number} Returns the index of the matched value, else `-1`.
18671     * @example
18672     *
18673     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);
18674     * // => 3
18675     */
18676    function sortedLastIndexOf(array, value) {
18677      var length = array == null ? 0 : array.length;
18678      if (length) {
18679        var index = baseSortedIndex(array, value, true) - 1;
18680        if (eq(array[index], value)) {
18681          return index;
18682        }
18683      }
18684      return -1;
18685    }
18686
18687    /**
18688     * This method is like `_.uniq` except that it's designed and optimized
18689     * for sorted arrays.
18690     *
18691     * @static
18692     * @memberOf _
18693     * @since 4.0.0
18694     * @category Array
18695     * @param {Array} array The array to inspect.
18696     * @returns {Array} Returns the new duplicate free array.
18697     * @example
18698     *
18699     * _.sortedUniq([1, 1, 2]);
18700     * // => [1, 2]
18701     */
18702    function sortedUniq(array) {
18703      return (array && array.length)
18704        ? baseSortedUniq(array)
18705        : [];
18706    }
18707
18708    /**
18709     * This method is like `_.uniqBy` except that it's designed and optimized
18710     * for sorted arrays.
18711     *
18712     * @static
18713     * @memberOf _
18714     * @since 4.0.0
18715     * @category Array
18716     * @param {Array} array The array to inspect.
18717     * @param {Function} [iteratee] The iteratee invoked per element.
18718     * @returns {Array} Returns the new duplicate free array.
18719     * @example
18720     *
18721     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);
18722     * // => [1.1, 2.3]
18723     */
18724    function sortedUniqBy(array, iteratee) {
18725      return (array && array.length)
18726        ? baseSortedUniq(array, getIteratee(iteratee, 2))
18727        : [];
18728    }
18729
18730    /**
18731     * Gets all but the first element of `array`.
18732     *
18733     * @static
18734     * @memberOf _
18735     * @since 4.0.0
18736     * @category Array
18737     * @param {Array} array The array to query.
18738     * @returns {Array} Returns the slice of `array`.
18739     * @example
18740     *
18741     * _.tail([1, 2, 3]);
18742     * // => [2, 3]
18743     */
18744    function tail(array) {
18745      var length = array == null ? 0 : array.length;
18746      return length ? baseSlice(array, 1, length) : [];
18747    }
18748
18749    /**
18750     * Creates a slice of `array` with `n` elements taken from the beginning.
18751     *
18752     * @static
18753     * @memberOf _
18754     * @since 0.1.0
18755     * @category Array
18756     * @param {Array} array The array to query.
18757     * @param {number} [n=1] The number of elements to take.
18758     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
18759     * @returns {Array} Returns the slice of `array`.
18760     * @example
18761     *
18762     * _.take([1, 2, 3]);
18763     * // => [1]
18764     *
18765     * _.take([1, 2, 3], 2);
18766     * // => [1, 2]
18767     *
18768     * _.take([1, 2, 3], 5);
18769     * // => [1, 2, 3]
18770     *
18771     * _.take([1, 2, 3], 0);
18772     * // => []
18773     */
18774    function take(array, n, guard) {
18775      if (!(array && array.length)) {
18776        return [];
18777      }
18778      n = (guard || n === undefined) ? 1 : toInteger(n);
18779      return baseSlice(array, 0, n < 0 ? 0 : n);
18780    }
18781
18782    /**
18783     * Creates a slice of `array` with `n` elements taken from the end.
18784     *
18785     * @static
18786     * @memberOf _
18787     * @since 3.0.0
18788     * @category Array
18789     * @param {Array} array The array to query.
18790     * @param {number} [n=1] The number of elements to take.
18791     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
18792     * @returns {Array} Returns the slice of `array`.
18793     * @example
18794     *
18795     * _.takeRight([1, 2, 3]);
18796     * // => [3]
18797     *
18798     * _.takeRight([1, 2, 3], 2);
18799     * // => [2, 3]
18800     *
18801     * _.takeRight([1, 2, 3], 5);
18802     * // => [1, 2, 3]
18803     *
18804     * _.takeRight([1, 2, 3], 0);
18805     * // => []
18806     */
18807    function takeRight(array, n, guard) {
18808      var length = array == null ? 0 : array.length;
18809      if (!length) {
18810        return [];
18811      }
18812      n = (guard || n === undefined) ? 1 : toInteger(n);
18813      n = length - n;
18814      return baseSlice(array, n < 0 ? 0 : n, length);
18815    }
18816
18817    /**
18818     * Creates a slice of `array` with elements taken from the end. Elements are
18819     * taken until `predicate` returns falsey. The predicate is invoked with
18820     * three arguments: (value, index, array).
18821     *
18822     * @static
18823     * @memberOf _
18824     * @since 3.0.0
18825     * @category Array
18826     * @param {Array} array The array to query.
18827     * @param {Function} [predicate=_.identity] The function invoked per iteration.
18828     * @returns {Array} Returns the slice of `array`.
18829     * @example
18830     *
18831     * var users = [
18832     *   { 'user': 'barney',  'active': true },
18833     *   { 'user': 'fred',    'active': false },
18834     *   { 'user': 'pebbles', 'active': false }
18835     * ];
18836     *
18837     * _.takeRightWhile(users, function(o) { return !o.active; });
18838     * // => objects for ['fred', 'pebbles']
18839     *
18840     * // The `_.matches` iteratee shorthand.
18841     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });
18842     * // => objects for ['pebbles']
18843     *
18844     * // The `_.matchesProperty` iteratee shorthand.
18845     * _.takeRightWhile(users, ['active', false]);
18846     * // => objects for ['fred', 'pebbles']
18847     *
18848     * // The `_.property` iteratee shorthand.
18849     * _.takeRightWhile(users, 'active');
18850     * // => []
18851     */
18852    function takeRightWhile(array, predicate) {
18853      return (array && array.length)
18854        ? baseWhile(array, getIteratee(predicate, 3), false, true)
18855        : [];
18856    }
18857
18858    /**
18859     * Creates a slice of `array` with elements taken from the beginning. Elements
18860     * are taken until `predicate` returns falsey. The predicate is invoked with
18861     * three arguments: (value, index, array).
18862     *
18863     * @static
18864     * @memberOf _
18865     * @since 3.0.0
18866     * @category Array
18867     * @param {Array} array The array to query.
18868     * @param {Function} [predicate=_.identity] The function invoked per iteration.
18869     * @returns {Array} Returns the slice of `array`.
18870     * @example
18871     *
18872     * var users = [
18873     *   { 'user': 'barney',  'active': false },
18874     *   { 'user': 'fred',    'active': false },
18875     *   { 'user': 'pebbles', 'active': true }
18876     * ];
18877     *
18878     * _.takeWhile(users, function(o) { return !o.active; });
18879     * // => objects for ['barney', 'fred']
18880     *
18881     * // The `_.matches` iteratee shorthand.
18882     * _.takeWhile(users, { 'user': 'barney', 'active': false });
18883     * // => objects for ['barney']
18884     *
18885     * // The `_.matchesProperty` iteratee shorthand.
18886     * _.takeWhile(users, ['active', false]);
18887     * // => objects for ['barney', 'fred']
18888     *
18889     * // The `_.property` iteratee shorthand.
18890     * _.takeWhile(users, 'active');
18891     * // => []
18892     */
18893    function takeWhile(array, predicate) {
18894      return (array && array.length)
18895        ? baseWhile(array, getIteratee(predicate, 3))
18896        : [];
18897    }
18898
18899    /**
18900     * Creates an array of unique values, in order, from all given arrays using
18901     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
18902     * for equality comparisons.
18903     *
18904     * @static
18905     * @memberOf _
18906     * @since 0.1.0
18907     * @category Array
18908     * @param {...Array} [arrays] The arrays to inspect.
18909     * @returns {Array} Returns the new array of combined values.
18910     * @example
18911     *
18912     * _.union([2], [1, 2]);
18913     * // => [2, 1]
18914     */
18915    var union = baseRest(function(arrays) {
18916      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));
18917    });
18918
18919    /**
18920     * This method is like `_.union` except that it accepts `iteratee` which is
18921     * invoked for each element of each `arrays` to generate the criterion by
18922     * which uniqueness is computed. Result values are chosen from the first
18923     * array in which the value occurs. The iteratee is invoked with one argument:
18924     * (value).
18925     *
18926     * @static
18927     * @memberOf _
18928     * @since 4.0.0
18929     * @category Array
18930     * @param {...Array} [arrays] The arrays to inspect.
18931     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
18932     * @returns {Array} Returns the new array of combined values.
18933     * @example
18934     *
18935     * _.unionBy([2.1], [1.2, 2.3], Math.floor);
18936     * // => [2.1, 1.2]
18937     *
18938     * // The `_.property` iteratee shorthand.
18939     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
18940     * // => [{ 'x': 1 }, { 'x': 2 }]
18941     */
18942    var unionBy = baseRest(function(arrays) {
18943      var iteratee = last(arrays);
18944      if (isArrayLikeObject(iteratee)) {
18945        iteratee = undefined;
18946      }
18947      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));
18948    });
18949
18950    /**
18951     * This method is like `_.union` except that it accepts `comparator` which
18952     * is invoked to compare elements of `arrays`. Result values are chosen from
18953     * the first array in which the value occurs. The comparator is invoked
18954     * with two arguments: (arrVal, othVal).
18955     *
18956     * @static
18957     * @memberOf _
18958     * @since 4.0.0
18959     * @category Array
18960     * @param {...Array} [arrays] The arrays to inspect.
18961     * @param {Function} [comparator] The comparator invoked per element.
18962     * @returns {Array} Returns the new array of combined values.
18963     * @example
18964     *
18965     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
18966     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
18967     *
18968     * _.unionWith(objects, others, _.isEqual);
18969     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
18970     */
18971    var unionWith = baseRest(function(arrays) {
18972      var comparator = last(arrays);
18973      comparator = typeof comparator == 'function' ? comparator : undefined;
18974      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);
18975    });
18976
18977    /**
18978     * Creates a duplicate-free version of an array, using
18979     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
18980     * for equality comparisons, in which only the first occurrence of each element
18981     * is kept. The order of result values is determined by the order they occur
18982     * in the array.
18983     *
18984     * @static
18985     * @memberOf _
18986     * @since 0.1.0
18987     * @category Array
18988     * @param {Array} array The array to inspect.
18989     * @returns {Array} Returns the new duplicate free array.
18990     * @example
18991     *
18992     * _.uniq([2, 1, 2]);
18993     * // => [2, 1]
18994     */
18995    function uniq(array) {
18996      return (array && array.length) ? baseUniq(array) : [];
18997    }
18998
18999    /**
19000     * This method is like `_.uniq` except that it accepts `iteratee` which is
19001     * invoked for each element in `array` to generate the criterion by which
19002     * uniqueness is computed. The order of result values is determined by the
19003     * order they occur in the array. The iteratee is invoked with one argument:
19004     * (value).
19005     *
19006     * @static
19007     * @memberOf _
19008     * @since 4.0.0
19009     * @category Array
19010     * @param {Array} array The array to inspect.
19011     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
19012     * @returns {Array} Returns the new duplicate free array.
19013     * @example
19014     *
19015     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);
19016     * // => [2.1, 1.2]
19017     *
19018     * // The `_.property` iteratee shorthand.
19019     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
19020     * // => [{ 'x': 1 }, { 'x': 2 }]
19021     */
19022    function uniqBy(array, iteratee) {
19023      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];
19024    }
19025
19026    /**
19027     * This method is like `_.uniq` except that it accepts `comparator` which
19028     * is invoked to compare elements of `array`. The order of result values is
19029     * determined by the order they occur in the array.The comparator is invoked
19030     * with two arguments: (arrVal, othVal).
19031     *
19032     * @static
19033     * @memberOf _
19034     * @since 4.0.0
19035     * @category Array
19036     * @param {Array} array The array to inspect.
19037     * @param {Function} [comparator] The comparator invoked per element.
19038     * @returns {Array} Returns the new duplicate free array.
19039     * @example
19040     *
19041     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];
19042     *
19043     * _.uniqWith(objects, _.isEqual);
19044     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]
19045     */
19046    function uniqWith(array, comparator) {
19047      comparator = typeof comparator == 'function' ? comparator : undefined;
19048      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];
19049    }
19050
19051    /**
19052     * This method is like `_.zip` except that it accepts an array of grouped
19053     * elements and creates an array regrouping the elements to their pre-zip
19054     * configuration.
19055     *
19056     * @static
19057     * @memberOf _
19058     * @since 1.2.0
19059     * @category Array
19060     * @param {Array} array The array of grouped elements to process.
19061     * @returns {Array} Returns the new array of regrouped elements.
19062     * @example
19063     *
19064     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);
19065     * // => [['a', 1, true], ['b', 2, false]]
19066     *
19067     * _.unzip(zipped);
19068     * // => [['a', 'b'], [1, 2], [true, false]]
19069     */
19070    function unzip(array) {
19071      if (!(array && array.length)) {
19072        return [];
19073      }
19074      var length = 0;
19075      array = arrayFilter(array, function(group) {
19076        if (isArrayLikeObject(group)) {
19077          length = nativeMax(group.length, length);
19078          return true;
19079        }
19080      });
19081      return baseTimes(length, function(index) {
19082        return arrayMap(array, baseProperty(index));
19083      });
19084    }
19085
19086    /**
19087     * This method is like `_.unzip` except that it accepts `iteratee` to specify
19088     * how regrouped values should be combined. The iteratee is invoked with the
19089     * elements of each group: (...group).
19090     *
19091     * @static
19092     * @memberOf _
19093     * @since 3.8.0
19094     * @category Array
19095     * @param {Array} array The array of grouped elements to process.
19096     * @param {Function} [iteratee=_.identity] The function to combine
19097     *  regrouped values.
19098     * @returns {Array} Returns the new array of regrouped elements.
19099     * @example
19100     *
19101     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);
19102     * // => [[1, 10, 100], [2, 20, 200]]
19103     *
19104     * _.unzipWith(zipped, _.add);
19105     * // => [3, 30, 300]
19106     */
19107    function unzipWith(array, iteratee) {
19108      if (!(array && array.length)) {
19109        return [];
19110      }
19111      var result = unzip(array);
19112      if (iteratee == null) {
19113        return result;
19114      }
19115      return arrayMap(result, function(group) {
19116        return apply(iteratee, undefined, group);
19117      });
19118    }
19119
19120    /**
19121     * Creates an array excluding all given values using
19122     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
19123     * for equality comparisons.
19124     *
19125     * **Note:** Unlike `_.pull`, this method returns a new array.
19126     *
19127     * @static
19128     * @memberOf _
19129     * @since 0.1.0
19130     * @category Array
19131     * @param {Array} array The array to inspect.
19132     * @param {...*} [values] The values to exclude.
19133     * @returns {Array} Returns the new array of filtered values.
19134     * @see _.difference, _.xor
19135     * @example
19136     *
19137     * _.without([2, 1, 2, 3], 1, 2);
19138     * // => [3]
19139     */
19140    var without = baseRest(function(array, values) {
19141      return isArrayLikeObject(array)
19142        ? baseDifference(array, values)
19143        : [];
19144    });
19145
19146    /**
19147     * Creates an array of unique values that is the
19148     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)
19149     * of the given arrays. The order of result values is determined by the order
19150     * they occur in the arrays.
19151     *
19152     * @static
19153     * @memberOf _
19154     * @since 2.4.0
19155     * @category Array
19156     * @param {...Array} [arrays] The arrays to inspect.
19157     * @returns {Array} Returns the new array of filtered values.
19158     * @see _.difference, _.without
19159     * @example
19160     *
19161     * _.xor([2, 1], [2, 3]);
19162     * // => [1, 3]
19163     */
19164    var xor = baseRest(function(arrays) {
19165      return baseXor(arrayFilter(arrays, isArrayLikeObject));
19166    });
19167
19168    /**
19169     * This method is like `_.xor` except that it accepts `iteratee` which is
19170     * invoked for each element of each `arrays` to generate the criterion by
19171     * which by which they're compared. The order of result values is determined
19172     * by the order they occur in the arrays. The iteratee is invoked with one
19173     * argument: (value).
19174     *
19175     * @static
19176     * @memberOf _
19177     * @since 4.0.0
19178     * @category Array
19179     * @param {...Array} [arrays] The arrays to inspect.
19180     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
19181     * @returns {Array} Returns the new array of filtered values.
19182     * @example
19183     *
19184     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);
19185     * // => [1.2, 3.4]
19186     *
19187     * // The `_.property` iteratee shorthand.
19188     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
19189     * // => [{ 'x': 2 }]
19190     */
19191    var xorBy = baseRest(function(arrays) {
19192      var iteratee = last(arrays);
19193      if (isArrayLikeObject(iteratee)) {
19194        iteratee = undefined;
19195      }
19196      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));
19197    });
19198
19199    /**
19200     * This method is like `_.xor` except that it accepts `comparator` which is
19201     * invoked to compare elements of `arrays`. The order of result values is
19202     * determined by the order they occur in the arrays. The comparator is invoked
19203     * with two arguments: (arrVal, othVal).
19204     *
19205     * @static
19206     * @memberOf _
19207     * @since 4.0.0
19208     * @category Array
19209     * @param {...Array} [arrays] The arrays to inspect.
19210     * @param {Function} [comparator] The comparator invoked per element.
19211     * @returns {Array} Returns the new array of filtered values.
19212     * @example
19213     *
19214     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
19215     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
19216     *
19217     * _.xorWith(objects, others, _.isEqual);
19218     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
19219     */
19220    var xorWith = baseRest(function(arrays) {
19221      var comparator = last(arrays);
19222      comparator = typeof comparator == 'function' ? comparator : undefined;
19223      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);
19224    });
19225
19226    /**
19227     * Creates an array of grouped elements, the first of which contains the
19228     * first elements of the given arrays, the second of which contains the
19229     * second elements of the given arrays, and so on.
19230     *
19231     * @static
19232     * @memberOf _
19233     * @since 0.1.0
19234     * @category Array
19235     * @param {...Array} [arrays] The arrays to process.
19236     * @returns {Array} Returns the new array of grouped elements.
19237     * @example
19238     *
19239     * _.zip(['a', 'b'], [1, 2], [true, false]);
19240     * // => [['a', 1, true], ['b', 2, false]]
19241     */
19242    var zip = baseRest(unzip);
19243
19244    /**
19245     * This method is like `_.fromPairs` except that it accepts two arrays,
19246     * one of property identifiers and one of corresponding values.
19247     *
19248     * @static
19249     * @memberOf _
19250     * @since 0.4.0
19251     * @category Array
19252     * @param {Array} [props=[]] The property identifiers.
19253     * @param {Array} [values=[]] The property values.
19254     * @returns {Object} Returns the new object.
19255     * @example
19256     *
19257     * _.zipObject(['a', 'b'], [1, 2]);
19258     * // => { 'a': 1, 'b': 2 }
19259     */
19260    function zipObject(props, values) {
19261      return baseZipObject(props || [], values || [], assignValue);
19262    }
19263
19264    /**
19265     * This method is like `_.zipObject` except that it supports property paths.
19266     *
19267     * @static
19268     * @memberOf _
19269     * @since 4.1.0
19270     * @category Array
19271     * @param {Array} [props=[]] The property identifiers.
19272     * @param {Array} [values=[]] The property values.
19273     * @returns {Object} Returns the new object.
19274     * @example
19275     *
19276     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);
19277     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }
19278     */
19279    function zipObjectDeep(props, values) {
19280      return baseZipObject(props || [], values || [], baseSet);
19281    }
19282
19283    /**
19284     * This method is like `_.zip` except that it accepts `iteratee` to specify
19285     * how grouped values should be combined. The iteratee is invoked with the
19286     * elements of each group: (...group).
19287     *
19288     * @static
19289     * @memberOf _
19290     * @since 3.8.0
19291     * @category Array
19292     * @param {...Array} [arrays] The arrays to process.
19293     * @param {Function} [iteratee=_.identity] The function to combine
19294     *  grouped values.
19295     * @returns {Array} Returns the new array of grouped elements.
19296     * @example
19297     *
19298     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {
19299     *   return a + b + c;
19300     * });
19301     * // => [111, 222]
19302     */
19303    var zipWith = baseRest(function(arrays) {
19304      var length = arrays.length,
19305          iteratee = length > 1 ? arrays[length - 1] : undefined;
19306
19307      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;
19308      return unzipWith(arrays, iteratee);
19309    });
19310
19311    /*------------------------------------------------------------------------*/
19312
19313    /**
19314     * Creates a `lodash` wrapper instance that wraps `value` with explicit method
19315     * chain sequences enabled. The result of such sequences must be unwrapped
19316     * with `_#value`.
19317     *
19318     * @static
19319     * @memberOf _
19320     * @since 1.3.0
19321     * @category Seq
19322     * @param {*} value The value to wrap.
19323     * @returns {Object} Returns the new `lodash` wrapper instance.
19324     * @example
19325     *
19326     * var users = [
19327     *   { 'user': 'barney',  'age': 36 },
19328     *   { 'user': 'fred',    'age': 40 },
19329     *   { 'user': 'pebbles', 'age': 1 }
19330     * ];
19331     *
19332     * var youngest = _
19333     *   .chain(users)
19334     *   .sortBy('age')
19335     *   .map(function(o) {
19336     *     return o.user + ' is ' + o.age;
19337     *   })
19338     *   .head()
19339     *   .value();
19340     * // => 'pebbles is 1'
19341     */
19342    function chain(value) {
19343      var result = lodash(value);
19344      result.__chain__ = true;
19345      return result;
19346    }
19347
19348    /**
19349     * This method invokes `interceptor` and returns `value`. The interceptor
19350     * is invoked with one argument; (value). The purpose of this method is to
19351     * "tap into" a method chain sequence in order to modify intermediate results.
19352     *
19353     * @static
19354     * @memberOf _
19355     * @since 0.1.0
19356     * @category Seq
19357     * @param {*} value The value to provide to `interceptor`.
19358     * @param {Function} interceptor The function to invoke.
19359     * @returns {*} Returns `value`.
19360     * @example
19361     *
19362     * _([1, 2, 3])
19363     *  .tap(function(array) {
19364     *    // Mutate input array.
19365     *    array.pop();
19366     *  })
19367     *  .reverse()
19368     *  .value();
19369     * // => [2, 1]
19370     */
19371    function tap(value, interceptor) {
19372      interceptor(value);
19373      return value;
19374    }
19375
19376    /**
19377     * This method is like `_.tap` except that it returns the result of `interceptor`.
19378     * The purpose of this method is to "pass thru" values replacing intermediate
19379     * results in a method chain sequence.
19380     *
19381     * @static
19382     * @memberOf _
19383     * @since 3.0.0
19384     * @category Seq
19385     * @param {*} value The value to provide to `interceptor`.
19386     * @param {Function} interceptor The function to invoke.
19387     * @returns {*} Returns the result of `interceptor`.
19388     * @example
19389     *
19390     * _('  abc  ')
19391     *  .chain()
19392     *  .trim()
19393     *  .thru(function(value) {
19394     *    return [value];
19395     *  })
19396     *  .value();
19397     * // => ['abc']
19398     */
19399    function thru(value, interceptor) {
19400      return interceptor(value);
19401    }
19402
19403    /**
19404     * This method is the wrapper version of `_.at`.
19405     *
19406     * @name at
19407     * @memberOf _
19408     * @since 1.0.0
19409     * @category Seq
19410     * @param {...(string|string[])} [paths] The property paths to pick.
19411     * @returns {Object} Returns the new `lodash` wrapper instance.
19412     * @example
19413     *
19414     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
19415     *
19416     * _(object).at(['a[0].b.c', 'a[1]']).value();
19417     * // => [3, 4]
19418     */
19419    var wrapperAt = flatRest(function(paths) {
19420      var length = paths.length,
19421          start = length ? paths[0] : 0,
19422          value = this.__wrapped__,
19423          interceptor = function(object) { return baseAt(object, paths); };
19424
19425      if (length > 1 || this.__actions__.length ||
19426          !(value instanceof LazyWrapper) || !isIndex(start)) {
19427        return this.thru(interceptor);
19428      }
19429      value = value.slice(start, +start + (length ? 1 : 0));
19430      value.__actions__.push({
19431        'func': thru,
19432        'args': [interceptor],
19433        'thisArg': undefined
19434      });
19435      return new LodashWrapper(value, this.__chain__).thru(function(array) {
19436        if (length && !array.length) {
19437          array.push(undefined);
19438        }
19439        return array;
19440      });
19441    });
19442
19443    /**
19444     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.
19445     *
19446     * @name chain
19447     * @memberOf _
19448     * @since 0.1.0
19449     * @category Seq
19450     * @returns {Object} Returns the new `lodash` wrapper instance.
19451     * @example
19452     *
19453     * var users = [
19454     *   { 'user': 'barney', 'age': 36 },
19455     *   { 'user': 'fred',   'age': 40 }
19456     * ];
19457     *
19458     * // A sequence without explicit chaining.
19459     * _(users).head();
19460     * // => { 'user': 'barney', 'age': 36 }
19461     *
19462     * // A sequence with explicit chaining.
19463     * _(users)
19464     *   .chain()
19465     *   .head()
19466     *   .pick('user')
19467     *   .value();
19468     * // => { 'user': 'barney' }
19469     */
19470    function wrapperChain() {
19471      return chain(this);
19472    }
19473
19474    /**
19475     * Executes the chain sequence and returns the wrapped result.
19476     *
19477     * @name commit
19478     * @memberOf _
19479     * @since 3.2.0
19480     * @category Seq
19481     * @returns {Object} Returns the new `lodash` wrapper instance.
19482     * @example
19483     *
19484     * var array = [1, 2];
19485     * var wrapped = _(array).push(3);
19486     *
19487     * console.log(array);
19488     * // => [1, 2]
19489     *
19490     * wrapped = wrapped.commit();
19491     * console.log(array);
19492     * // => [1, 2, 3]
19493     *
19494     * wrapped.last();
19495     * // => 3
19496     *
19497     * console.log(array);
19498     * // => [1, 2, 3]
19499     */
19500    function wrapperCommit() {
19501      return new LodashWrapper(this.value(), this.__chain__);
19502    }
19503
19504    /**
19505     * Gets the next value on a wrapped object following the
19506     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).
19507     *
19508     * @name next
19509     * @memberOf _
19510     * @since 4.0.0
19511     * @category Seq
19512     * @returns {Object} Returns the next iterator value.
19513     * @example
19514     *
19515     * var wrapped = _([1, 2]);
19516     *
19517     * wrapped.next();
19518     * // => { 'done': false, 'value': 1 }
19519     *
19520     * wrapped.next();
19521     * // => { 'done': false, 'value': 2 }
19522     *
19523     * wrapped.next();
19524     * // => { 'done': true, 'value': undefined }
19525     */
19526    function wrapperNext() {
19527      if (this.__values__ === undefined) {
19528        this.__values__ = toArray(this.value());
19529      }
19530      var done = this.__index__ >= this.__values__.length,
19531          value = done ? undefined : this.__values__[this.__index__++];
19532
19533      return { 'done': done, 'value': value };
19534    }
19535
19536    /**
19537     * Enables the wrapper to be iterable.
19538     *
19539     * @name Symbol.iterator
19540     * @memberOf _
19541     * @since 4.0.0
19542     * @category Seq
19543     * @returns {Object} Returns the wrapper object.
19544     * @example
19545     *
19546     * var wrapped = _([1, 2]);
19547     *
19548     * wrapped[Symbol.iterator]() === wrapped;
19549     * // => true
19550     *
19551     * Array.from(wrapped);
19552     * // => [1, 2]
19553     */
19554    function wrapperToIterator() {
19555      return this;
19556    }
19557
19558    /**
19559     * Creates a clone of the chain sequence planting `value` as the wrapped value.
19560     *
19561     * @name plant
19562     * @memberOf _
19563     * @since 3.2.0
19564     * @category Seq
19565     * @param {*} value The value to plant.
19566     * @returns {Object} Returns the new `lodash` wrapper instance.
19567     * @example
19568     *
19569     * function square(n) {
19570     *   return n * n;
19571     * }
19572     *
19573     * var wrapped = _([1, 2]).map(square);
19574     * var other = wrapped.plant([3, 4]);
19575     *
19576     * other.value();
19577     * // => [9, 16]
19578     *
19579     * wrapped.value();
19580     * // => [1, 4]
19581     */
19582    function wrapperPlant(value) {
19583      var result,
19584          parent = this;
19585
19586      while (parent instanceof baseLodash) {
19587        var clone = wrapperClone(parent);
19588        clone.__index__ = 0;
19589        clone.__values__ = undefined;
19590        if (result) {
19591          previous.__wrapped__ = clone;
19592        } else {
19593          result = clone;
19594        }
19595        var previous = clone;
19596        parent = parent.__wrapped__;
19597      }
19598      previous.__wrapped__ = value;
19599      return result;
19600    }
19601
19602    /**
19603     * This method is the wrapper version of `_.reverse`.
19604     *
19605     * **Note:** This method mutates the wrapped array.
19606     *
19607     * @name reverse
19608     * @memberOf _
19609     * @since 0.1.0
19610     * @category Seq
19611     * @returns {Object} Returns the new `lodash` wrapper instance.
19612     * @example
19613     *
19614     * var array = [1, 2, 3];
19615     *
19616     * _(array).reverse().value()
19617     * // => [3, 2, 1]
19618     *
19619     * console.log(array);
19620     * // => [3, 2, 1]
19621     */
19622    function wrapperReverse() {
19623      var value = this.__wrapped__;
19624      if (value instanceof LazyWrapper) {
19625        var wrapped = value;
19626        if (this.__actions__.length) {
19627          wrapped = new LazyWrapper(this);
19628        }
19629        wrapped = wrapped.reverse();
19630        wrapped.__actions__.push({
19631          'func': thru,
19632          'args': [reverse],
19633          'thisArg': undefined
19634        });
19635        return new LodashWrapper(wrapped, this.__chain__);
19636      }
19637      return this.thru(reverse);
19638    }
19639
19640    /**
19641     * Executes the chain sequence to resolve the unwrapped value.
19642     *
19643     * @name value
19644     * @memberOf _
19645     * @since 0.1.0
19646     * @alias toJSON, valueOf
19647     * @category Seq
19648     * @returns {*} Returns the resolved unwrapped value.
19649     * @example
19650     *
19651     * _([1, 2, 3]).value();
19652     * // => [1, 2, 3]
19653     */
19654    function wrapperValue() {
19655      return baseWrapperValue(this.__wrapped__, this.__actions__);
19656    }
19657
19658    /*------------------------------------------------------------------------*/
19659
19660    /**
19661     * Creates an object composed of keys generated from the results of running
19662     * each element of `collection` thru `iteratee`. The corresponding value of
19663     * each key is the number of times the key was returned by `iteratee`. The
19664     * iteratee is invoked with one argument: (value).
19665     *
19666     * @static
19667     * @memberOf _
19668     * @since 0.5.0
19669     * @category Collection
19670     * @param {Array|Object} collection The collection to iterate over.
19671     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
19672     * @returns {Object} Returns the composed aggregate object.
19673     * @example
19674     *
19675     * _.countBy([6.1, 4.2, 6.3], Math.floor);
19676     * // => { '4': 1, '6': 2 }
19677     *
19678     * // The `_.property` iteratee shorthand.
19679     * _.countBy(['one', 'two', 'three'], 'length');
19680     * // => { '3': 2, '5': 1 }
19681     */
19682    var countBy = createAggregator(function(result, value, key) {
19683      if (hasOwnProperty.call(result, key)) {
19684        ++result[key];
19685      } else {
19686        baseAssignValue(result, key, 1);
19687      }
19688    });
19689
19690    /**
19691     * Checks if `predicate` returns truthy for **all** elements of `collection`.
19692     * Iteration is stopped once `predicate` returns falsey. The predicate is
19693     * invoked with three arguments: (value, index|key, collection).
19694     *
19695     * **Note:** This method returns `true` for
19696     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because
19697     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of
19698     * elements of empty collections.
19699     *
19700     * @static
19701     * @memberOf _
19702     * @since 0.1.0
19703     * @category Collection
19704     * @param {Array|Object} collection The collection to iterate over.
19705     * @param {Function} [predicate=_.identity] The function invoked per iteration.
19706     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
19707     * @returns {boolean} Returns `true` if all elements pass the predicate check,
19708     *  else `false`.
19709     * @example
19710     *
19711     * _.every([true, 1, null, 'yes'], Boolean);
19712     * // => false
19713     *
19714     * var users = [
19715     *   { 'user': 'barney', 'age': 36, 'active': false },
19716     *   { 'user': 'fred',   'age': 40, 'active': false }
19717     * ];
19718     *
19719     * // The `_.matches` iteratee shorthand.
19720     * _.every(users, { 'user': 'barney', 'active': false });
19721     * // => false
19722     *
19723     * // The `_.matchesProperty` iteratee shorthand.
19724     * _.every(users, ['active', false]);
19725     * // => true
19726     *
19727     * // The `_.property` iteratee shorthand.
19728     * _.every(users, 'active');
19729     * // => false
19730     */
19731    function every(collection, predicate, guard) {
19732      var func = isArray(collection) ? arrayEvery : baseEvery;
19733      if (guard && isIterateeCall(collection, predicate, guard)) {
19734        predicate = undefined;
19735      }
19736      return func(collection, getIteratee(predicate, 3));
19737    }
19738
19739    /**
19740     * Iterates over elements of `collection`, returning an array of all elements
19741     * `predicate` returns truthy for. The predicate is invoked with three
19742     * arguments: (value, index|key, collection).
19743     *
19744     * **Note:** Unlike `_.remove`, this method returns a new array.
19745     *
19746     * @static
19747     * @memberOf _
19748     * @since 0.1.0
19749     * @category Collection
19750     * @param {Array|Object} collection The collection to iterate over.
19751     * @param {Function} [predicate=_.identity] The function invoked per iteration.
19752     * @returns {Array} Returns the new filtered array.
19753     * @see _.reject
19754     * @example
19755     *
19756     * var users = [
19757     *   { 'user': 'barney', 'age': 36, 'active': true },
19758     *   { 'user': 'fred',   'age': 40, 'active': false }
19759     * ];
19760     *
19761     * _.filter(users, function(o) { return !o.active; });
19762     * // => objects for ['fred']
19763     *
19764     * // The `_.matches` iteratee shorthand.
19765     * _.filter(users, { 'age': 36, 'active': true });
19766     * // => objects for ['barney']
19767     *
19768     * // The `_.matchesProperty` iteratee shorthand.
19769     * _.filter(users, ['active', false]);
19770     * // => objects for ['fred']
19771     *
19772     * // The `_.property` iteratee shorthand.
19773     * _.filter(users, 'active');
19774     * // => objects for ['barney']
19775     *
19776     * // Combining several predicates using `_.overEvery` or `_.overSome`.
19777     * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));
19778     * // => objects for ['fred', 'barney']
19779     */
19780    function filter(collection, predicate) {
19781      var func = isArray(collection) ? arrayFilter : baseFilter;
19782      return func(collection, getIteratee(predicate, 3));
19783    }
19784
19785    /**
19786     * Iterates over elements of `collection`, returning the first element
19787     * `predicate` returns truthy for. The predicate is invoked with three
19788     * arguments: (value, index|key, collection).
19789     *
19790     * @static
19791     * @memberOf _
19792     * @since 0.1.0
19793     * @category Collection
19794     * @param {Array|Object} collection The collection to inspect.
19795     * @param {Function} [predicate=_.identity] The function invoked per iteration.
19796     * @param {number} [fromIndex=0] The index to search from.
19797     * @returns {*} Returns the matched element, else `undefined`.
19798     * @example
19799     *
19800     * var users = [
19801     *   { 'user': 'barney',  'age': 36, 'active': true },
19802     *   { 'user': 'fred',    'age': 40, 'active': false },
19803     *   { 'user': 'pebbles', 'age': 1,  'active': true }
19804     * ];
19805     *
19806     * _.find(users, function(o) { return o.age < 40; });
19807     * // => object for 'barney'
19808     *
19809     * // The `_.matches` iteratee shorthand.
19810     * _.find(users, { 'age': 1, 'active': true });
19811     * // => object for 'pebbles'
19812     *
19813     * // The `_.matchesProperty` iteratee shorthand.
19814     * _.find(users, ['active', false]);
19815     * // => object for 'fred'
19816     *
19817     * // The `_.property` iteratee shorthand.
19818     * _.find(users, 'active');
19819     * // => object for 'barney'
19820     */
19821    var find = createFind(findIndex);
19822
19823    /**
19824     * This method is like `_.find` except that it iterates over elements of
19825     * `collection` from right to left.
19826     *
19827     * @static
19828     * @memberOf _
19829     * @since 2.0.0
19830     * @category Collection
19831     * @param {Array|Object} collection The collection to inspect.
19832     * @param {Function} [predicate=_.identity] The function invoked per iteration.
19833     * @param {number} [fromIndex=collection.length-1] The index to search from.
19834     * @returns {*} Returns the matched element, else `undefined`.
19835     * @example
19836     *
19837     * _.findLast([1, 2, 3, 4], function(n) {
19838     *   return n % 2 == 1;
19839     * });
19840     * // => 3
19841     */
19842    var findLast = createFind(findLastIndex);
19843
19844    /**
19845     * Creates a flattened array of values by running each element in `collection`
19846     * thru `iteratee` and flattening the mapped results. The iteratee is invoked
19847     * with three arguments: (value, index|key, collection).
19848     *
19849     * @static
19850     * @memberOf _
19851     * @since 4.0.0
19852     * @category Collection
19853     * @param {Array|Object} collection The collection to iterate over.
19854     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
19855     * @returns {Array} Returns the new flattened array.
19856     * @example
19857     *
19858     * function duplicate(n) {
19859     *   return [n, n];
19860     * }
19861     *
19862     * _.flatMap([1, 2], duplicate);
19863     * // => [1, 1, 2, 2]
19864     */
19865    function flatMap(collection, iteratee) {
19866      return baseFlatten(map(collection, iteratee), 1);
19867    }
19868
19869    /**
19870     * This method is like `_.flatMap` except that it recursively flattens the
19871     * mapped results.
19872     *
19873     * @static
19874     * @memberOf _
19875     * @since 4.7.0
19876     * @category Collection
19877     * @param {Array|Object} collection The collection to iterate over.
19878     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
19879     * @returns {Array} Returns the new flattened array.
19880     * @example
19881     *
19882     * function duplicate(n) {
19883     *   return [[[n, n]]];
19884     * }
19885     *
19886     * _.flatMapDeep([1, 2], duplicate);
19887     * // => [1, 1, 2, 2]
19888     */
19889    function flatMapDeep(collection, iteratee) {
19890      return baseFlatten(map(collection, iteratee), INFINITY);
19891    }
19892
19893    /**
19894     * This method is like `_.flatMap` except that it recursively flattens the
19895     * mapped results up to `depth` times.
19896     *
19897     * @static
19898     * @memberOf _
19899     * @since 4.7.0
19900     * @category Collection
19901     * @param {Array|Object} collection The collection to iterate over.
19902     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
19903     * @param {number} [depth=1] The maximum recursion depth.
19904     * @returns {Array} Returns the new flattened array.
19905     * @example
19906     *
19907     * function duplicate(n) {
19908     *   return [[[n, n]]];
19909     * }
19910     *
19911     * _.flatMapDepth([1, 2], duplicate, 2);
19912     * // => [[1, 1], [2, 2]]
19913     */
19914    function flatMapDepth(collection, iteratee, depth) {
19915      depth = depth === undefined ? 1 : toInteger(depth);
19916      return baseFlatten(map(collection, iteratee), depth);
19917    }
19918
19919    /**
19920     * Iterates over elements of `collection` and invokes `iteratee` for each element.
19921     * The iteratee is invoked with three arguments: (value, index|key, collection).
19922     * Iteratee functions may exit iteration early by explicitly returning `false`.
19923     *
19924     * **Note:** As with other "Collections" methods, objects with a "length"
19925     * property are iterated like arrays. To avoid this behavior use `_.forIn`
19926     * or `_.forOwn` for object iteration.
19927     *
19928     * @static
19929     * @memberOf _
19930     * @since 0.1.0
19931     * @alias each
19932     * @category Collection
19933     * @param {Array|Object} collection The collection to iterate over.
19934     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
19935     * @returns {Array|Object} Returns `collection`.
19936     * @see _.forEachRight
19937     * @example
19938     *
19939     * _.forEach([1, 2], function(value) {
19940     *   console.log(value);
19941     * });
19942     * // => Logs `1` then `2`.
19943     *
19944     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
19945     *   console.log(key);
19946     * });
19947     * // => Logs 'a' then 'b' (iteration order is not guaranteed).
19948     */
19949    function forEach(collection, iteratee) {
19950      var func = isArray(collection) ? arrayEach : baseEach;
19951      return func(collection, getIteratee(iteratee, 3));
19952    }
19953
19954    /**
19955     * This method is like `_.forEach` except that it iterates over elements of
19956     * `collection` from right to left.
19957     *
19958     * @static
19959     * @memberOf _
19960     * @since 2.0.0
19961     * @alias eachRight
19962     * @category Collection
19963     * @param {Array|Object} collection The collection to iterate over.
19964     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
19965     * @returns {Array|Object} Returns `collection`.
19966     * @see _.forEach
19967     * @example
19968     *
19969     * _.forEachRight([1, 2], function(value) {
19970     *   console.log(value);
19971     * });
19972     * // => Logs `2` then `1`.
19973     */
19974    function forEachRight(collection, iteratee) {
19975      var func = isArray(collection) ? arrayEachRight : baseEachRight;
19976      return func(collection, getIteratee(iteratee, 3));
19977    }
19978
19979    /**
19980     * Creates an object composed of keys generated from the results of running
19981     * each element of `collection` thru `iteratee`. The order of grouped values
19982     * is determined by the order they occur in `collection`. The corresponding
19983     * value of each key is an array of elements responsible for generating the
19984     * key. The iteratee is invoked with one argument: (value).
19985     *
19986     * @static
19987     * @memberOf _
19988     * @since 0.1.0
19989     * @category Collection
19990     * @param {Array|Object} collection The collection to iterate over.
19991     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
19992     * @returns {Object} Returns the composed aggregate object.
19993     * @example
19994     *
19995     * _.groupBy([6.1, 4.2, 6.3], Math.floor);
19996     * // => { '4': [4.2], '6': [6.1, 6.3] }
19997     *
19998     * // The `_.property` iteratee shorthand.
19999     * _.groupBy(['one', 'two', 'three'], 'length');
20000     * // => { '3': ['one', 'two'], '5': ['three'] }
20001     */
20002    var groupBy = createAggregator(function(result, value, key) {
20003      if (hasOwnProperty.call(result, key)) {
20004        result[key].push(value);
20005      } else {
20006        baseAssignValue(result, key, [value]);
20007      }
20008    });
20009
20010    /**
20011     * Checks if `value` is in `collection`. If `collection` is a string, it's
20012     * checked for a substring of `value`, otherwise
20013     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
20014     * is used for equality comparisons. If `fromIndex` is negative, it's used as
20015     * the offset from the end of `collection`.
20016     *
20017     * @static
20018     * @memberOf _
20019     * @since 0.1.0
20020     * @category Collection
20021     * @param {Array|Object|string} collection The collection to inspect.
20022     * @param {*} value The value to search for.
20023     * @param {number} [fromIndex=0] The index to search from.
20024     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
20025     * @returns {boolean} Returns `true` if `value` is found, else `false`.
20026     * @example
20027     *
20028     * _.includes([1, 2, 3], 1);
20029     * // => true
20030     *
20031     * _.includes([1, 2, 3], 1, 2);
20032     * // => false
20033     *
20034     * _.includes({ 'a': 1, 'b': 2 }, 1);
20035     * // => true
20036     *
20037     * _.includes('abcd', 'bc');
20038     * // => true
20039     */
20040    function includes(collection, value, fromIndex, guard) {
20041      collection = isArrayLike(collection) ? collection : values(collection);
20042      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;
20043
20044      var length = collection.length;
20045      if (fromIndex < 0) {
20046        fromIndex = nativeMax(length + fromIndex, 0);
20047      }
20048      return isString(collection)
20049        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)
20050        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);
20051    }
20052
20053    /**
20054     * Invokes the method at `path` of each element in `collection`, returning
20055     * an array of the results of each invoked method. Any additional arguments
20056     * are provided to each invoked method. If `path` is a function, it's invoked
20057     * for, and `this` bound to, each element in `collection`.
20058     *
20059     * @static
20060     * @memberOf _
20061     * @since 4.0.0
20062     * @category Collection
20063     * @param {Array|Object} collection The collection to iterate over.
20064     * @param {Array|Function|string} path The path of the method to invoke or
20065     *  the function invoked per iteration.
20066     * @param {...*} [args] The arguments to invoke each method with.
20067     * @returns {Array} Returns the array of results.
20068     * @example
20069     *
20070     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');
20071     * // => [[1, 5, 7], [1, 2, 3]]
20072     *
20073     * _.invokeMap([123, 456], String.prototype.split, '');
20074     * // => [['1', '2', '3'], ['4', '5', '6']]
20075     */
20076    var invokeMap = baseRest(function(collection, path, args) {
20077      var index = -1,
20078          isFunc = typeof path == 'function',
20079          result = isArrayLike(collection) ? Array(collection.length) : [];
20080
20081      baseEach(collection, function(value) {
20082        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);
20083      });
20084      return result;
20085    });
20086
20087    /**
20088     * Creates an object composed of keys generated from the results of running
20089     * each element of `collection` thru `iteratee`. The corresponding value of
20090     * each key is the last element responsible for generating the key. The
20091     * iteratee is invoked with one argument: (value).
20092     *
20093     * @static
20094     * @memberOf _
20095     * @since 4.0.0
20096     * @category Collection
20097     * @param {Array|Object} collection The collection to iterate over.
20098     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
20099     * @returns {Object} Returns the composed aggregate object.
20100     * @example
20101     *
20102     * var array = [
20103     *   { 'dir': 'left', 'code': 97 },
20104     *   { 'dir': 'right', 'code': 100 }
20105     * ];
20106     *
20107     * _.keyBy(array, function(o) {
20108     *   return String.fromCharCode(o.code);
20109     * });
20110     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
20111     *
20112     * _.keyBy(array, 'dir');
20113     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
20114     */
20115    var keyBy = createAggregator(function(result, value, key) {
20116      baseAssignValue(result, key, value);
20117    });
20118
20119    /**
20120     * Creates an array of values by running each element in `collection` thru
20121     * `iteratee`. The iteratee is invoked with three arguments:
20122     * (value, index|key, collection).
20123     *
20124     * Many lodash methods are guarded to work as iteratees for methods like
20125     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
20126     *
20127     * The guarded methods are:
20128     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,
20129     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,
20130     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,
20131     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`
20132     *
20133     * @static
20134     * @memberOf _
20135     * @since 0.1.0
20136     * @category Collection
20137     * @param {Array|Object} collection The collection to iterate over.
20138     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
20139     * @returns {Array} Returns the new mapped array.
20140     * @example
20141     *
20142     * function square(n) {
20143     *   return n * n;
20144     * }
20145     *
20146     * _.map([4, 8], square);
20147     * // => [16, 64]
20148     *
20149     * _.map({ 'a': 4, 'b': 8 }, square);
20150     * // => [16, 64] (iteration order is not guaranteed)
20151     *
20152     * var users = [
20153     *   { 'user': 'barney' },
20154     *   { 'user': 'fred' }
20155     * ];
20156     *
20157     * // The `_.property` iteratee shorthand.
20158     * _.map(users, 'user');
20159     * // => ['barney', 'fred']
20160     */
20161    function map(collection, iteratee) {
20162      var func = isArray(collection) ? arrayMap : baseMap;
20163      return func(collection, getIteratee(iteratee, 3));
20164    }
20165
20166    /**
20167     * This method is like `_.sortBy` except that it allows specifying the sort
20168     * orders of the iteratees to sort by. If `orders` is unspecified, all values
20169     * are sorted in ascending order. Otherwise, specify an order of "desc" for
20170     * descending or "asc" for ascending sort order of corresponding values.
20171     *
20172     * @static
20173     * @memberOf _
20174     * @since 4.0.0
20175     * @category Collection
20176     * @param {Array|Object} collection The collection to iterate over.
20177     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]
20178     *  The iteratees to sort by.
20179     * @param {string[]} [orders] The sort orders of `iteratees`.
20180     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
20181     * @returns {Array} Returns the new sorted array.
20182     * @example
20183     *
20184     * var users = [
20185     *   { 'user': 'fred',   'age': 48 },
20186     *   { 'user': 'barney', 'age': 34 },
20187     *   { 'user': 'fred',   'age': 40 },
20188     *   { 'user': 'barney', 'age': 36 }
20189     * ];
20190     *
20191     * // Sort by `user` in ascending order and by `age` in descending order.
20192     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);
20193     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
20194     */
20195    function orderBy(collection, iteratees, orders, guard) {
20196      if (collection == null) {
20197        return [];
20198      }
20199      if (!isArray(iteratees)) {
20200        iteratees = iteratees == null ? [] : [iteratees];
20201      }
20202      orders = guard ? undefined : orders;
20203      if (!isArray(orders)) {
20204        orders = orders == null ? [] : [orders];
20205      }
20206      return baseOrderBy(collection, iteratees, orders);
20207    }
20208
20209    /**
20210     * Creates an array of elements split into two groups, the first of which
20211     * contains elements `predicate` returns truthy for, the second of which
20212     * contains elements `predicate` returns falsey for. The predicate is
20213     * invoked with one argument: (value).
20214     *
20215     * @static
20216     * @memberOf _
20217     * @since 3.0.0
20218     * @category Collection
20219     * @param {Array|Object} collection The collection to iterate over.
20220     * @param {Function} [predicate=_.identity] The function invoked per iteration.
20221     * @returns {Array} Returns the array of grouped elements.
20222     * @example
20223     *
20224     * var users = [
20225     *   { 'user': 'barney',  'age': 36, 'active': false },
20226     *   { 'user': 'fred',    'age': 40, 'active': true },
20227     *   { 'user': 'pebbles', 'age': 1,  'active': false }
20228     * ];
20229     *
20230     * _.partition(users, function(o) { return o.active; });
20231     * // => objects for [['fred'], ['barney', 'pebbles']]
20232     *
20233     * // The `_.matches` iteratee shorthand.
20234     * _.partition(users, { 'age': 1, 'active': false });
20235     * // => objects for [['pebbles'], ['barney', 'fred']]
20236     *
20237     * // The `_.matchesProperty` iteratee shorthand.
20238     * _.partition(users, ['active', false]);
20239     * // => objects for [['barney', 'pebbles'], ['fred']]
20240     *
20241     * // The `_.property` iteratee shorthand.
20242     * _.partition(users, 'active');
20243     * // => objects for [['fred'], ['barney', 'pebbles']]
20244     */
20245    var partition = createAggregator(function(result, value, key) {
20246      result[key ? 0 : 1].push(value);
20247    }, function() { return [[], []]; });
20248
20249    /**
20250     * Reduces `collection` to a value which is the accumulated result of running
20251     * each element in `collection` thru `iteratee`, where each successive
20252     * invocation is supplied the return value of the previous. If `accumulator`
20253     * is not given, the first element of `collection` is used as the initial
20254     * value. The iteratee is invoked with four arguments:
20255     * (accumulator, value, index|key, collection).
20256     *
20257     * Many lodash methods are guarded to work as iteratees for methods like
20258     * `_.reduce`, `_.reduceRight`, and `_.transform`.
20259     *
20260     * The guarded methods are:
20261     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,
20262     * and `sortBy`
20263     *
20264     * @static
20265     * @memberOf _
20266     * @since 0.1.0
20267     * @category Collection
20268     * @param {Array|Object} collection The collection to iterate over.
20269     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
20270     * @param {*} [accumulator] The initial value.
20271     * @returns {*} Returns the accumulated value.
20272     * @see _.reduceRight
20273     * @example
20274     *
20275     * _.reduce([1, 2], function(sum, n) {
20276     *   return sum + n;
20277     * }, 0);
20278     * // => 3
20279     *
20280     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
20281     *   (result[value] || (result[value] = [])).push(key);
20282     *   return result;
20283     * }, {});
20284     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)
20285     */
20286    function reduce(collection, iteratee, accumulator) {
20287      var func = isArray(collection) ? arrayReduce : baseReduce,
20288          initAccum = arguments.length < 3;
20289
20290      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);
20291    }
20292
20293    /**
20294     * This method is like `_.reduce` except that it iterates over elements of
20295     * `collection` from right to left.
20296     *
20297     * @static
20298     * @memberOf _
20299     * @since 0.1.0
20300     * @category Collection
20301     * @param {Array|Object} collection The collection to iterate over.
20302     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
20303     * @param {*} [accumulator] The initial value.
20304     * @returns {*} Returns the accumulated value.
20305     * @see _.reduce
20306     * @example
20307     *
20308     * var array = [[0, 1], [2, 3], [4, 5]];
20309     *
20310     * _.reduceRight(array, function(flattened, other) {
20311     *   return flattened.concat(other);
20312     * }, []);
20313     * // => [4, 5, 2, 3, 0, 1]
20314     */
20315    function reduceRight(collection, iteratee, accumulator) {
20316      var func = isArray(collection) ? arrayReduceRight : baseReduce,
20317          initAccum = arguments.length < 3;
20318
20319      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);
20320    }
20321
20322    /**
20323     * The opposite of `_.filter`; this method returns the elements of `collection`
20324     * that `predicate` does **not** return truthy for.
20325     *
20326     * @static
20327     * @memberOf _
20328     * @since 0.1.0
20329     * @category Collection
20330     * @param {Array|Object} collection The collection to iterate over.
20331     * @param {Function} [predicate=_.identity] The function invoked per iteration.
20332     * @returns {Array} Returns the new filtered array.
20333     * @see _.filter
20334     * @example
20335     *
20336     * var users = [
20337     *   { 'user': 'barney', 'age': 36, 'active': false },
20338     *   { 'user': 'fred',   'age': 40, 'active': true }
20339     * ];
20340     *
20341     * _.reject(users, function(o) { return !o.active; });
20342     * // => objects for ['fred']
20343     *
20344     * // The `_.matches` iteratee shorthand.
20345     * _.reject(users, { 'age': 40, 'active': true });
20346     * // => objects for ['barney']
20347     *
20348     * // The `_.matchesProperty` iteratee shorthand.
20349     * _.reject(users, ['active', false]);
20350     * // => objects for ['fred']
20351     *
20352     * // The `_.property` iteratee shorthand.
20353     * _.reject(users, 'active');
20354     * // => objects for ['barney']
20355     */
20356    function reject(collection, predicate) {
20357      var func = isArray(collection) ? arrayFilter : baseFilter;
20358      return func(collection, negate(getIteratee(predicate, 3)));
20359    }
20360
20361    /**
20362     * Gets a random element from `collection`.
20363     *
20364     * @static
20365     * @memberOf _
20366     * @since 2.0.0
20367     * @category Collection
20368     * @param {Array|Object} collection The collection to sample.
20369     * @returns {*} Returns the random element.
20370     * @example
20371     *
20372     * _.sample([1, 2, 3, 4]);
20373     * // => 2
20374     */
20375    function sample(collection) {
20376      var func = isArray(collection) ? arraySample : baseSample;
20377      return func(collection);
20378    }
20379
20380    /**
20381     * Gets `n` random elements at unique keys from `collection` up to the
20382     * size of `collection`.
20383     *
20384     * @static
20385     * @memberOf _
20386     * @since 4.0.0
20387     * @category Collection
20388     * @param {Array|Object} collection The collection to sample.
20389     * @param {number} [n=1] The number of elements to sample.
20390     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
20391     * @returns {Array} Returns the random elements.
20392     * @example
20393     *
20394     * _.sampleSize([1, 2, 3], 2);
20395     * // => [3, 1]
20396     *
20397     * _.sampleSize([1, 2, 3], 4);
20398     * // => [2, 3, 1]
20399     */
20400    function sampleSize(collection, n, guard) {
20401      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {
20402        n = 1;
20403      } else {
20404        n = toInteger(n);
20405      }
20406      var func = isArray(collection) ? arraySampleSize : baseSampleSize;
20407      return func(collection, n);
20408    }
20409
20410    /**
20411     * Creates an array of shuffled values, using a version of the
20412     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).
20413     *
20414     * @static
20415     * @memberOf _
20416     * @since 0.1.0
20417     * @category Collection
20418     * @param {Array|Object} collection The collection to shuffle.
20419     * @returns {Array} Returns the new shuffled array.
20420     * @example
20421     *
20422     * _.shuffle([1, 2, 3, 4]);
20423     * // => [4, 1, 3, 2]
20424     */
20425    function shuffle(collection) {
20426      var func = isArray(collection) ? arrayShuffle : baseShuffle;
20427      return func(collection);
20428    }
20429
20430    /**
20431     * Gets the size of `collection` by returning its length for array-like
20432     * values or the number of own enumerable string keyed properties for objects.
20433     *
20434     * @static
20435     * @memberOf _
20436     * @since 0.1.0
20437     * @category Collection
20438     * @param {Array|Object|string} collection The collection to inspect.
20439     * @returns {number} Returns the collection size.
20440     * @example
20441     *
20442     * _.size([1, 2, 3]);
20443     * // => 3
20444     *
20445     * _.size({ 'a': 1, 'b': 2 });
20446     * // => 2
20447     *
20448     * _.size('pebbles');
20449     * // => 7
20450     */
20451    function size(collection) {
20452      if (collection == null) {
20453        return 0;
20454      }
20455      if (isArrayLike(collection)) {
20456        return isString(collection) ? stringSize(collection) : collection.length;
20457      }
20458      var tag = getTag(collection);
20459      if (tag == mapTag || tag == setTag) {
20460        return collection.size;
20461      }
20462      return baseKeys(collection).length;
20463    }
20464
20465    /**
20466     * Checks if `predicate` returns truthy for **any** element of `collection`.
20467     * Iteration is stopped once `predicate` returns truthy. The predicate is
20468     * invoked with three arguments: (value, index|key, collection).
20469     *
20470     * @static
20471     * @memberOf _
20472     * @since 0.1.0
20473     * @category Collection
20474     * @param {Array|Object} collection The collection to iterate over.
20475     * @param {Function} [predicate=_.identity] The function invoked per iteration.
20476     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
20477     * @returns {boolean} Returns `true` if any element passes the predicate check,
20478     *  else `false`.
20479     * @example
20480     *
20481     * _.some([null, 0, 'yes', false], Boolean);
20482     * // => true
20483     *
20484     * var users = [
20485     *   { 'user': 'barney', 'active': true },
20486     *   { 'user': 'fred',   'active': false }
20487     * ];
20488     *
20489     * // The `_.matches` iteratee shorthand.
20490     * _.some(users, { 'user': 'barney', 'active': false });
20491     * // => false
20492     *
20493     * // The `_.matchesProperty` iteratee shorthand.
20494     * _.some(users, ['active', false]);
20495     * // => true
20496     *
20497     * // The `_.property` iteratee shorthand.
20498     * _.some(users, 'active');
20499     * // => true
20500     */
20501    function some(collection, predicate, guard) {
20502      var func = isArray(collection) ? arraySome : baseSome;
20503      if (guard && isIterateeCall(collection, predicate, guard)) {
20504        predicate = undefined;
20505      }
20506      return func(collection, getIteratee(predicate, 3));
20507    }
20508
20509    /**
20510     * Creates an array of elements, sorted in ascending order by the results of
20511     * running each element in a collection thru each iteratee. This method
20512     * performs a stable sort, that is, it preserves the original sort order of
20513     * equal elements. The iteratees are invoked with one argument: (value).
20514     *
20515     * @static
20516     * @memberOf _
20517     * @since 0.1.0
20518     * @category Collection
20519     * @param {Array|Object} collection The collection to iterate over.
20520     * @param {...(Function|Function[])} [iteratees=[_.identity]]
20521     *  The iteratees to sort by.
20522     * @returns {Array} Returns the new sorted array.
20523     * @example
20524     *
20525     * var users = [
20526     *   { 'user': 'fred',   'age': 48 },
20527     *   { 'user': 'barney', 'age': 36 },
20528     *   { 'user': 'fred',   'age': 30 },
20529     *   { 'user': 'barney', 'age': 34 }
20530     * ];
20531     *
20532     * _.sortBy(users, [function(o) { return o.user; }]);
20533     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]
20534     *
20535     * _.sortBy(users, ['user', 'age']);
20536     * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]
20537     */
20538    var sortBy = baseRest(function(collection, iteratees) {
20539      if (collection == null) {
20540        return [];
20541      }
20542      var length = iteratees.length;
20543      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {
20544        iteratees = [];
20545      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {
20546        iteratees = [iteratees[0]];
20547      }
20548      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);
20549    });
20550
20551    /*------------------------------------------------------------------------*/
20552
20553    /**
20554     * Gets the timestamp of the number of milliseconds that have elapsed since
20555     * the Unix epoch (1 January 1970 00:00:00 UTC).
20556     *
20557     * @static
20558     * @memberOf _
20559     * @since 2.4.0
20560     * @category Date
20561     * @returns {number} Returns the timestamp.
20562     * @example
20563     *
20564     * _.defer(function(stamp) {
20565     *   console.log(_.now() - stamp);
20566     * }, _.now());
20567     * // => Logs the number of milliseconds it took for the deferred invocation.
20568     */
20569    var now = ctxNow || function() {
20570      return root.Date.now();
20571    };
20572
20573    /*------------------------------------------------------------------------*/
20574
20575    /**
20576     * The opposite of `_.before`; this method creates a function that invokes
20577     * `func` once it's called `n` or more times.
20578     *
20579     * @static
20580     * @memberOf _
20581     * @since 0.1.0
20582     * @category Function
20583     * @param {number} n The number of calls before `func` is invoked.
20584     * @param {Function} func The function to restrict.
20585     * @returns {Function} Returns the new restricted function.
20586     * @example
20587     *
20588     * var saves = ['profile', 'settings'];
20589     *
20590     * var done = _.after(saves.length, function() {
20591     *   console.log('done saving!');
20592     * });
20593     *
20594     * _.forEach(saves, function(type) {
20595     *   asyncSave({ 'type': type, 'complete': done });
20596     * });
20597     * // => Logs 'done saving!' after the two async saves have completed.
20598     */
20599    function after(n, func) {
20600      if (typeof func != 'function') {
20601        throw new TypeError(FUNC_ERROR_TEXT);
20602      }
20603      n = toInteger(n);
20604      return function() {
20605        if (--n < 1) {
20606          return func.apply(this, arguments);
20607        }
20608      };
20609    }
20610
20611    /**
20612     * Creates a function that invokes `func`, with up to `n` arguments,
20613     * ignoring any additional arguments.
20614     *
20615     * @static
20616     * @memberOf _
20617     * @since 3.0.0
20618     * @category Function
20619     * @param {Function} func The function to cap arguments for.
20620     * @param {number} [n=func.length] The arity cap.
20621     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
20622     * @returns {Function} Returns the new capped function.
20623     * @example
20624     *
20625     * _.map(['6', '8', '10'], _.ary(parseInt, 1));
20626     * // => [6, 8, 10]
20627     */
20628    function ary(func, n, guard) {
20629      n = guard ? undefined : n;
20630      n = (func && n == null) ? func.length : n;
20631      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);
20632    }
20633
20634    /**
20635     * Creates a function that invokes `func`, with the `this` binding and arguments
20636     * of the created function, while it's called less than `n` times. Subsequent
20637     * calls to the created function return the result of the last `func` invocation.
20638     *
20639     * @static
20640     * @memberOf _
20641     * @since 3.0.0
20642     * @category Function
20643     * @param {number} n The number of calls at which `func` is no longer invoked.
20644     * @param {Function} func The function to restrict.
20645     * @returns {Function} Returns the new restricted function.
20646     * @example
20647     *
20648     * jQuery(element).on('click', _.before(5, addContactToList));
20649     * // => Allows adding up to 4 contacts to the list.
20650     */
20651    function before(n, func) {
20652      var result;
20653      if (typeof func != 'function') {
20654        throw new TypeError(FUNC_ERROR_TEXT);
20655      }
20656      n = toInteger(n);
20657      return function() {
20658        if (--n > 0) {
20659          result = func.apply(this, arguments);
20660        }
20661        if (n <= 1) {
20662          func = undefined;
20663        }
20664        return result;
20665      };
20666    }
20667
20668    /**
20669     * Creates a function that invokes `func` with the `this` binding of `thisArg`
20670     * and `partials` prepended to the arguments it receives.
20671     *
20672     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,
20673     * may be used as a placeholder for partially applied arguments.
20674     *
20675     * **Note:** Unlike native `Function#bind`, this method doesn't set the "length"
20676     * property of bound functions.
20677     *
20678     * @static
20679     * @memberOf _
20680     * @since 0.1.0
20681     * @category Function
20682     * @param {Function} func The function to bind.
20683     * @param {*} thisArg The `this` binding of `func`.
20684     * @param {...*} [partials] The arguments to be partially applied.
20685     * @returns {Function} Returns the new bound function.
20686     * @example
20687     *
20688     * function greet(greeting, punctuation) {
20689     *   return greeting + ' ' + this.user + punctuation;
20690     * }
20691     *
20692     * var object = { 'user': 'fred' };
20693     *
20694     * var bound = _.bind(greet, object, 'hi');
20695     * bound('!');
20696     * // => 'hi fred!'
20697     *
20698     * // Bound with placeholders.
20699     * var bound = _.bind(greet, object, _, '!');
20700     * bound('hi');
20701     * // => 'hi fred!'
20702     */
20703    var bind = baseRest(function(func, thisArg, partials) {
20704      var bitmask = WRAP_BIND_FLAG;
20705      if (partials.length) {
20706        var holders = replaceHolders(partials, getHolder(bind));
20707        bitmask |= WRAP_PARTIAL_FLAG;
20708      }
20709      return createWrap(func, bitmask, thisArg, partials, holders);
20710    });
20711
20712    /**
20713     * Creates a function that invokes the method at `object[key]` with `partials`
20714     * prepended to the arguments it receives.
20715     *
20716     * This method differs from `_.bind` by allowing bound functions to reference
20717     * methods that may be redefined or don't yet exist. See
20718     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)
20719     * for more details.
20720     *
20721     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic
20722     * builds, may be used as a placeholder for partially applied arguments.
20723     *
20724     * @static
20725     * @memberOf _
20726     * @since 0.10.0
20727     * @category Function
20728     * @param {Object} object The object to invoke the method on.
20729     * @param {string} key The key of the method.
20730     * @param {...*} [partials] The arguments to be partially applied.
20731     * @returns {Function} Returns the new bound function.
20732     * @example
20733     *
20734     * var object = {
20735     *   'user': 'fred',
20736     *   'greet': function(greeting, punctuation) {
20737     *     return greeting + ' ' + this.user + punctuation;
20738     *   }
20739     * };
20740     *
20741     * var bound = _.bindKey(object, 'greet', 'hi');
20742     * bound('!');
20743     * // => 'hi fred!'
20744     *
20745     * object.greet = function(greeting, punctuation) {
20746     *   return greeting + 'ya ' + this.user + punctuation;
20747     * };
20748     *
20749     * bound('!');
20750     * // => 'hiya fred!'
20751     *
20752     * // Bound with placeholders.
20753     * var bound = _.bindKey(object, 'greet', _, '!');
20754     * bound('hi');
20755     * // => 'hiya fred!'
20756     */
20757    var bindKey = baseRest(function(object, key, partials) {
20758      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;
20759      if (partials.length) {
20760        var holders = replaceHolders(partials, getHolder(bindKey));
20761        bitmask |= WRAP_PARTIAL_FLAG;
20762      }
20763      return createWrap(key, bitmask, object, partials, holders);
20764    });
20765
20766    /**
20767     * Creates a function that accepts arguments of `func` and either invokes
20768     * `func` returning its result, if at least `arity` number of arguments have
20769     * been provided, or returns a function that accepts the remaining `func`
20770     * arguments, and so on. The arity of `func` may be specified if `func.length`
20771     * is not sufficient.
20772     *
20773     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,
20774     * may be used as a placeholder for provided arguments.
20775     *
20776     * **Note:** This method doesn't set the "length" property of curried functions.
20777     *
20778     * @static
20779     * @memberOf _
20780     * @since 2.0.0
20781     * @category Function
20782     * @param {Function} func The function to curry.
20783     * @param {number} [arity=func.length] The arity of `func`.
20784     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
20785     * @returns {Function} Returns the new curried function.
20786     * @example
20787     *
20788     * var abc = function(a, b, c) {
20789     *   return [a, b, c];
20790     * };
20791     *
20792     * var curried = _.curry(abc);
20793     *
20794     * curried(1)(2)(3);
20795     * // => [1, 2, 3]
20796     *
20797     * curried(1, 2)(3);
20798     * // => [1, 2, 3]
20799     *
20800     * curried(1, 2, 3);
20801     * // => [1, 2, 3]
20802     *
20803     * // Curried with placeholders.
20804     * curried(1)(_, 3)(2);
20805     * // => [1, 2, 3]
20806     */
20807    function curry(func, arity, guard) {
20808      arity = guard ? undefined : arity;
20809      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
20810      result.placeholder = curry.placeholder;
20811      return result;
20812    }
20813
20814    /**
20815     * This method is like `_.curry` except that arguments are applied to `func`
20816     * in the manner of `_.partialRight` instead of `_.partial`.
20817     *
20818     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic
20819     * builds, may be used as a placeholder for provided arguments.
20820     *
20821     * **Note:** This method doesn't set the "length" property of curried functions.
20822     *
20823     * @static
20824     * @memberOf _
20825     * @since 3.0.0
20826     * @category Function
20827     * @param {Function} func The function to curry.
20828     * @param {number} [arity=func.length] The arity of `func`.
20829     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
20830     * @returns {Function} Returns the new curried function.
20831     * @example
20832     *
20833     * var abc = function(a, b, c) {
20834     *   return [a, b, c];
20835     * };
20836     *
20837     * var curried = _.curryRight(abc);
20838     *
20839     * curried(3)(2)(1);
20840     * // => [1, 2, 3]
20841     *
20842     * curried(2, 3)(1);
20843     * // => [1, 2, 3]
20844     *
20845     * curried(1, 2, 3);
20846     * // => [1, 2, 3]
20847     *
20848     * // Curried with placeholders.
20849     * curried(3)(1, _)(2);
20850     * // => [1, 2, 3]
20851     */
20852    function curryRight(func, arity, guard) {
20853      arity = guard ? undefined : arity;
20854      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
20855      result.placeholder = curryRight.placeholder;
20856      return result;
20857    }
20858
20859    /**
20860     * Creates a debounced function that delays invoking `func` until after `wait`
20861     * milliseconds have elapsed since the last time the debounced function was
20862     * invoked. The debounced function comes with a `cancel` method to cancel
20863     * delayed `func` invocations and a `flush` method to immediately invoke them.
20864     * Provide `options` to indicate whether `func` should be invoked on the
20865     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
20866     * with the last arguments provided to the debounced function. Subsequent
20867     * calls to the debounced function return the result of the last `func`
20868     * invocation.
20869     *
20870     * **Note:** If `leading` and `trailing` options are `true`, `func` is
20871     * invoked on the trailing edge of the timeout only if the debounced function
20872     * is invoked more than once during the `wait` timeout.
20873     *
20874     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
20875     * until to the next tick, similar to `setTimeout` with a timeout of `0`.
20876     *
20877     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
20878     * for details over the differences between `_.debounce` and `_.throttle`.
20879     *
20880     * @static
20881     * @memberOf _
20882     * @since 0.1.0
20883     * @category Function
20884     * @param {Function} func The function to debounce.
20885     * @param {number} [wait=0] The number of milliseconds to delay.
20886     * @param {Object} [options={}] The options object.
20887     * @param {boolean} [options.leading=false]
20888     *  Specify invoking on the leading edge of the timeout.
20889     * @param {number} [options.maxWait]
20890     *  The maximum time `func` is allowed to be delayed before it's invoked.
20891     * @param {boolean} [options.trailing=true]
20892     *  Specify invoking on the trailing edge of the timeout.
20893     * @returns {Function} Returns the new debounced function.
20894     * @example
20895     *
20896     * // Avoid costly calculations while the window size is in flux.
20897     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
20898     *
20899     * // Invoke `sendMail` when clicked, debouncing subsequent calls.
20900     * jQuery(element).on('click', _.debounce(sendMail, 300, {
20901     *   'leading': true,
20902     *   'trailing': false
20903     * }));
20904     *
20905     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
20906     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
20907     * var source = new EventSource('/stream');
20908     * jQuery(source).on('message', debounced);
20909     *
20910     * // Cancel the trailing debounced invocation.
20911     * jQuery(window).on('popstate', debounced.cancel);
20912     */
20913    function debounce(func, wait, options) {
20914      var lastArgs,
20915          lastThis,
20916          maxWait,
20917          result,
20918          timerId,
20919          lastCallTime,
20920          lastInvokeTime = 0,
20921          leading = false,
20922          maxing = false,
20923          trailing = true;
20924
20925      if (typeof func != 'function') {
20926        throw new TypeError(FUNC_ERROR_TEXT);
20927      }
20928      wait = toNumber(wait) || 0;
20929      if (isObject(options)) {
20930        leading = !!options.leading;
20931        maxing = 'maxWait' in options;
20932        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
20933        trailing = 'trailing' in options ? !!options.trailing : trailing;
20934      }
20935
20936      function invokeFunc(time) {
20937        var args = lastArgs,
20938            thisArg = lastThis;
20939
20940        lastArgs = lastThis = undefined;
20941        lastInvokeTime = time;
20942        result = func.apply(thisArg, args);
20943        return result;
20944      }
20945
20946      function leadingEdge(time) {
20947        // Reset any `maxWait` timer.
20948        lastInvokeTime = time;
20949        // Start the timer for the trailing edge.
20950        timerId = setTimeout(timerExpired, wait);
20951        // Invoke the leading edge.
20952        return leading ? invokeFunc(time) : result;
20953      }
20954
20955      function remainingWait(time) {
20956        var timeSinceLastCall = time - lastCallTime,
20957            timeSinceLastInvoke = time - lastInvokeTime,
20958            timeWaiting = wait - timeSinceLastCall;
20959
20960        return maxing
20961          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)
20962          : timeWaiting;
20963      }
20964
20965      function shouldInvoke(time) {
20966        var timeSinceLastCall = time - lastCallTime,
20967            timeSinceLastInvoke = time - lastInvokeTime;
20968
20969        // Either this is the first call, activity has stopped and we're at the
20970        // trailing edge, the system time has gone backwards and we're treating
20971        // it as the trailing edge, or we've hit the `maxWait` limit.
20972        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
20973          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
20974      }
20975
20976      function timerExpired() {
20977        var time = now();
20978        if (shouldInvoke(time)) {
20979          return trailingEdge(time);
20980        }
20981        // Restart the timer.
20982        timerId = setTimeout(timerExpired, remainingWait(time));
20983      }
20984
20985      function trailingEdge(time) {
20986        timerId = undefined;
20987
20988        // Only invoke if we have `lastArgs` which means `func` has been
20989        // debounced at least once.
20990        if (trailing && lastArgs) {
20991          return invokeFunc(time);
20992        }
20993        lastArgs = lastThis = undefined;
20994        return result;
20995      }
20996
20997      function cancel() {
20998        if (timerId !== undefined) {
20999          clearTimeout(timerId);
21000        }
21001        lastInvokeTime = 0;
21002        lastArgs = lastCallTime = lastThis = timerId = undefined;
21003      }
21004
21005      function flush() {
21006        return timerId === undefined ? result : trailingEdge(now());
21007      }
21008
21009      function debounced() {
21010        var time = now(),
21011            isInvoking = shouldInvoke(time);
21012
21013        lastArgs = arguments;
21014        lastThis = this;
21015        lastCallTime = time;
21016
21017        if (isInvoking) {
21018          if (timerId === undefined) {
21019            return leadingEdge(lastCallTime);
21020          }
21021          if (maxing) {
21022            // Handle invocations in a tight loop.
21023            clearTimeout(timerId);
21024            timerId = setTimeout(timerExpired, wait);
21025            return invokeFunc(lastCallTime);
21026          }
21027        }
21028        if (timerId === undefined) {
21029          timerId = setTimeout(timerExpired, wait);
21030        }
21031        return result;
21032      }
21033      debounced.cancel = cancel;
21034      debounced.flush = flush;
21035      return debounced;
21036    }
21037
21038    /**
21039     * Defers invoking the `func` until the current call stack has cleared. Any
21040     * additional arguments are provided to `func` when it's invoked.
21041     *
21042     * @static
21043     * @memberOf _
21044     * @since 0.1.0
21045     * @category Function
21046     * @param {Function} func The function to defer.
21047     * @param {...*} [args] The arguments to invoke `func` with.
21048     * @returns {number} Returns the timer id.
21049     * @example
21050     *
21051     * _.defer(function(text) {
21052     *   console.log(text);
21053     * }, 'deferred');
21054     * // => Logs 'deferred' after one millisecond.
21055     */
21056    var defer = baseRest(function(func, args) {
21057      return baseDelay(func, 1, args);
21058    });
21059
21060    /**
21061     * Invokes `func` after `wait` milliseconds. Any additional arguments are
21062     * provided to `func` when it's invoked.
21063     *
21064     * @static
21065     * @memberOf _
21066     * @since 0.1.0
21067     * @category Function
21068     * @param {Function} func The function to delay.
21069     * @param {number} wait The number of milliseconds to delay invocation.
21070     * @param {...*} [args] The arguments to invoke `func` with.
21071     * @returns {number} Returns the timer id.
21072     * @example
21073     *
21074     * _.delay(function(text) {
21075     *   console.log(text);
21076     * }, 1000, 'later');
21077     * // => Logs 'later' after one second.
21078     */
21079    var delay = baseRest(function(func, wait, args) {
21080      return baseDelay(func, toNumber(wait) || 0, args);
21081    });
21082
21083    /**
21084     * Creates a function that invokes `func` with arguments reversed.
21085     *
21086     * @static
21087     * @memberOf _
21088     * @since 4.0.0
21089     * @category Function
21090     * @param {Function} func The function to flip arguments for.
21091     * @returns {Function} Returns the new flipped function.
21092     * @example
21093     *
21094     * var flipped = _.flip(function() {
21095     *   return _.toArray(arguments);
21096     * });
21097     *
21098     * flipped('a', 'b', 'c', 'd');
21099     * // => ['d', 'c', 'b', 'a']
21100     */
21101    function flip(func) {
21102      return createWrap(func, WRAP_FLIP_FLAG);
21103    }
21104
21105    /**
21106     * Creates a function that memoizes the result of `func`. If `resolver` is
21107     * provided, it determines the cache key for storing the result based on the
21108     * arguments provided to the memoized function. By default, the first argument
21109     * provided to the memoized function is used as the map cache key. The `func`
21110     * is invoked with the `this` binding of the memoized function.
21111     *
21112     * **Note:** The cache is exposed as the `cache` property on the memoized
21113     * function. Its creation may be customized by replacing the `_.memoize.Cache`
21114     * constructor with one whose instances implement the
21115     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
21116     * method interface of `clear`, `delete`, `get`, `has`, and `set`.
21117     *
21118     * @static
21119     * @memberOf _
21120     * @since 0.1.0
21121     * @category Function
21122     * @param {Function} func The function to have its output memoized.
21123     * @param {Function} [resolver] The function to resolve the cache key.
21124     * @returns {Function} Returns the new memoized function.
21125     * @example
21126     *
21127     * var object = { 'a': 1, 'b': 2 };
21128     * var other = { 'c': 3, 'd': 4 };
21129     *
21130     * var values = _.memoize(_.values);
21131     * values(object);
21132     * // => [1, 2]
21133     *
21134     * values(other);
21135     * // => [3, 4]
21136     *
21137     * object.a = 2;
21138     * values(object);
21139     * // => [1, 2]
21140     *
21141     * // Modify the result cache.
21142     * values.cache.set(object, ['a', 'b']);
21143     * values(object);
21144     * // => ['a', 'b']
21145     *
21146     * // Replace `_.memoize.Cache`.
21147     * _.memoize.Cache = WeakMap;
21148     */
21149    function memoize(func, resolver) {
21150      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {
21151        throw new TypeError(FUNC_ERROR_TEXT);
21152      }
21153      var memoized = function() {
21154        var args = arguments,
21155            key = resolver ? resolver.apply(this, args) : args[0],
21156            cache = memoized.cache;
21157
21158        if (cache.has(key)) {
21159          return cache.get(key);
21160        }
21161        var result = func.apply(this, args);
21162        memoized.cache = cache.set(key, result) || cache;
21163        return result;
21164      };
21165      memoized.cache = new (memoize.Cache || MapCache);
21166      return memoized;
21167    }
21168
21169    // Expose `MapCache`.
21170    memoize.Cache = MapCache;
21171
21172    /**
21173     * Creates a function that negates the result of the predicate `func`. The
21174     * `func` predicate is invoked with the `this` binding and arguments of the
21175     * created function.
21176     *
21177     * @static
21178     * @memberOf _
21179     * @since 3.0.0
21180     * @category Function
21181     * @param {Function} predicate The predicate to negate.
21182     * @returns {Function} Returns the new negated function.
21183     * @example
21184     *
21185     * function isEven(n) {
21186     *   return n % 2 == 0;
21187     * }
21188     *
21189     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));
21190     * // => [1, 3, 5]
21191     */
21192    function negate(predicate) {
21193      if (typeof predicate != 'function') {
21194        throw new TypeError(FUNC_ERROR_TEXT);
21195      }
21196      return function() {
21197        var args = arguments;
21198        switch (args.length) {
21199          case 0: return !predicate.call(this);
21200          case 1: return !predicate.call(this, args[0]);
21201          case 2: return !predicate.call(this, args[0], args[1]);
21202          case 3: return !predicate.call(this, args[0], args[1], args[2]);
21203        }
21204        return !predicate.apply(this, args);
21205      };
21206    }
21207
21208    /**
21209     * Creates a function that is restricted to invoking `func` once. Repeat calls
21210     * to the function return the value of the first invocation. The `func` is
21211     * invoked with the `this` binding and arguments of the created function.
21212     *
21213     * @static
21214     * @memberOf _
21215     * @since 0.1.0
21216     * @category Function
21217     * @param {Function} func The function to restrict.
21218     * @returns {Function} Returns the new restricted function.
21219     * @example
21220     *
21221     * var initialize = _.once(createApplication);
21222     * initialize();
21223     * initialize();
21224     * // => `createApplication` is invoked once
21225     */
21226    function once(func) {
21227      return before(2, func);
21228    }
21229
21230    /**
21231     * Creates a function that invokes `func` with its arguments transformed.
21232     *
21233     * @static
21234     * @since 4.0.0
21235     * @memberOf _
21236     * @category Function
21237     * @param {Function} func The function to wrap.
21238     * @param {...(Function|Function[])} [transforms=[_.identity]]
21239     *  The argument transforms.
21240     * @returns {Function} Returns the new function.
21241     * @example
21242     *
21243     * function doubled(n) {
21244     *   return n * 2;
21245     * }
21246     *
21247     * function square(n) {
21248     *   return n * n;
21249     * }
21250     *
21251     * var func = _.overArgs(function(x, y) {
21252     *   return [x, y];
21253     * }, [square, doubled]);
21254     *
21255     * func(9, 3);
21256     * // => [81, 6]
21257     *
21258     * func(10, 5);
21259     * // => [100, 10]
21260     */
21261    var overArgs = castRest(function(func, transforms) {
21262      transforms = (transforms.length == 1 && isArray(transforms[0]))
21263        ? arrayMap(transforms[0], baseUnary(getIteratee()))
21264        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));
21265
21266      var funcsLength = transforms.length;
21267      return baseRest(function(args) {
21268        var index = -1,
21269            length = nativeMin(args.length, funcsLength);
21270
21271        while (++index < length) {
21272          args[index] = transforms[index].call(this, args[index]);
21273        }
21274        return apply(func, this, args);
21275      });
21276    });
21277
21278    /**
21279     * Creates a function that invokes `func` with `partials` prepended to the
21280     * arguments it receives. This method is like `_.bind` except it does **not**
21281     * alter the `this` binding.
21282     *
21283     * The `_.partial.placeholder` value, which defaults to `_` in monolithic
21284     * builds, may be used as a placeholder for partially applied arguments.
21285     *
21286     * **Note:** This method doesn't set the "length" property of partially
21287     * applied functions.
21288     *
21289     * @static
21290     * @memberOf _
21291     * @since 0.2.0
21292     * @category Function
21293     * @param {Function} func The function to partially apply arguments to.
21294     * @param {...*} [partials] The arguments to be partially applied.
21295     * @returns {Function} Returns the new partially applied function.
21296     * @example
21297     *
21298     * function greet(greeting, name) {
21299     *   return greeting + ' ' + name;
21300     * }
21301     *
21302     * var sayHelloTo = _.partial(greet, 'hello');
21303     * sayHelloTo('fred');
21304     * // => 'hello fred'
21305     *
21306     * // Partially applied with placeholders.
21307     * var greetFred = _.partial(greet, _, 'fred');
21308     * greetFred('hi');
21309     * // => 'hi fred'
21310     */
21311    var partial = baseRest(function(func, partials) {
21312      var holders = replaceHolders(partials, getHolder(partial));
21313      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);
21314    });
21315
21316    /**
21317     * This method is like `_.partial` except that partially applied arguments
21318     * are appended to the arguments it receives.
21319     *
21320     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic
21321     * builds, may be used as a placeholder for partially applied arguments.
21322     *
21323     * **Note:** This method doesn't set the "length" property of partially
21324     * applied functions.
21325     *
21326     * @static
21327     * @memberOf _
21328     * @since 1.0.0
21329     * @category Function
21330     * @param {Function} func The function to partially apply arguments to.
21331     * @param {...*} [partials] The arguments to be partially applied.
21332     * @returns {Function} Returns the new partially applied function.
21333     * @example
21334     *
21335     * function greet(greeting, name) {
21336     *   return greeting + ' ' + name;
21337     * }
21338     *
21339     * var greetFred = _.partialRight(greet, 'fred');
21340     * greetFred('hi');
21341     * // => 'hi fred'
21342     *
21343     * // Partially applied with placeholders.
21344     * var sayHelloTo = _.partialRight(greet, 'hello', _);
21345     * sayHelloTo('fred');
21346     * // => 'hello fred'
21347     */
21348    var partialRight = baseRest(function(func, partials) {
21349      var holders = replaceHolders(partials, getHolder(partialRight));
21350      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);
21351    });
21352
21353    /**
21354     * Creates a function that invokes `func` with arguments arranged according
21355     * to the specified `indexes` where the argument value at the first index is
21356     * provided as the first argument, the argument value at the second index is
21357     * provided as the second argument, and so on.
21358     *
21359     * @static
21360     * @memberOf _
21361     * @since 3.0.0
21362     * @category Function
21363     * @param {Function} func The function to rearrange arguments for.
21364     * @param {...(number|number[])} indexes The arranged argument indexes.
21365     * @returns {Function} Returns the new function.
21366     * @example
21367     *
21368     * var rearged = _.rearg(function(a, b, c) {
21369     *   return [a, b, c];
21370     * }, [2, 0, 1]);
21371     *
21372     * rearged('b', 'c', 'a')
21373     * // => ['a', 'b', 'c']
21374     */
21375    var rearg = flatRest(function(func, indexes) {
21376      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);
21377    });
21378
21379    /**
21380     * Creates a function that invokes `func` with the `this` binding of the
21381     * created function and arguments from `start` and beyond provided as
21382     * an array.
21383     *
21384     * **Note:** This method is based on the
21385     * [rest parameter](https://mdn.io/rest_parameters).
21386     *
21387     * @static
21388     * @memberOf _
21389     * @since 4.0.0
21390     * @category Function
21391     * @param {Function} func The function to apply a rest parameter to.
21392     * @param {number} [start=func.length-1] The start position of the rest parameter.
21393     * @returns {Function} Returns the new function.
21394     * @example
21395     *
21396     * var say = _.rest(function(what, names) {
21397     *   return what + ' ' + _.initial(names).join(', ') +
21398     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);
21399     * });
21400     *
21401     * say('hello', 'fred', 'barney', 'pebbles');
21402     * // => 'hello fred, barney, & pebbles'
21403     */
21404    function rest(func, start) {
21405      if (typeof func != 'function') {
21406        throw new TypeError(FUNC_ERROR_TEXT);
21407      }
21408      start = start === undefined ? start : toInteger(start);
21409      return baseRest(func, start);
21410    }
21411
21412    /**
21413     * Creates a function that invokes `func` with the `this` binding of the
21414     * create function and an array of arguments much like
21415     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).
21416     *
21417     * **Note:** This method is based on the
21418     * [spread operator](https://mdn.io/spread_operator).
21419     *
21420     * @static
21421     * @memberOf _
21422     * @since 3.2.0
21423     * @category Function
21424     * @param {Function} func The function to spread arguments over.
21425     * @param {number} [start=0] The start position of the spread.
21426     * @returns {Function} Returns the new function.
21427     * @example
21428     *
21429     * var say = _.spread(function(who, what) {
21430     *   return who + ' says ' + what;
21431     * });
21432     *
21433     * say(['fred', 'hello']);
21434     * // => 'fred says hello'
21435     *
21436     * var numbers = Promise.all([
21437     *   Promise.resolve(40),
21438     *   Promise.resolve(36)
21439     * ]);
21440     *
21441     * numbers.then(_.spread(function(x, y) {
21442     *   return x + y;
21443     * }));
21444     * // => a Promise of 76
21445     */
21446    function spread(func, start) {
21447      if (typeof func != 'function') {
21448        throw new TypeError(FUNC_ERROR_TEXT);
21449      }
21450      start = start == null ? 0 : nativeMax(toInteger(start), 0);
21451      return baseRest(function(args) {
21452        var array = args[start],
21453            otherArgs = castSlice(args, 0, start);
21454
21455        if (array) {
21456          arrayPush(otherArgs, array);
21457        }
21458        return apply(func, this, otherArgs);
21459      });
21460    }
21461
21462    /**
21463     * Creates a throttled function that only invokes `func` at most once per
21464     * every `wait` milliseconds. The throttled function comes with a `cancel`
21465     * method to cancel delayed `func` invocations and a `flush` method to
21466     * immediately invoke them. Provide `options` to indicate whether `func`
21467     * should be invoked on the leading and/or trailing edge of the `wait`
21468     * timeout. The `func` is invoked with the last arguments provided to the
21469     * throttled function. Subsequent calls to the throttled function return the
21470     * result of the last `func` invocation.
21471     *
21472     * **Note:** If `leading` and `trailing` options are `true`, `func` is
21473     * invoked on the trailing edge of the timeout only if the throttled function
21474     * is invoked more than once during the `wait` timeout.
21475     *
21476     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
21477     * until to the next tick, similar to `setTimeout` with a timeout of `0`.
21478     *
21479     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
21480     * for details over the differences between `_.throttle` and `_.debounce`.
21481     *
21482     * @static
21483     * @memberOf _
21484     * @since 0.1.0
21485     * @category Function
21486     * @param {Function} func The function to throttle.
21487     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
21488     * @param {Object} [options={}] The options object.
21489     * @param {boolean} [options.leading=true]
21490     *  Specify invoking on the leading edge of the timeout.
21491     * @param {boolean} [options.trailing=true]
21492     *  Specify invoking on the trailing edge of the timeout.
21493     * @returns {Function} Returns the new throttled function.
21494     * @example
21495     *
21496     * // Avoid excessively updating the position while scrolling.
21497     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
21498     *
21499     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
21500     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
21501     * jQuery(element).on('click', throttled);
21502     *
21503     * // Cancel the trailing throttled invocation.
21504     * jQuery(window).on('popstate', throttled.cancel);
21505     */
21506    function throttle(func, wait, options) {
21507      var leading = true,
21508          trailing = true;
21509
21510      if (typeof func != 'function') {
21511        throw new TypeError(FUNC_ERROR_TEXT);
21512      }
21513      if (isObject(options)) {
21514        leading = 'leading' in options ? !!options.leading : leading;
21515        trailing = 'trailing' in options ? !!options.trailing : trailing;
21516      }
21517      return debounce(func, wait, {
21518        'leading': leading,
21519        'maxWait': wait,
21520        'trailing': trailing
21521      });
21522    }
21523
21524    /**
21525     * Creates a function that accepts up to one argument, ignoring any
21526     * additional arguments.
21527     *
21528     * @static
21529     * @memberOf _
21530     * @since 4.0.0
21531     * @category Function
21532     * @param {Function} func The function to cap arguments for.
21533     * @returns {Function} Returns the new capped function.
21534     * @example
21535     *
21536     * _.map(['6', '8', '10'], _.unary(parseInt));
21537     * // => [6, 8, 10]
21538     */
21539    function unary(func) {
21540      return ary(func, 1);
21541    }
21542
21543    /**
21544     * Creates a function that provides `value` to `wrapper` as its first
21545     * argument. Any additional arguments provided to the function are appended
21546     * to those provided to the `wrapper`. The wrapper is invoked with the `this`
21547     * binding of the created function.
21548     *
21549     * @static
21550     * @memberOf _
21551     * @since 0.1.0
21552     * @category Function
21553     * @param {*} value The value to wrap.
21554     * @param {Function} [wrapper=identity] The wrapper function.
21555     * @returns {Function} Returns the new function.
21556     * @example
21557     *
21558     * var p = _.wrap(_.escape, function(func, text) {
21559     *   return '<p>' + func(text) + '</p>';
21560     * });
21561     *
21562     * p('fred, barney, & pebbles');
21563     * // => '<p>fred, barney, &amp; pebbles</p>'
21564     */
21565    function wrap(value, wrapper) {
21566      return partial(castFunction(wrapper), value);
21567    }
21568
21569    /*------------------------------------------------------------------------*/
21570
21571    /**
21572     * Casts `value` as an array if it's not one.
21573     *
21574     * @static
21575     * @memberOf _
21576     * @since 4.4.0
21577     * @category Lang
21578     * @param {*} value The value to inspect.
21579     * @returns {Array} Returns the cast array.
21580     * @example
21581     *
21582     * _.castArray(1);
21583     * // => [1]
21584     *
21585     * _.castArray({ 'a': 1 });
21586     * // => [{ 'a': 1 }]
21587     *
21588     * _.castArray('abc');
21589     * // => ['abc']
21590     *
21591     * _.castArray(null);
21592     * // => [null]
21593     *
21594     * _.castArray(undefined);
21595     * // => [undefined]
21596     *
21597     * _.castArray();
21598     * // => []
21599     *
21600     * var array = [1, 2, 3];
21601     * console.log(_.castArray(array) === array);
21602     * // => true
21603     */
21604    function castArray() {
21605      if (!arguments.length) {
21606        return [];
21607      }
21608      var value = arguments[0];
21609      return isArray(value) ? value : [value];
21610    }
21611
21612    /**
21613     * Creates a shallow clone of `value`.
21614     *
21615     * **Note:** This method is loosely based on the
21616     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)
21617     * and supports cloning arrays, array buffers, booleans, date objects, maps,
21618     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed
21619     * arrays. The own enumerable properties of `arguments` objects are cloned
21620     * as plain objects. An empty object is returned for uncloneable values such
21621     * as error objects, functions, DOM nodes, and WeakMaps.
21622     *
21623     * @static
21624     * @memberOf _
21625     * @since 0.1.0
21626     * @category Lang
21627     * @param {*} value The value to clone.
21628     * @returns {*} Returns the cloned value.
21629     * @see _.cloneDeep
21630     * @example
21631     *
21632     * var objects = [{ 'a': 1 }, { 'b': 2 }];
21633     *
21634     * var shallow = _.clone(objects);
21635     * console.log(shallow[0] === objects[0]);
21636     * // => true
21637     */
21638    function clone(value) {
21639      return baseClone(value, CLONE_SYMBOLS_FLAG);
21640    }
21641
21642    /**
21643     * This method is like `_.clone` except that it accepts `customizer` which
21644     * is invoked to produce the cloned value. If `customizer` returns `undefined`,
21645     * cloning is handled by the method instead. The `customizer` is invoked with
21646     * up to four arguments; (value [, index|key, object, stack]).
21647     *
21648     * @static
21649     * @memberOf _
21650     * @since 4.0.0
21651     * @category Lang
21652     * @param {*} value The value to clone.
21653     * @param {Function} [customizer] The function to customize cloning.
21654     * @returns {*} Returns the cloned value.
21655     * @see _.cloneDeepWith
21656     * @example
21657     *
21658     * function customizer(value) {
21659     *   if (_.isElement(value)) {
21660     *     return value.cloneNode(false);
21661     *   }
21662     * }
21663     *
21664     * var el = _.cloneWith(document.body, customizer);
21665     *
21666     * console.log(el === document.body);
21667     * // => false
21668     * console.log(el.nodeName);
21669     * // => 'BODY'
21670     * console.log(el.childNodes.length);
21671     * // => 0
21672     */
21673    function cloneWith(value, customizer) {
21674      customizer = typeof customizer == 'function' ? customizer : undefined;
21675      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);
21676    }
21677
21678    /**
21679     * This method is like `_.clone` except that it recursively clones `value`.
21680     *
21681     * @static
21682     * @memberOf _
21683     * @since 1.0.0
21684     * @category Lang
21685     * @param {*} value The value to recursively clone.
21686     * @returns {*} Returns the deep cloned value.
21687     * @see _.clone
21688     * @example
21689     *
21690     * var objects = [{ 'a': 1 }, { 'b': 2 }];
21691     *
21692     * var deep = _.cloneDeep(objects);
21693     * console.log(deep[0] === objects[0]);
21694     * // => false
21695     */
21696    function cloneDeep(value) {
21697      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);
21698    }
21699
21700    /**
21701     * This method is like `_.cloneWith` except that it recursively clones `value`.
21702     *
21703     * @static
21704     * @memberOf _
21705     * @since 4.0.0
21706     * @category Lang
21707     * @param {*} value The value to recursively clone.
21708     * @param {Function} [customizer] The function to customize cloning.
21709     * @returns {*} Returns the deep cloned value.
21710     * @see _.cloneWith
21711     * @example
21712     *
21713     * function customizer(value) {
21714     *   if (_.isElement(value)) {
21715     *     return value.cloneNode(true);
21716     *   }
21717     * }
21718     *
21719     * var el = _.cloneDeepWith(document.body, customizer);
21720     *
21721     * console.log(el === document.body);
21722     * // => false
21723     * console.log(el.nodeName);
21724     * // => 'BODY'
21725     * console.log(el.childNodes.length);
21726     * // => 20
21727     */
21728    function cloneDeepWith(value, customizer) {
21729      customizer = typeof customizer == 'function' ? customizer : undefined;
21730      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);
21731    }
21732
21733    /**
21734     * Checks if `object` conforms to `source` by invoking the predicate
21735     * properties of `source` with the corresponding property values of `object`.
21736     *
21737     * **Note:** This method is equivalent to `_.conforms` when `source` is
21738     * partially applied.
21739     *
21740     * @static
21741     * @memberOf _
21742     * @since 4.14.0
21743     * @category Lang
21744     * @param {Object} object The object to inspect.
21745     * @param {Object} source The object of property predicates to conform to.
21746     * @returns {boolean} Returns `true` if `object` conforms, else `false`.
21747     * @example
21748     *
21749     * var object = { 'a': 1, 'b': 2 };
21750     *
21751     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });
21752     * // => true
21753     *
21754     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });
21755     * // => false
21756     */
21757    function conformsTo(object, source) {
21758      return source == null || baseConformsTo(object, source, keys(source));
21759    }
21760
21761    /**
21762     * Performs a
21763     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
21764     * comparison between two values to determine if they are equivalent.
21765     *
21766     * @static
21767     * @memberOf _
21768     * @since 4.0.0
21769     * @category Lang
21770     * @param {*} value The value to compare.
21771     * @param {*} other The other value to compare.
21772     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
21773     * @example
21774     *
21775     * var object = { 'a': 1 };
21776     * var other = { 'a': 1 };
21777     *
21778     * _.eq(object, object);
21779     * // => true
21780     *
21781     * _.eq(object, other);
21782     * // => false
21783     *
21784     * _.eq('a', 'a');
21785     * // => true
21786     *
21787     * _.eq('a', Object('a'));
21788     * // => false
21789     *
21790     * _.eq(NaN, NaN);
21791     * // => true
21792     */
21793    function eq(value, other) {
21794      return value === other || (value !== value && other !== other);
21795    }
21796
21797    /**
21798     * Checks if `value` is greater than `other`.
21799     *
21800     * @static
21801     * @memberOf _
21802     * @since 3.9.0
21803     * @category Lang
21804     * @param {*} value The value to compare.
21805     * @param {*} other The other value to compare.
21806     * @returns {boolean} Returns `true` if `value` is greater than `other`,
21807     *  else `false`.
21808     * @see _.lt
21809     * @example
21810     *
21811     * _.gt(3, 1);
21812     * // => true
21813     *
21814     * _.gt(3, 3);
21815     * // => false
21816     *
21817     * _.gt(1, 3);
21818     * // => false
21819     */
21820    var gt = createRelationalOperation(baseGt);
21821
21822    /**
21823     * Checks if `value` is greater than or equal to `other`.
21824     *
21825     * @static
21826     * @memberOf _
21827     * @since 3.9.0
21828     * @category Lang
21829     * @param {*} value The value to compare.
21830     * @param {*} other The other value to compare.
21831     * @returns {boolean} Returns `true` if `value` is greater than or equal to
21832     *  `other`, else `false`.
21833     * @see _.lte
21834     * @example
21835     *
21836     * _.gte(3, 1);
21837     * // => true
21838     *
21839     * _.gte(3, 3);
21840     * // => true
21841     *
21842     * _.gte(1, 3);
21843     * // => false
21844     */
21845    var gte = createRelationalOperation(function(value, other) {
21846      return value >= other;
21847    });
21848
21849    /**
21850     * Checks if `value` is likely an `arguments` object.
21851     *
21852     * @static
21853     * @memberOf _
21854     * @since 0.1.0
21855     * @category Lang
21856     * @param {*} value The value to check.
21857     * @returns {boolean} Returns `true` if `value` is an `arguments` object,
21858     *  else `false`.
21859     * @example
21860     *
21861     * _.isArguments(function() { return arguments; }());
21862     * // => true
21863     *
21864     * _.isArguments([1, 2, 3]);
21865     * // => false
21866     */
21867    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {
21868      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&
21869        !propertyIsEnumerable.call(value, 'callee');
21870    };
21871
21872    /**
21873     * Checks if `value` is classified as an `Array` object.
21874     *
21875     * @static
21876     * @memberOf _
21877     * @since 0.1.0
21878     * @category Lang
21879     * @param {*} value The value to check.
21880     * @returns {boolean} Returns `true` if `value` is an array, else `false`.
21881     * @example
21882     *
21883     * _.isArray([1, 2, 3]);
21884     * // => true
21885     *
21886     * _.isArray(document.body.children);
21887     * // => false
21888     *
21889     * _.isArray('abc');
21890     * // => false
21891     *
21892     * _.isArray(_.noop);
21893     * // => false
21894     */
21895    var isArray = Array.isArray;
21896
21897    /**
21898     * Checks if `value` is classified as an `ArrayBuffer` object.
21899     *
21900     * @static
21901     * @memberOf _
21902     * @since 4.3.0
21903     * @category Lang
21904     * @param {*} value The value to check.
21905     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
21906     * @example
21907     *
21908     * _.isArrayBuffer(new ArrayBuffer(2));
21909     * // => true
21910     *
21911     * _.isArrayBuffer(new Array(2));
21912     * // => false
21913     */
21914    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;
21915
21916    /**
21917     * Checks if `value` is array-like. A value is considered array-like if it's
21918     * not a function and has a `value.length` that's an integer greater than or
21919     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
21920     *
21921     * @static
21922     * @memberOf _
21923     * @since 4.0.0
21924     * @category Lang
21925     * @param {*} value The value to check.
21926     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
21927     * @example
21928     *
21929     * _.isArrayLike([1, 2, 3]);
21930     * // => true
21931     *
21932     * _.isArrayLike(document.body.children);
21933     * // => true
21934     *
21935     * _.isArrayLike('abc');
21936     * // => true
21937     *
21938     * _.isArrayLike(_.noop);
21939     * // => false
21940     */
21941    function isArrayLike(value) {
21942      return value != null && isLength(value.length) && !isFunction(value);
21943    }
21944
21945    /**
21946     * This method is like `_.isArrayLike` except that it also checks if `value`
21947     * is an object.
21948     *
21949     * @static
21950     * @memberOf _
21951     * @since 4.0.0
21952     * @category Lang
21953     * @param {*} value The value to check.
21954     * @returns {boolean} Returns `true` if `value` is an array-like object,
21955     *  else `false`.
21956     * @example
21957     *
21958     * _.isArrayLikeObject([1, 2, 3]);
21959     * // => true
21960     *
21961     * _.isArrayLikeObject(document.body.children);
21962     * // => true
21963     *
21964     * _.isArrayLikeObject('abc');
21965     * // => false
21966     *
21967     * _.isArrayLikeObject(_.noop);
21968     * // => false
21969     */
21970    function isArrayLikeObject(value) {
21971      return isObjectLike(value) && isArrayLike(value);
21972    }
21973
21974    /**
21975     * Checks if `value` is classified as a boolean primitive or object.
21976     *
21977     * @static
21978     * @memberOf _
21979     * @since 0.1.0
21980     * @category Lang
21981     * @param {*} value The value to check.
21982     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.
21983     * @example
21984     *
21985     * _.isBoolean(false);
21986     * // => true
21987     *
21988     * _.isBoolean(null);
21989     * // => false
21990     */
21991    function isBoolean(value) {
21992      return value === true || value === false ||
21993        (isObjectLike(value) && baseGetTag(value) == boolTag);
21994    }
21995
21996    /**
21997     * Checks if `value` is a buffer.
21998     *
21999     * @static
22000     * @memberOf _
22001     * @since 4.3.0
22002     * @category Lang
22003     * @param {*} value The value to check.
22004     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
22005     * @example
22006     *
22007     * _.isBuffer(new Buffer(2));
22008     * // => true
22009     *
22010     * _.isBuffer(new Uint8Array(2));
22011     * // => false
22012     */
22013    var isBuffer = nativeIsBuffer || stubFalse;
22014
22015    /**
22016     * Checks if `value` is classified as a `Date` object.
22017     *
22018     * @static
22019     * @memberOf _
22020     * @since 0.1.0
22021     * @category Lang
22022     * @param {*} value The value to check.
22023     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
22024     * @example
22025     *
22026     * _.isDate(new Date);
22027     * // => true
22028     *
22029     * _.isDate('Mon April 23 2012');
22030     * // => false
22031     */
22032    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;
22033
22034    /**
22035     * Checks if `value` is likely a DOM element.
22036     *
22037     * @static
22038     * @memberOf _
22039     * @since 0.1.0
22040     * @category Lang
22041     * @param {*} value The value to check.
22042     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.
22043     * @example
22044     *
22045     * _.isElement(document.body);
22046     * // => true
22047     *
22048     * _.isElement('<body>');
22049     * // => false
22050     */
22051    function isElement(value) {
22052      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);
22053    }
22054
22055    /**
22056     * Checks if `value` is an empty object, collection, map, or set.
22057     *
22058     * Objects are considered empty if they have no own enumerable string keyed
22059     * properties.
22060     *
22061     * Array-like values such as `arguments` objects, arrays, buffers, strings, or
22062     * jQuery-like collections are considered empty if they have a `length` of `0`.
22063     * Similarly, maps and sets are considered empty if they have a `size` of `0`.
22064     *
22065     * @static
22066     * @memberOf _
22067     * @since 0.1.0
22068     * @category Lang
22069     * @param {*} value The value to check.
22070     * @returns {boolean} Returns `true` if `value` is empty, else `false`.
22071     * @example
22072     *
22073     * _.isEmpty(null);
22074     * // => true
22075     *
22076     * _.isEmpty(true);
22077     * // => true
22078     *
22079     * _.isEmpty(1);
22080     * // => true
22081     *
22082     * _.isEmpty([1, 2, 3]);
22083     * // => false
22084     *
22085     * _.isEmpty({ 'a': 1 });
22086     * // => false
22087     */
22088    function isEmpty(value) {
22089      if (value == null) {
22090        return true;
22091      }
22092      if (isArrayLike(value) &&
22093          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||
22094            isBuffer(value) || isTypedArray(value) || isArguments(value))) {
22095        return !value.length;
22096      }
22097      var tag = getTag(value);
22098      if (tag == mapTag || tag == setTag) {
22099        return !value.size;
22100      }
22101      if (isPrototype(value)) {
22102        return !baseKeys(value).length;
22103      }
22104      for (var key in value) {
22105        if (hasOwnProperty.call(value, key)) {
22106          return false;
22107        }
22108      }
22109      return true;
22110    }
22111
22112    /**
22113     * Performs a deep comparison between two values to determine if they are
22114     * equivalent.
22115     *
22116     * **Note:** This method supports comparing arrays, array buffers, booleans,
22117     * date objects, error objects, maps, numbers, `Object` objects, regexes,
22118     * sets, strings, symbols, and typed arrays. `Object` objects are compared
22119     * by their own, not inherited, enumerable properties. Functions and DOM
22120     * nodes are compared by strict equality, i.e. `===`.
22121     *
22122     * @static
22123     * @memberOf _
22124     * @since 0.1.0
22125     * @category Lang
22126     * @param {*} value The value to compare.
22127     * @param {*} other The other value to compare.
22128     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
22129     * @example
22130     *
22131     * var object = { 'a': 1 };
22132     * var other = { 'a': 1 };
22133     *
22134     * _.isEqual(object, other);
22135     * // => true
22136     *
22137     * object === other;
22138     * // => false
22139     */
22140    function isEqual(value, other) {
22141      return baseIsEqual(value, other);
22142    }
22143
22144    /**
22145     * This method is like `_.isEqual` except that it accepts `customizer` which
22146     * is invoked to compare values. If `customizer` returns `undefined`, comparisons
22147     * are handled by the method instead. The `customizer` is invoked with up to
22148     * six arguments: (objValue, othValue [, index|key, object, other, stack]).
22149     *
22150     * @static
22151     * @memberOf _
22152     * @since 4.0.0
22153     * @category Lang
22154     * @param {*} value The value to compare.
22155     * @param {*} other The other value to compare.
22156     * @param {Function} [customizer] The function to customize comparisons.
22157     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
22158     * @example
22159     *
22160     * function isGreeting(value) {
22161     *   return /^h(?:i|ello)$/.test(value);
22162     * }
22163     *
22164     * function customizer(objValue, othValue) {
22165     *   if (isGreeting(objValue) && isGreeting(othValue)) {
22166     *     return true;
22167     *   }
22168     * }
22169     *
22170     * var array = ['hello', 'goodbye'];
22171     * var other = ['hi', 'goodbye'];
22172     *
22173     * _.isEqualWith(array, other, customizer);
22174     * // => true
22175     */
22176    function isEqualWith(value, other, customizer) {
22177      customizer = typeof customizer == 'function' ? customizer : undefined;
22178      var result = customizer ? customizer(value, other) : undefined;
22179      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;
22180    }
22181
22182    /**
22183     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,
22184     * `SyntaxError`, `TypeError`, or `URIError` object.
22185     *
22186     * @static
22187     * @memberOf _
22188     * @since 3.0.0
22189     * @category Lang
22190     * @param {*} value The value to check.
22191     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.
22192     * @example
22193     *
22194     * _.isError(new Error);
22195     * // => true
22196     *
22197     * _.isError(Error);
22198     * // => false
22199     */
22200    function isError(value) {
22201      if (!isObjectLike(value)) {
22202        return false;
22203      }
22204      var tag = baseGetTag(value);
22205      return tag == errorTag || tag == domExcTag ||
22206        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));
22207    }
22208
22209    /**
22210     * Checks if `value` is a finite primitive number.
22211     *
22212     * **Note:** This method is based on
22213     * [`Number.isFinite`](https://mdn.io/Number/isFinite).
22214     *
22215     * @static
22216     * @memberOf _
22217     * @since 0.1.0
22218     * @category Lang
22219     * @param {*} value The value to check.
22220     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.
22221     * @example
22222     *
22223     * _.isFinite(3);
22224     * // => true
22225     *
22226     * _.isFinite(Number.MIN_VALUE);
22227     * // => true
22228     *
22229     * _.isFinite(Infinity);
22230     * // => false
22231     *
22232     * _.isFinite('3');
22233     * // => false
22234     */
22235    function isFinite(value) {
22236      return typeof value == 'number' && nativeIsFinite(value);
22237    }
22238
22239    /**
22240     * Checks if `value` is classified as a `Function` object.
22241     *
22242     * @static
22243     * @memberOf _
22244     * @since 0.1.0
22245     * @category Lang
22246     * @param {*} value The value to check.
22247     * @returns {boolean} Returns `true` if `value` is a function, else `false`.
22248     * @example
22249     *
22250     * _.isFunction(_);
22251     * // => true
22252     *
22253     * _.isFunction(/abc/);
22254     * // => false
22255     */
22256    function isFunction(value) {
22257      if (!isObject(value)) {
22258        return false;
22259      }
22260      // The use of `Object#toString` avoids issues with the `typeof` operator
22261      // in Safari 9 which returns 'object' for typed arrays and other constructors.
22262      var tag = baseGetTag(value);
22263      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
22264    }
22265
22266    /**
22267     * Checks if `value` is an integer.
22268     *
22269     * **Note:** This method is based on
22270     * [`Number.isInteger`](https://mdn.io/Number/isInteger).
22271     *
22272     * @static
22273     * @memberOf _
22274     * @since 4.0.0
22275     * @category Lang
22276     * @param {*} value The value to check.
22277     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.
22278     * @example
22279     *
22280     * _.isInteger(3);
22281     * // => true
22282     *
22283     * _.isInteger(Number.MIN_VALUE);
22284     * // => false
22285     *
22286     * _.isInteger(Infinity);
22287     * // => false
22288     *
22289     * _.isInteger('3');
22290     * // => false
22291     */
22292    function isInteger(value) {
22293      return typeof value == 'number' && value == toInteger(value);
22294    }
22295
22296    /**
22297     * Checks if `value` is a valid array-like length.
22298     *
22299     * **Note:** This method is loosely based on
22300     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
22301     *
22302     * @static
22303     * @memberOf _
22304     * @since 4.0.0
22305     * @category Lang
22306     * @param {*} value The value to check.
22307     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
22308     * @example
22309     *
22310     * _.isLength(3);
22311     * // => true
22312     *
22313     * _.isLength(Number.MIN_VALUE);
22314     * // => false
22315     *
22316     * _.isLength(Infinity);
22317     * // => false
22318     *
22319     * _.isLength('3');
22320     * // => false
22321     */
22322    function isLength(value) {
22323      return typeof value == 'number' &&
22324        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
22325    }
22326
22327    /**
22328     * Checks if `value` is the
22329     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
22330     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
22331     *
22332     * @static
22333     * @memberOf _
22334     * @since 0.1.0
22335     * @category Lang
22336     * @param {*} value The value to check.
22337     * @returns {boolean} Returns `true` if `value` is an object, else `false`.
22338     * @example
22339     *
22340     * _.isObject({});
22341     * // => true
22342     *
22343     * _.isObject([1, 2, 3]);
22344     * // => true
22345     *
22346     * _.isObject(_.noop);
22347     * // => true
22348     *
22349     * _.isObject(null);
22350     * // => false
22351     */
22352    function isObject(value) {
22353      var type = typeof value;
22354      return value != null && (type == 'object' || type == 'function');
22355    }
22356
22357    /**
22358     * Checks if `value` is object-like. A value is object-like if it's not `null`
22359     * and has a `typeof` result of "object".
22360     *
22361     * @static
22362     * @memberOf _
22363     * @since 4.0.0
22364     * @category Lang
22365     * @param {*} value The value to check.
22366     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
22367     * @example
22368     *
22369     * _.isObjectLike({});
22370     * // => true
22371     *
22372     * _.isObjectLike([1, 2, 3]);
22373     * // => true
22374     *
22375     * _.isObjectLike(_.noop);
22376     * // => false
22377     *
22378     * _.isObjectLike(null);
22379     * // => false
22380     */
22381    function isObjectLike(value) {
22382      return value != null && typeof value == 'object';
22383    }
22384
22385    /**
22386     * Checks if `value` is classified as a `Map` object.
22387     *
22388     * @static
22389     * @memberOf _
22390     * @since 4.3.0
22391     * @category Lang
22392     * @param {*} value The value to check.
22393     * @returns {boolean} Returns `true` if `value` is a map, else `false`.
22394     * @example
22395     *
22396     * _.isMap(new Map);
22397     * // => true
22398     *
22399     * _.isMap(new WeakMap);
22400     * // => false
22401     */
22402    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;
22403
22404    /**
22405     * Performs a partial deep comparison between `object` and `source` to
22406     * determine if `object` contains equivalent property values.
22407     *
22408     * **Note:** This method is equivalent to `_.matches` when `source` is
22409     * partially applied.
22410     *
22411     * Partial comparisons will match empty array and empty object `source`
22412     * values against any array or object value, respectively. See `_.isEqual`
22413     * for a list of supported value comparisons.
22414     *
22415     * @static
22416     * @memberOf _
22417     * @since 3.0.0
22418     * @category Lang
22419     * @param {Object} object The object to inspect.
22420     * @param {Object} source The object of property values to match.
22421     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
22422     * @example
22423     *
22424     * var object = { 'a': 1, 'b': 2 };
22425     *
22426     * _.isMatch(object, { 'b': 2 });
22427     * // => true
22428     *
22429     * _.isMatch(object, { 'b': 1 });
22430     * // => false
22431     */
22432    function isMatch(object, source) {
22433      return object === source || baseIsMatch(object, source, getMatchData(source));
22434    }
22435
22436    /**
22437     * This method is like `_.isMatch` except that it accepts `customizer` which
22438     * is invoked to compare values. If `customizer` returns `undefined`, comparisons
22439     * are handled by the method instead. The `customizer` is invoked with five
22440     * arguments: (objValue, srcValue, index|key, object, source).
22441     *
22442     * @static
22443     * @memberOf _
22444     * @since 4.0.0
22445     * @category Lang
22446     * @param {Object} object The object to inspect.
22447     * @param {Object} source The object of property values to match.
22448     * @param {Function} [customizer] The function to customize comparisons.
22449     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
22450     * @example
22451     *
22452     * function isGreeting(value) {
22453     *   return /^h(?:i|ello)$/.test(value);
22454     * }
22455     *
22456     * function customizer(objValue, srcValue) {
22457     *   if (isGreeting(objValue) && isGreeting(srcValue)) {
22458     *     return true;
22459     *   }
22460     * }
22461     *
22462     * var object = { 'greeting': 'hello' };
22463     * var source = { 'greeting': 'hi' };
22464     *
22465     * _.isMatchWith(object, source, customizer);
22466     * // => true
22467     */
22468    function isMatchWith(object, source, customizer) {
22469      customizer = typeof customizer == 'function' ? customizer : undefined;
22470      return baseIsMatch(object, source, getMatchData(source), customizer);
22471    }
22472
22473    /**
22474     * Checks if `value` is `NaN`.
22475     *
22476     * **Note:** This method is based on
22477     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as
22478     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for
22479     * `undefined` and other non-number values.
22480     *
22481     * @static
22482     * @memberOf _
22483     * @since 0.1.0
22484     * @category Lang
22485     * @param {*} value The value to check.
22486     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
22487     * @example
22488     *
22489     * _.isNaN(NaN);
22490     * // => true
22491     *
22492     * _.isNaN(new Number(NaN));
22493     * // => true
22494     *
22495     * isNaN(undefined);
22496     * // => true
22497     *
22498     * _.isNaN(undefined);
22499     * // => false
22500     */
22501    function isNaN(value) {
22502      // An `NaN` primitive is the only value that is not equal to itself.
22503      // Perform the `toStringTag` check first to avoid errors with some
22504      // ActiveX objects in IE.
22505      return isNumber(value) && value != +value;
22506    }
22507
22508    /**
22509     * Checks if `value` is a pristine native function.
22510     *
22511     * **Note:** This method can't reliably detect native functions in the presence
22512     * of the core-js package because core-js circumvents this kind of detection.
22513     * Despite multiple requests, the core-js maintainer has made it clear: any
22514     * attempt to fix the detection will be obstructed. As a result, we're left
22515     * with little choice but to throw an error. Unfortunately, this also affects
22516     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),
22517     * which rely on core-js.
22518     *
22519     * @static
22520     * @memberOf _
22521     * @since 3.0.0
22522     * @category Lang
22523     * @param {*} value The value to check.
22524     * @returns {boolean} Returns `true` if `value` is a native function,
22525     *  else `false`.
22526     * @example
22527     *
22528     * _.isNative(Array.prototype.push);
22529     * // => true
22530     *
22531     * _.isNative(_);
22532     * // => false
22533     */
22534    function isNative(value) {
22535      if (isMaskable(value)) {
22536        throw new Error(CORE_ERROR_TEXT);
22537      }
22538      return baseIsNative(value);
22539    }
22540
22541    /**
22542     * Checks if `value` is `null`.
22543     *
22544     * @static
22545     * @memberOf _
22546     * @since 0.1.0
22547     * @category Lang
22548     * @param {*} value The value to check.
22549     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.
22550     * @example
22551     *
22552     * _.isNull(null);
22553     * // => true
22554     *
22555     * _.isNull(void 0);
22556     * // => false
22557     */
22558    function isNull(value) {
22559      return value === null;
22560    }
22561
22562    /**
22563     * Checks if `value` is `null` or `undefined`.
22564     *
22565     * @static
22566     * @memberOf _
22567     * @since 4.0.0
22568     * @category Lang
22569     * @param {*} value The value to check.
22570     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.
22571     * @example
22572     *
22573     * _.isNil(null);
22574     * // => true
22575     *
22576     * _.isNil(void 0);
22577     * // => true
22578     *
22579     * _.isNil(NaN);
22580     * // => false
22581     */
22582    function isNil(value) {
22583      return value == null;
22584    }
22585
22586    /**
22587     * Checks if `value` is classified as a `Number` primitive or object.
22588     *
22589     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are
22590     * classified as numbers, use the `_.isFinite` method.
22591     *
22592     * @static
22593     * @memberOf _
22594     * @since 0.1.0
22595     * @category Lang
22596     * @param {*} value The value to check.
22597     * @returns {boolean} Returns `true` if `value` is a number, else `false`.
22598     * @example
22599     *
22600     * _.isNumber(3);
22601     * // => true
22602     *
22603     * _.isNumber(Number.MIN_VALUE);
22604     * // => true
22605     *
22606     * _.isNumber(Infinity);
22607     * // => true
22608     *
22609     * _.isNumber('3');
22610     * // => false
22611     */
22612    function isNumber(value) {
22613      return typeof value == 'number' ||
22614        (isObjectLike(value) && baseGetTag(value) == numberTag);
22615    }
22616
22617    /**
22618     * Checks if `value` is a plain object, that is, an object created by the
22619     * `Object` constructor or one with a `[[Prototype]]` of `null`.
22620     *
22621     * @static
22622     * @memberOf _
22623     * @since 0.8.0
22624     * @category Lang
22625     * @param {*} value The value to check.
22626     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
22627     * @example
22628     *
22629     * function Foo() {
22630     *   this.a = 1;
22631     * }
22632     *
22633     * _.isPlainObject(new Foo);
22634     * // => false
22635     *
22636     * _.isPlainObject([1, 2, 3]);
22637     * // => false
22638     *
22639     * _.isPlainObject({ 'x': 0, 'y': 0 });
22640     * // => true
22641     *
22642     * _.isPlainObject(Object.create(null));
22643     * // => true
22644     */
22645    function isPlainObject(value) {
22646      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {
22647        return false;
22648      }
22649      var proto = getPrototype(value);
22650      if (proto === null) {
22651        return true;
22652      }
22653      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;
22654      return typeof Ctor == 'function' && Ctor instanceof Ctor &&
22655        funcToString.call(Ctor) == objectCtorString;
22656    }
22657
22658    /**
22659     * Checks if `value` is classified as a `RegExp` object.
22660     *
22661     * @static
22662     * @memberOf _
22663     * @since 0.1.0
22664     * @category Lang
22665     * @param {*} value The value to check.
22666     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
22667     * @example
22668     *
22669     * _.isRegExp(/abc/);
22670     * // => true
22671     *
22672     * _.isRegExp('/abc/');
22673     * // => false
22674     */
22675    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;
22676
22677    /**
22678     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754
22679     * double precision number which isn't the result of a rounded unsafe integer.
22680     *
22681     * **Note:** This method is based on
22682     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).
22683     *
22684     * @static
22685     * @memberOf _
22686     * @since 4.0.0
22687     * @category Lang
22688     * @param {*} value The value to check.
22689     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.
22690     * @example
22691     *
22692     * _.isSafeInteger(3);
22693     * // => true
22694     *
22695     * _.isSafeInteger(Number.MIN_VALUE);
22696     * // => false
22697     *
22698     * _.isSafeInteger(Infinity);
22699     * // => false
22700     *
22701     * _.isSafeInteger('3');
22702     * // => false
22703     */
22704    function isSafeInteger(value) {
22705      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;
22706    }
22707
22708    /**
22709     * Checks if `value` is classified as a `Set` object.
22710     *
22711     * @static
22712     * @memberOf _
22713     * @since 4.3.0
22714     * @category Lang
22715     * @param {*} value The value to check.
22716     * @returns {boolean} Returns `true` if `value` is a set, else `false`.
22717     * @example
22718     *
22719     * _.isSet(new Set);
22720     * // => true
22721     *
22722     * _.isSet(new WeakSet);
22723     * // => false
22724     */
22725    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;
22726
22727    /**
22728     * Checks if `value` is classified as a `String` primitive or object.
22729     *
22730     * @static
22731     * @since 0.1.0
22732     * @memberOf _
22733     * @category Lang
22734     * @param {*} value The value to check.
22735     * @returns {boolean} Returns `true` if `value` is a string, else `false`.
22736     * @example
22737     *
22738     * _.isString('abc');
22739     * // => true
22740     *
22741     * _.isString(1);
22742     * // => false
22743     */
22744    function isString(value) {
22745      return typeof value == 'string' ||
22746        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);
22747    }
22748
22749    /**
22750     * Checks if `value` is classified as a `Symbol` primitive or object.
22751     *
22752     * @static
22753     * @memberOf _
22754     * @since 4.0.0
22755     * @category Lang
22756     * @param {*} value The value to check.
22757     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
22758     * @example
22759     *
22760     * _.isSymbol(Symbol.iterator);
22761     * // => true
22762     *
22763     * _.isSymbol('abc');
22764     * // => false
22765     */
22766    function isSymbol(value) {
22767      return typeof value == 'symbol' ||
22768        (isObjectLike(value) && baseGetTag(value) == symbolTag);
22769    }
22770
22771    /**
22772     * Checks if `value` is classified as a typed array.
22773     *
22774     * @static
22775     * @memberOf _
22776     * @since 3.0.0
22777     * @category Lang
22778     * @param {*} value The value to check.
22779     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
22780     * @example
22781     *
22782     * _.isTypedArray(new Uint8Array);
22783     * // => true
22784     *
22785     * _.isTypedArray([]);
22786     * // => false
22787     */
22788    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
22789
22790    /**
22791     * Checks if `value` is `undefined`.
22792     *
22793     * @static
22794     * @since 0.1.0
22795     * @memberOf _
22796     * @category Lang
22797     * @param {*} value The value to check.
22798     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
22799     * @example
22800     *
22801     * _.isUndefined(void 0);
22802     * // => true
22803     *
22804     * _.isUndefined(null);
22805     * // => false
22806     */
22807    function isUndefined(value) {
22808      return value === undefined;
22809    }
22810
22811    /**
22812     * Checks if `value` is classified as a `WeakMap` object.
22813     *
22814     * @static
22815     * @memberOf _
22816     * @since 4.3.0
22817     * @category Lang
22818     * @param {*} value The value to check.
22819     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.
22820     * @example
22821     *
22822     * _.isWeakMap(new WeakMap);
22823     * // => true
22824     *
22825     * _.isWeakMap(new Map);
22826     * // => false
22827     */
22828    function isWeakMap(value) {
22829      return isObjectLike(value) && getTag(value) == weakMapTag;
22830    }
22831
22832    /**
22833     * Checks if `value` is classified as a `WeakSet` object.
22834     *
22835     * @static
22836     * @memberOf _
22837     * @since 4.3.0
22838     * @category Lang
22839     * @param {*} value The value to check.
22840     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.
22841     * @example
22842     *
22843     * _.isWeakSet(new WeakSet);
22844     * // => true
22845     *
22846     * _.isWeakSet(new Set);
22847     * // => false
22848     */
22849    function isWeakSet(value) {
22850      return isObjectLike(value) && baseGetTag(value) == weakSetTag;
22851    }
22852
22853    /**
22854     * Checks if `value` is less than `other`.
22855     *
22856     * @static
22857     * @memberOf _
22858     * @since 3.9.0
22859     * @category Lang
22860     * @param {*} value The value to compare.
22861     * @param {*} other The other value to compare.
22862     * @returns {boolean} Returns `true` if `value` is less than `other`,
22863     *  else `false`.
22864     * @see _.gt
22865     * @example
22866     *
22867     * _.lt(1, 3);
22868     * // => true
22869     *
22870     * _.lt(3, 3);
22871     * // => false
22872     *
22873     * _.lt(3, 1);
22874     * // => false
22875     */
22876    var lt = createRelationalOperation(baseLt);
22877
22878    /**
22879     * Checks if `value` is less than or equal to `other`.
22880     *
22881     * @static
22882     * @memberOf _
22883     * @since 3.9.0
22884     * @category Lang
22885     * @param {*} value The value to compare.
22886     * @param {*} other The other value to compare.
22887     * @returns {boolean} Returns `true` if `value` is less than or equal to
22888     *  `other`, else `false`.
22889     * @see _.gte
22890     * @example
22891     *
22892     * _.lte(1, 3);
22893     * // => true
22894     *
22895     * _.lte(3, 3);
22896     * // => true
22897     *
22898     * _.lte(3, 1);
22899     * // => false
22900     */
22901    var lte = createRelationalOperation(function(value, other) {
22902      return value <= other;
22903    });
22904
22905    /**
22906     * Converts `value` to an array.
22907     *
22908     * @static
22909     * @since 0.1.0
22910     * @memberOf _
22911     * @category Lang
22912     * @param {*} value The value to convert.
22913     * @returns {Array} Returns the converted array.
22914     * @example
22915     *
22916     * _.toArray({ 'a': 1, 'b': 2 });
22917     * // => [1, 2]
22918     *
22919     * _.toArray('abc');
22920     * // => ['a', 'b', 'c']
22921     *
22922     * _.toArray(1);
22923     * // => []
22924     *
22925     * _.toArray(null);
22926     * // => []
22927     */
22928    function toArray(value) {
22929      if (!value) {
22930        return [];
22931      }
22932      if (isArrayLike(value)) {
22933        return isString(value) ? stringToArray(value) : copyArray(value);
22934      }
22935      if (symIterator && value[symIterator]) {
22936        return iteratorToArray(value[symIterator]());
22937      }
22938      var tag = getTag(value),
22939          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);
22940
22941      return func(value);
22942    }
22943
22944    /**
22945     * Converts `value` to a finite number.
22946     *
22947     * @static
22948     * @memberOf _
22949     * @since 4.12.0
22950     * @category Lang
22951     * @param {*} value The value to convert.
22952     * @returns {number} Returns the converted number.
22953     * @example
22954     *
22955     * _.toFinite(3.2);
22956     * // => 3.2
22957     *
22958     * _.toFinite(Number.MIN_VALUE);
22959     * // => 5e-324
22960     *
22961     * _.toFinite(Infinity);
22962     * // => 1.7976931348623157e+308
22963     *
22964     * _.toFinite('3.2');
22965     * // => 3.2
22966     */
22967    function toFinite(value) {
22968      if (!value) {
22969        return value === 0 ? value : 0;
22970      }
22971      value = toNumber(value);
22972      if (value === INFINITY || value === -INFINITY) {
22973        var sign = (value < 0 ? -1 : 1);
22974        return sign * MAX_INTEGER;
22975      }
22976      return value === value ? value : 0;
22977    }
22978
22979    /**
22980     * Converts `value` to an integer.
22981     *
22982     * **Note:** This method is loosely based on
22983     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
22984     *
22985     * @static
22986     * @memberOf _
22987     * @since 4.0.0
22988     * @category Lang
22989     * @param {*} value The value to convert.
22990     * @returns {number} Returns the converted integer.
22991     * @example
22992     *
22993     * _.toInteger(3.2);
22994     * // => 3
22995     *
22996     * _.toInteger(Number.MIN_VALUE);
22997     * // => 0
22998     *
22999     * _.toInteger(Infinity);
23000     * // => 1.7976931348623157e+308
23001     *
23002     * _.toInteger('3.2');
23003     * // => 3
23004     */
23005    function toInteger(value) {
23006      var result = toFinite(value),
23007          remainder = result % 1;
23008
23009      return result === result ? (remainder ? result - remainder : result) : 0;
23010    }
23011
23012    /**
23013     * Converts `value` to an integer suitable for use as the length of an
23014     * array-like object.
23015     *
23016     * **Note:** This method is based on
23017     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
23018     *
23019     * @static
23020     * @memberOf _
23021     * @since 4.0.0
23022     * @category Lang
23023     * @param {*} value The value to convert.
23024     * @returns {number} Returns the converted integer.
23025     * @example
23026     *
23027     * _.toLength(3.2);
23028     * // => 3
23029     *
23030     * _.toLength(Number.MIN_VALUE);
23031     * // => 0
23032     *
23033     * _.toLength(Infinity);
23034     * // => 4294967295
23035     *
23036     * _.toLength('3.2');
23037     * // => 3
23038     */
23039    function toLength(value) {
23040      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;
23041    }
23042
23043    /**
23044     * Converts `value` to a number.
23045     *
23046     * @static
23047     * @memberOf _
23048     * @since 4.0.0
23049     * @category Lang
23050     * @param {*} value The value to process.
23051     * @returns {number} Returns the number.
23052     * @example
23053     *
23054     * _.toNumber(3.2);
23055     * // => 3.2
23056     *
23057     * _.toNumber(Number.MIN_VALUE);
23058     * // => 5e-324
23059     *
23060     * _.toNumber(Infinity);
23061     * // => Infinity
23062     *
23063     * _.toNumber('3.2');
23064     * // => 3.2
23065     */
23066    function toNumber(value) {
23067      if (typeof value == 'number') {
23068        return value;
23069      }
23070      if (isSymbol(value)) {
23071        return NAN;
23072      }
23073      if (isObject(value)) {
23074        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
23075        value = isObject(other) ? (other + '') : other;
23076      }
23077      if (typeof value != 'string') {
23078        return value === 0 ? value : +value;
23079      }
23080      value = baseTrim(value);
23081      var isBinary = reIsBinary.test(value);
23082      return (isBinary || reIsOctal.test(value))
23083        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
23084        : (reIsBadHex.test(value) ? NAN : +value);
23085    }
23086
23087    /**
23088     * Converts `value` to a plain object flattening inherited enumerable string
23089     * keyed properties of `value` to own properties of the plain object.
23090     *
23091     * @static
23092     * @memberOf _
23093     * @since 3.0.0
23094     * @category Lang
23095     * @param {*} value The value to convert.
23096     * @returns {Object} Returns the converted plain object.
23097     * @example
23098     *
23099     * function Foo() {
23100     *   this.b = 2;
23101     * }
23102     *
23103     * Foo.prototype.c = 3;
23104     *
23105     * _.assign({ 'a': 1 }, new Foo);
23106     * // => { 'a': 1, 'b': 2 }
23107     *
23108     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));
23109     * // => { 'a': 1, 'b': 2, 'c': 3 }
23110     */
23111    function toPlainObject(value) {
23112      return copyObject(value, keysIn(value));
23113    }
23114
23115    /**
23116     * Converts `value` to a safe integer. A safe integer can be compared and
23117     * represented correctly.
23118     *
23119     * @static
23120     * @memberOf _
23121     * @since 4.0.0
23122     * @category Lang
23123     * @param {*} value The value to convert.
23124     * @returns {number} Returns the converted integer.
23125     * @example
23126     *
23127     * _.toSafeInteger(3.2);
23128     * // => 3
23129     *
23130     * _.toSafeInteger(Number.MIN_VALUE);
23131     * // => 0
23132     *
23133     * _.toSafeInteger(Infinity);
23134     * // => 9007199254740991
23135     *
23136     * _.toSafeInteger('3.2');
23137     * // => 3
23138     */
23139    function toSafeInteger(value) {
23140      return value
23141        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)
23142        : (value === 0 ? value : 0);
23143    }
23144
23145    /**
23146     * Converts `value` to a string. An empty string is returned for `null`
23147     * and `undefined` values. The sign of `-0` is preserved.
23148     *
23149     * @static
23150     * @memberOf _
23151     * @since 4.0.0
23152     * @category Lang
23153     * @param {*} value The value to convert.
23154     * @returns {string} Returns the converted string.
23155     * @example
23156     *
23157     * _.toString(null);
23158     * // => ''
23159     *
23160     * _.toString(-0);
23161     * // => '-0'
23162     *
23163     * _.toString([1, 2, 3]);
23164     * // => '1,2,3'
23165     */
23166    function toString(value) {
23167      return value == null ? '' : baseToString(value);
23168    }
23169
23170    /*------------------------------------------------------------------------*/
23171
23172    /**
23173     * Assigns own enumerable string keyed properties of source objects to the
23174     * destination object. Source objects are applied from left to right.
23175     * Subsequent sources overwrite property assignments of previous sources.
23176     *
23177     * **Note:** This method mutates `object` and is loosely based on
23178     * [`Object.assign`](https://mdn.io/Object/assign).
23179     *
23180     * @static
23181     * @memberOf _
23182     * @since 0.10.0
23183     * @category Object
23184     * @param {Object} object The destination object.
23185     * @param {...Object} [sources] The source objects.
23186     * @returns {Object} Returns `object`.
23187     * @see _.assignIn
23188     * @example
23189     *
23190     * function Foo() {
23191     *   this.a = 1;
23192     * }
23193     *
23194     * function Bar() {
23195     *   this.c = 3;
23196     * }
23197     *
23198     * Foo.prototype.b = 2;
23199     * Bar.prototype.d = 4;
23200     *
23201     * _.assign({ 'a': 0 }, new Foo, new Bar);
23202     * // => { 'a': 1, 'c': 3 }
23203     */
23204    var assign = createAssigner(function(object, source) {
23205      if (isPrototype(source) || isArrayLike(source)) {
23206        copyObject(source, keys(source), object);
23207        return;
23208      }
23209      for (var key in source) {
23210        if (hasOwnProperty.call(source, key)) {
23211          assignValue(object, key, source[key]);
23212        }
23213      }
23214    });
23215
23216    /**
23217     * This method is like `_.assign` except that it iterates over own and
23218     * inherited source properties.
23219     *
23220     * **Note:** This method mutates `object`.
23221     *
23222     * @static
23223     * @memberOf _
23224     * @since 4.0.0
23225     * @alias extend
23226     * @category Object
23227     * @param {Object} object The destination object.
23228     * @param {...Object} [sources] The source objects.
23229     * @returns {Object} Returns `object`.
23230     * @see _.assign
23231     * @example
23232     *
23233     * function Foo() {
23234     *   this.a = 1;
23235     * }
23236     *
23237     * function Bar() {
23238     *   this.c = 3;
23239     * }
23240     *
23241     * Foo.prototype.b = 2;
23242     * Bar.prototype.d = 4;
23243     *
23244     * _.assignIn({ 'a': 0 }, new Foo, new Bar);
23245     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }
23246     */
23247    var assignIn = createAssigner(function(object, source) {
23248      copyObject(source, keysIn(source), object);
23249    });
23250
23251    /**
23252     * This method is like `_.assignIn` except that it accepts `customizer`
23253     * which is invoked to produce the assigned values. If `customizer` returns
23254     * `undefined`, assignment is handled by the method instead. The `customizer`
23255     * is invoked with five arguments: (objValue, srcValue, key, object, source).
23256     *
23257     * **Note:** This method mutates `object`.
23258     *
23259     * @static
23260     * @memberOf _
23261     * @since 4.0.0
23262     * @alias extendWith
23263     * @category Object
23264     * @param {Object} object The destination object.
23265     * @param {...Object} sources The source objects.
23266     * @param {Function} [customizer] The function to customize assigned values.
23267     * @returns {Object} Returns `object`.
23268     * @see _.assignWith
23269     * @example
23270     *
23271     * function customizer(objValue, srcValue) {
23272     *   return _.isUndefined(objValue) ? srcValue : objValue;
23273     * }
23274     *
23275     * var defaults = _.partialRight(_.assignInWith, customizer);
23276     *
23277     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
23278     * // => { 'a': 1, 'b': 2 }
23279     */
23280    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {
23281      copyObject(source, keysIn(source), object, customizer);
23282    });
23283
23284    /**
23285     * This method is like `_.assign` except that it accepts `customizer`
23286     * which is invoked to produce the assigned values. If `customizer` returns
23287     * `undefined`, assignment is handled by the method instead. The `customizer`
23288     * is invoked with five arguments: (objValue, srcValue, key, object, source).
23289     *
23290     * **Note:** This method mutates `object`.
23291     *
23292     * @static
23293     * @memberOf _
23294     * @since 4.0.0
23295     * @category Object
23296     * @param {Object} object The destination object.
23297     * @param {...Object} sources The source objects.
23298     * @param {Function} [customizer] The function to customize assigned values.
23299     * @returns {Object} Returns `object`.
23300     * @see _.assignInWith
23301     * @example
23302     *
23303     * function customizer(objValue, srcValue) {
23304     *   return _.isUndefined(objValue) ? srcValue : objValue;
23305     * }
23306     *
23307     * var defaults = _.partialRight(_.assignWith, customizer);
23308     *
23309     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
23310     * // => { 'a': 1, 'b': 2 }
23311     */
23312    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {
23313      copyObject(source, keys(source), object, customizer);
23314    });
23315
23316    /**
23317     * Creates an array of values corresponding to `paths` of `object`.
23318     *
23319     * @static
23320     * @memberOf _
23321     * @since 1.0.0
23322     * @category Object
23323     * @param {Object} object The object to iterate over.
23324     * @param {...(string|string[])} [paths] The property paths to pick.
23325     * @returns {Array} Returns the picked values.
23326     * @example
23327     *
23328     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
23329     *
23330     * _.at(object, ['a[0].b.c', 'a[1]']);
23331     * // => [3, 4]
23332     */
23333    var at = flatRest(baseAt);
23334
23335    /**
23336     * Creates an object that inherits from the `prototype` object. If a
23337     * `properties` object is given, its own enumerable string keyed properties
23338     * are assigned to the created object.
23339     *
23340     * @static
23341     * @memberOf _
23342     * @since 2.3.0
23343     * @category Object
23344     * @param {Object} prototype The object to inherit from.
23345     * @param {Object} [properties] The properties to assign to the object.
23346     * @returns {Object} Returns the new object.
23347     * @example
23348     *
23349     * function Shape() {
23350     *   this.x = 0;
23351     *   this.y = 0;
23352     * }
23353     *
23354     * function Circle() {
23355     *   Shape.call(this);
23356     * }
23357     *
23358     * Circle.prototype = _.create(Shape.prototype, {
23359     *   'constructor': Circle
23360     * });
23361     *
23362     * var circle = new Circle;
23363     * circle instanceof Circle;
23364     * // => true
23365     *
23366     * circle instanceof Shape;
23367     * // => true
23368     */
23369    function create(prototype, properties) {
23370      var result = baseCreate(prototype);
23371      return properties == null ? result : baseAssign(result, properties);
23372    }
23373
23374    /**
23375     * Assigns own and inherited enumerable string keyed properties of source
23376     * objects to the destination object for all destination properties that
23377     * resolve to `undefined`. Source objects are applied from left to right.
23378     * Once a property is set, additional values of the same property are ignored.
23379     *
23380     * **Note:** This method mutates `object`.
23381     *
23382     * @static
23383     * @since 0.1.0
23384     * @memberOf _
23385     * @category Object
23386     * @param {Object} object The destination object.
23387     * @param {...Object} [sources] The source objects.
23388     * @returns {Object} Returns `object`.
23389     * @see _.defaultsDeep
23390     * @example
23391     *
23392     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
23393     * // => { 'a': 1, 'b': 2 }
23394     */
23395    var defaults = baseRest(function(object, sources) {
23396      object = Object(object);
23397
23398      var index = -1;
23399      var length = sources.length;
23400      var guard = length > 2 ? sources[2] : undefined;
23401
23402      if (guard && isIterateeCall(sources[0], sources[1], guard)) {
23403        length = 1;
23404      }
23405
23406      while (++index < length) {
23407        var source = sources[index];
23408        var props = keysIn(source);
23409        var propsIndex = -1;
23410        var propsLength = props.length;
23411
23412        while (++propsIndex < propsLength) {
23413          var key = props[propsIndex];
23414          var value = object[key];
23415
23416          if (value === undefined ||
23417              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {
23418            object[key] = source[key];
23419          }
23420        }
23421      }
23422
23423      return object;
23424    });
23425
23426    /**
23427     * This method is like `_.defaults` except that it recursively assigns
23428     * default properties.
23429     *
23430     * **Note:** This method mutates `object`.
23431     *
23432     * @static
23433     * @memberOf _
23434     * @since 3.10.0
23435     * @category Object
23436     * @param {Object} object The destination object.
23437     * @param {...Object} [sources] The source objects.
23438     * @returns {Object} Returns `object`.
23439     * @see _.defaults
23440     * @example
23441     *
23442     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });
23443     * // => { 'a': { 'b': 2, 'c': 3 } }
23444     */
23445    var defaultsDeep = baseRest(function(args) {
23446      args.push(undefined, customDefaultsMerge);
23447      return apply(mergeWith, undefined, args);
23448    });
23449
23450    /**
23451     * This method is like `_.find` except that it returns the key of the first
23452     * element `predicate` returns truthy for instead of the element itself.
23453     *
23454     * @static
23455     * @memberOf _
23456     * @since 1.1.0
23457     * @category Object
23458     * @param {Object} object The object to inspect.
23459     * @param {Function} [predicate=_.identity] The function invoked per iteration.
23460     * @returns {string|undefined} Returns the key of the matched element,
23461     *  else `undefined`.
23462     * @example
23463     *
23464     * var users = {
23465     *   'barney':  { 'age': 36, 'active': true },
23466     *   'fred':    { 'age': 40, 'active': false },
23467     *   'pebbles': { 'age': 1,  'active': true }
23468     * };
23469     *
23470     * _.findKey(users, function(o) { return o.age < 40; });
23471     * // => 'barney' (iteration order is not guaranteed)
23472     *
23473     * // The `_.matches` iteratee shorthand.
23474     * _.findKey(users, { 'age': 1, 'active': true });
23475     * // => 'pebbles'
23476     *
23477     * // The `_.matchesProperty` iteratee shorthand.
23478     * _.findKey(users, ['active', false]);
23479     * // => 'fred'
23480     *
23481     * // The `_.property` iteratee shorthand.
23482     * _.findKey(users, 'active');
23483     * // => 'barney'
23484     */
23485    function findKey(object, predicate) {
23486      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);
23487    }
23488
23489    /**
23490     * This method is like `_.findKey` except that it iterates over elements of
23491     * a collection in the opposite order.
23492     *
23493     * @static
23494     * @memberOf _
23495     * @since 2.0.0
23496     * @category Object
23497     * @param {Object} object The object to inspect.
23498     * @param {Function} [predicate=_.identity] The function invoked per iteration.
23499     * @returns {string|undefined} Returns the key of the matched element,
23500     *  else `undefined`.
23501     * @example
23502     *
23503     * var users = {
23504     *   'barney':  { 'age': 36, 'active': true },
23505     *   'fred':    { 'age': 40, 'active': false },
23506     *   'pebbles': { 'age': 1,  'active': true }
23507     * };
23508     *
23509     * _.findLastKey(users, function(o) { return o.age < 40; });
23510     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'
23511     *
23512     * // The `_.matches` iteratee shorthand.
23513     * _.findLastKey(users, { 'age': 36, 'active': true });
23514     * // => 'barney'
23515     *
23516     * // The `_.matchesProperty` iteratee shorthand.
23517     * _.findLastKey(users, ['active', false]);
23518     * // => 'fred'
23519     *
23520     * // The `_.property` iteratee shorthand.
23521     * _.findLastKey(users, 'active');
23522     * // => 'pebbles'
23523     */
23524    function findLastKey(object, predicate) {
23525      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);
23526    }
23527
23528    /**
23529     * Iterates over own and inherited enumerable string keyed properties of an
23530     * object and invokes `iteratee` for each property. The iteratee is invoked
23531     * with three arguments: (value, key, object). Iteratee functions may exit
23532     * iteration early by explicitly returning `false`.
23533     *
23534     * @static
23535     * @memberOf _
23536     * @since 0.3.0
23537     * @category Object
23538     * @param {Object} object The object to iterate over.
23539     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
23540     * @returns {Object} Returns `object`.
23541     * @see _.forInRight
23542     * @example
23543     *
23544     * function Foo() {
23545     *   this.a = 1;
23546     *   this.b = 2;
23547     * }
23548     *
23549     * Foo.prototype.c = 3;
23550     *
23551     * _.forIn(new Foo, function(value, key) {
23552     *   console.log(key);
23553     * });
23554     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).
23555     */
23556    function forIn(object, iteratee) {
23557      return object == null
23558        ? object
23559        : baseFor(object, getIteratee(iteratee, 3), keysIn);
23560    }
23561
23562    /**
23563     * This method is like `_.forIn` except that it iterates over properties of
23564     * `object` in the opposite order.
23565     *
23566     * @static
23567     * @memberOf _
23568     * @since 2.0.0
23569     * @category Object
23570     * @param {Object} object The object to iterate over.
23571     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
23572     * @returns {Object} Returns `object`.
23573     * @see _.forIn
23574     * @example
23575     *
23576     * function Foo() {
23577     *   this.a = 1;
23578     *   this.b = 2;
23579     * }
23580     *
23581     * Foo.prototype.c = 3;
23582     *
23583     * _.forInRight(new Foo, function(value, key) {
23584     *   console.log(key);
23585     * });
23586     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.
23587     */
23588    function forInRight(object, iteratee) {
23589      return object == null
23590        ? object
23591        : baseForRight(object, getIteratee(iteratee, 3), keysIn);
23592    }
23593
23594    /**
23595     * Iterates over own enumerable string keyed properties of an object and
23596     * invokes `iteratee` for each property. The iteratee is invoked with three
23597     * arguments: (value, key, object). Iteratee functions may exit iteration
23598     * early by explicitly returning `false`.
23599     *
23600     * @static
23601     * @memberOf _
23602     * @since 0.3.0
23603     * @category Object
23604     * @param {Object} object The object to iterate over.
23605     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
23606     * @returns {Object} Returns `object`.
23607     * @see _.forOwnRight
23608     * @example
23609     *
23610     * function Foo() {
23611     *   this.a = 1;
23612     *   this.b = 2;
23613     * }
23614     *
23615     * Foo.prototype.c = 3;
23616     *
23617     * _.forOwn(new Foo, function(value, key) {
23618     *   console.log(key);
23619     * });
23620     * // => Logs 'a' then 'b' (iteration order is not guaranteed).
23621     */
23622    function forOwn(object, iteratee) {
23623      return object && baseForOwn(object, getIteratee(iteratee, 3));
23624    }
23625
23626    /**
23627     * This method is like `_.forOwn` except that it iterates over properties of
23628     * `object` in the opposite order.
23629     *
23630     * @static
23631     * @memberOf _
23632     * @since 2.0.0
23633     * @category Object
23634     * @param {Object} object The object to iterate over.
23635     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
23636     * @returns {Object} Returns `object`.
23637     * @see _.forOwn
23638     * @example
23639     *
23640     * function Foo() {
23641     *   this.a = 1;
23642     *   this.b = 2;
23643     * }
23644     *
23645     * Foo.prototype.c = 3;
23646     *
23647     * _.forOwnRight(new Foo, function(value, key) {
23648     *   console.log(key);
23649     * });
23650     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.
23651     */
23652    function forOwnRight(object, iteratee) {
23653      return object && baseForOwnRight(object, getIteratee(iteratee, 3));
23654    }
23655
23656    /**
23657     * Creates an array of function property names from own enumerable properties
23658     * of `object`.
23659     *
23660     * @static
23661     * @since 0.1.0
23662     * @memberOf _
23663     * @category Object
23664     * @param {Object} object The object to inspect.
23665     * @returns {Array} Returns the function names.
23666     * @see _.functionsIn
23667     * @example
23668     *
23669     * function Foo() {
23670     *   this.a = _.constant('a');
23671     *   this.b = _.constant('b');
23672     * }
23673     *
23674     * Foo.prototype.c = _.constant('c');
23675     *
23676     * _.functions(new Foo);
23677     * // => ['a', 'b']
23678     */
23679    function functions(object) {
23680      return object == null ? [] : baseFunctions(object, keys(object));
23681    }
23682
23683    /**
23684     * Creates an array of function property names from own and inherited
23685     * enumerable properties of `object`.
23686     *
23687     * @static
23688     * @memberOf _
23689     * @since 4.0.0
23690     * @category Object
23691     * @param {Object} object The object to inspect.
23692     * @returns {Array} Returns the function names.
23693     * @see _.functions
23694     * @example
23695     *
23696     * function Foo() {
23697     *   this.a = _.constant('a');
23698     *   this.b = _.constant('b');
23699     * }
23700     *
23701     * Foo.prototype.c = _.constant('c');
23702     *
23703     * _.functionsIn(new Foo);
23704     * // => ['a', 'b', 'c']
23705     */
23706    function functionsIn(object) {
23707      return object == null ? [] : baseFunctions(object, keysIn(object));
23708    }
23709
23710    /**
23711     * Gets the value at `path` of `object`. If the resolved value is
23712     * `undefined`, the `defaultValue` is returned in its place.
23713     *
23714     * @static
23715     * @memberOf _
23716     * @since 3.7.0
23717     * @category Object
23718     * @param {Object} object The object to query.
23719     * @param {Array|string} path The path of the property to get.
23720     * @param {*} [defaultValue] The value returned for `undefined` resolved values.
23721     * @returns {*} Returns the resolved value.
23722     * @example
23723     *
23724     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
23725     *
23726     * _.get(object, 'a[0].b.c');
23727     * // => 3
23728     *
23729     * _.get(object, ['a', '0', 'b', 'c']);
23730     * // => 3
23731     *
23732     * _.get(object, 'a.b.c', 'default');
23733     * // => 'default'
23734     */
23735    function get(object, path, defaultValue) {
23736      var result = object == null ? undefined : baseGet(object, path);
23737      return result === undefined ? defaultValue : result;
23738    }
23739
23740    /**
23741     * Checks if `path` is a direct property of `object`.
23742     *
23743     * @static
23744     * @since 0.1.0
23745     * @memberOf _
23746     * @category Object
23747     * @param {Object} object The object to query.
23748     * @param {Array|string} path The path to check.
23749     * @returns {boolean} Returns `true` if `path` exists, else `false`.
23750     * @example
23751     *
23752     * var object = { 'a': { 'b': 2 } };
23753     * var other = _.create({ 'a': _.create({ 'b': 2 }) });
23754     *
23755     * _.has(object, 'a');
23756     * // => true
23757     *
23758     * _.has(object, 'a.b');
23759     * // => true
23760     *
23761     * _.has(object, ['a', 'b']);
23762     * // => true
23763     *
23764     * _.has(other, 'a');
23765     * // => false
23766     */
23767    function has(object, path) {
23768      return object != null && hasPath(object, path, baseHas);
23769    }
23770
23771    /**
23772     * Checks if `path` is a direct or inherited property of `object`.
23773     *
23774     * @static
23775     * @memberOf _
23776     * @since 4.0.0
23777     * @category Object
23778     * @param {Object} object The object to query.
23779     * @param {Array|string} path The path to check.
23780     * @returns {boolean} Returns `true` if `path` exists, else `false`.
23781     * @example
23782     *
23783     * var object = _.create({ 'a': _.create({ 'b': 2 }) });
23784     *
23785     * _.hasIn(object, 'a');
23786     * // => true
23787     *
23788     * _.hasIn(object, 'a.b');
23789     * // => true
23790     *
23791     * _.hasIn(object, ['a', 'b']);
23792     * // => true
23793     *
23794     * _.hasIn(object, 'b');
23795     * // => false
23796     */
23797    function hasIn(object, path) {
23798      return object != null && hasPath(object, path, baseHasIn);
23799    }
23800
23801    /**
23802     * Creates an object composed of the inverted keys and values of `object`.
23803     * If `object` contains duplicate values, subsequent values overwrite
23804     * property assignments of previous values.
23805     *
23806     * @static
23807     * @memberOf _
23808     * @since 0.7.0
23809     * @category Object
23810     * @param {Object} object The object to invert.
23811     * @returns {Object} Returns the new inverted object.
23812     * @example
23813     *
23814     * var object = { 'a': 1, 'b': 2, 'c': 1 };
23815     *
23816     * _.invert(object);
23817     * // => { '1': 'c', '2': 'b' }
23818     */
23819    var invert = createInverter(function(result, value, key) {
23820      if (value != null &&
23821          typeof value.toString != 'function') {
23822        value = nativeObjectToString.call(value);
23823      }
23824
23825      result[value] = key;
23826    }, constant(identity));
23827
23828    /**
23829     * This method is like `_.invert` except that the inverted object is generated
23830     * from the results of running each element of `object` thru `iteratee`. The
23831     * corresponding inverted value of each inverted key is an array of keys
23832     * responsible for generating the inverted value. The iteratee is invoked
23833     * with one argument: (value).
23834     *
23835     * @static
23836     * @memberOf _
23837     * @since 4.1.0
23838     * @category Object
23839     * @param {Object} object The object to invert.
23840     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
23841     * @returns {Object} Returns the new inverted object.
23842     * @example
23843     *
23844     * var object = { 'a': 1, 'b': 2, 'c': 1 };
23845     *
23846     * _.invertBy(object);
23847     * // => { '1': ['a', 'c'], '2': ['b'] }
23848     *
23849     * _.invertBy(object, function(value) {
23850     *   return 'group' + value;
23851     * });
23852     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }
23853     */
23854    var invertBy = createInverter(function(result, value, key) {
23855      if (value != null &&
23856          typeof value.toString != 'function') {
23857        value = nativeObjectToString.call(value);
23858      }
23859
23860      if (hasOwnProperty.call(result, value)) {
23861        result[value].push(key);
23862      } else {
23863        result[value] = [key];
23864      }
23865    }, getIteratee);
23866
23867    /**
23868     * Invokes the method at `path` of `object`.
23869     *
23870     * @static
23871     * @memberOf _
23872     * @since 4.0.0
23873     * @category Object
23874     * @param {Object} object The object to query.
23875     * @param {Array|string} path The path of the method to invoke.
23876     * @param {...*} [args] The arguments to invoke the method with.
23877     * @returns {*} Returns the result of the invoked method.
23878     * @example
23879     *
23880     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };
23881     *
23882     * _.invoke(object, 'a[0].b.c.slice', 1, 3);
23883     * // => [2, 3]
23884     */
23885    var invoke = baseRest(baseInvoke);
23886
23887    /**
23888     * Creates an array of the own enumerable property names of `object`.
23889     *
23890     * **Note:** Non-object values are coerced to objects. See the
23891     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
23892     * for more details.
23893     *
23894     * @static
23895     * @since 0.1.0
23896     * @memberOf _
23897     * @category Object
23898     * @param {Object} object The object to query.
23899     * @returns {Array} Returns the array of property names.
23900     * @example
23901     *
23902     * function Foo() {
23903     *   this.a = 1;
23904     *   this.b = 2;
23905     * }
23906     *
23907     * Foo.prototype.c = 3;
23908     *
23909     * _.keys(new Foo);
23910     * // => ['a', 'b'] (iteration order is not guaranteed)
23911     *
23912     * _.keys('hi');
23913     * // => ['0', '1']
23914     */
23915    function keys(object) {
23916      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
23917    }
23918
23919    /**
23920     * Creates an array of the own and inherited enumerable property names of `object`.
23921     *
23922     * **Note:** Non-object values are coerced to objects.
23923     *
23924     * @static
23925     * @memberOf _
23926     * @since 3.0.0
23927     * @category Object
23928     * @param {Object} object The object to query.
23929     * @returns {Array} Returns the array of property names.
23930     * @example
23931     *
23932     * function Foo() {
23933     *   this.a = 1;
23934     *   this.b = 2;
23935     * }
23936     *
23937     * Foo.prototype.c = 3;
23938     *
23939     * _.keysIn(new Foo);
23940     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
23941     */
23942    function keysIn(object) {
23943      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
23944    }
23945
23946    /**
23947     * The opposite of `_.mapValues`; this method creates an object with the
23948     * same values as `object` and keys generated by running each own enumerable
23949     * string keyed property of `object` thru `iteratee`. The iteratee is invoked
23950     * with three arguments: (value, key, object).
23951     *
23952     * @static
23953     * @memberOf _
23954     * @since 3.8.0
23955     * @category Object
23956     * @param {Object} object The object to iterate over.
23957     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
23958     * @returns {Object} Returns the new mapped object.
23959     * @see _.mapValues
23960     * @example
23961     *
23962     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {
23963     *   return key + value;
23964     * });
23965     * // => { 'a1': 1, 'b2': 2 }
23966     */
23967    function mapKeys(object, iteratee) {
23968      var result = {};
23969      iteratee = getIteratee(iteratee, 3);
23970
23971      baseForOwn(object, function(value, key, object) {
23972        baseAssignValue(result, iteratee(value, key, object), value);
23973      });
23974      return result;
23975    }
23976
23977    /**
23978     * Creates an object with the same keys as `object` and values generated
23979     * by running each own enumerable string keyed property of `object` thru
23980     * `iteratee`. The iteratee is invoked with three arguments:
23981     * (value, key, object).
23982     *
23983     * @static
23984     * @memberOf _
23985     * @since 2.4.0
23986     * @category Object
23987     * @param {Object} object The object to iterate over.
23988     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
23989     * @returns {Object} Returns the new mapped object.
23990     * @see _.mapKeys
23991     * @example
23992     *
23993     * var users = {
23994     *   'fred':    { 'user': 'fred',    'age': 40 },
23995     *   'pebbles': { 'user': 'pebbles', 'age': 1 }
23996     * };
23997     *
23998     * _.mapValues(users, function(o) { return o.age; });
23999     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
24000     *
24001     * // The `_.property` iteratee shorthand.
24002     * _.mapValues(users, 'age');
24003     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
24004     */
24005    function mapValues(object, iteratee) {
24006      var result = {};
24007      iteratee = getIteratee(iteratee, 3);
24008
24009      baseForOwn(object, function(value, key, object) {
24010        baseAssignValue(result, key, iteratee(value, key, object));
24011      });
24012      return result;
24013    }
24014
24015    /**
24016     * This method is like `_.assign` except that it recursively merges own and
24017     * inherited enumerable string keyed properties of source objects into the
24018     * destination object. Source properties that resolve to `undefined` are
24019     * skipped if a destination value exists. Array and plain object properties
24020     * are merged recursively. Other objects and value types are overridden by
24021     * assignment. Source objects are applied from left to right. Subsequent
24022     * sources overwrite property assignments of previous sources.
24023     *
24024     * **Note:** This method mutates `object`.
24025     *
24026     * @static
24027     * @memberOf _
24028     * @since 0.5.0
24029     * @category Object
24030     * @param {Object} object The destination object.
24031     * @param {...Object} [sources] The source objects.
24032     * @returns {Object} Returns `object`.
24033     * @example
24034     *
24035     * var object = {
24036     *   'a': [{ 'b': 2 }, { 'd': 4 }]
24037     * };
24038     *
24039     * var other = {
24040     *   'a': [{ 'c': 3 }, { 'e': 5 }]
24041     * };
24042     *
24043     * _.merge(object, other);
24044     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }
24045     */
24046    var merge = createAssigner(function(object, source, srcIndex) {
24047      baseMerge(object, source, srcIndex);
24048    });
24049
24050    /**
24051     * This method is like `_.merge` except that it accepts `customizer` which
24052     * is invoked to produce the merged values of the destination and source
24053     * properties. If `customizer` returns `undefined`, merging is handled by the
24054     * method instead. The `customizer` is invoked with six arguments:
24055     * (objValue, srcValue, key, object, source, stack).
24056     *
24057     * **Note:** This method mutates `object`.
24058     *
24059     * @static
24060     * @memberOf _
24061     * @since 4.0.0
24062     * @category Object
24063     * @param {Object} object The destination object.
24064     * @param {...Object} sources The source objects.
24065     * @param {Function} customizer The function to customize assigned values.
24066     * @returns {Object} Returns `object`.
24067     * @example
24068     *
24069     * function customizer(objValue, srcValue) {
24070     *   if (_.isArray(objValue)) {
24071     *     return objValue.concat(srcValue);
24072     *   }
24073     * }
24074     *
24075     * var object = { 'a': [1], 'b': [2] };
24076     * var other = { 'a': [3], 'b': [4] };
24077     *
24078     * _.mergeWith(object, other, customizer);
24079     * // => { 'a': [1, 3], 'b': [2, 4] }
24080     */
24081    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {
24082      baseMerge(object, source, srcIndex, customizer);
24083    });
24084
24085    /**
24086     * The opposite of `_.pick`; this method creates an object composed of the
24087     * own and inherited enumerable property paths of `object` that are not omitted.
24088     *
24089     * **Note:** This method is considerably slower than `_.pick`.
24090     *
24091     * @static
24092     * @since 0.1.0
24093     * @memberOf _
24094     * @category Object
24095     * @param {Object} object The source object.
24096     * @param {...(string|string[])} [paths] The property paths to omit.
24097     * @returns {Object} Returns the new object.
24098     * @example
24099     *
24100     * var object = { 'a': 1, 'b': '2', 'c': 3 };
24101     *
24102     * _.omit(object, ['a', 'c']);
24103     * // => { 'b': '2' }
24104     */
24105    var omit = flatRest(function(object, paths) {
24106      var result = {};
24107      if (object == null) {
24108        return result;
24109      }
24110      var isDeep = false;
24111      paths = arrayMap(paths, function(path) {
24112        path = castPath(path, object);
24113        isDeep || (isDeep = path.length > 1);
24114        return path;
24115      });
24116      copyObject(object, getAllKeysIn(object), result);
24117      if (isDeep) {
24118        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);
24119      }
24120      var length = paths.length;
24121      while (length--) {
24122        baseUnset(result, paths[length]);
24123      }
24124      return result;
24125    });
24126
24127    /**
24128     * The opposite of `_.pickBy`; this method creates an object composed of
24129     * the own and inherited enumerable string keyed properties of `object` that
24130     * `predicate` doesn't return truthy for. The predicate is invoked with two
24131     * arguments: (value, key).
24132     *
24133     * @static
24134     * @memberOf _
24135     * @since 4.0.0
24136     * @category Object
24137     * @param {Object} object The source object.
24138     * @param {Function} [predicate=_.identity] The function invoked per property.
24139     * @returns {Object} Returns the new object.
24140     * @example
24141     *
24142     * var object = { 'a': 1, 'b': '2', 'c': 3 };
24143     *
24144     * _.omitBy(object, _.isNumber);
24145     * // => { 'b': '2' }
24146     */
24147    function omitBy(object, predicate) {
24148      return pickBy(object, negate(getIteratee(predicate)));
24149    }
24150
24151    /**
24152     * Creates an object composed of the picked `object` properties.
24153     *
24154     * @static
24155     * @since 0.1.0
24156     * @memberOf _
24157     * @category Object
24158     * @param {Object} object The source object.
24159     * @param {...(string|string[])} [paths] The property paths to pick.
24160     * @returns {Object} Returns the new object.
24161     * @example
24162     *
24163     * var object = { 'a': 1, 'b': '2', 'c': 3 };
24164     *
24165     * _.pick(object, ['a', 'c']);
24166     * // => { 'a': 1, 'c': 3 }
24167     */
24168    var pick = flatRest(function(object, paths) {
24169      return object == null ? {} : basePick(object, paths);
24170    });
24171
24172    /**
24173     * Creates an object composed of the `object` properties `predicate` returns
24174     * truthy for. The predicate is invoked with two arguments: (value, key).
24175     *
24176     * @static
24177     * @memberOf _
24178     * @since 4.0.0
24179     * @category Object
24180     * @param {Object} object The source object.
24181     * @param {Function} [predicate=_.identity] The function invoked per property.
24182     * @returns {Object} Returns the new object.
24183     * @example
24184     *
24185     * var object = { 'a': 1, 'b': '2', 'c': 3 };
24186     *
24187     * _.pickBy(object, _.isNumber);
24188     * // => { 'a': 1, 'c': 3 }
24189     */
24190    function pickBy(object, predicate) {
24191      if (object == null) {
24192        return {};
24193      }
24194      var props = arrayMap(getAllKeysIn(object), function(prop) {
24195        return [prop];
24196      });
24197      predicate = getIteratee(predicate);
24198      return basePickBy(object, props, function(value, path) {
24199        return predicate(value, path[0]);
24200      });
24201    }
24202
24203    /**
24204     * This method is like `_.get` except that if the resolved value is a
24205     * function it's invoked with the `this` binding of its parent object and
24206     * its result is returned.
24207     *
24208     * @static
24209     * @since 0.1.0
24210     * @memberOf _
24211     * @category Object
24212     * @param {Object} object The object to query.
24213     * @param {Array|string} path The path of the property to resolve.
24214     * @param {*} [defaultValue] The value returned for `undefined` resolved values.
24215     * @returns {*} Returns the resolved value.
24216     * @example
24217     *
24218     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };
24219     *
24220     * _.result(object, 'a[0].b.c1');
24221     * // => 3
24222     *
24223     * _.result(object, 'a[0].b.c2');
24224     * // => 4
24225     *
24226     * _.result(object, 'a[0].b.c3', 'default');
24227     * // => 'default'
24228     *
24229     * _.result(object, 'a[0].b.c3', _.constant('default'));
24230     * // => 'default'
24231     */
24232    function result(object, path, defaultValue) {
24233      path = castPath(path, object);
24234
24235      var index = -1,
24236          length = path.length;
24237
24238      // Ensure the loop is entered when path is empty.
24239      if (!length) {
24240        length = 1;
24241        object = undefined;
24242      }
24243      while (++index < length) {
24244        var value = object == null ? undefined : object[toKey(path[index])];
24245        if (value === undefined) {
24246          index = length;
24247          value = defaultValue;
24248        }
24249        object = isFunction(value) ? value.call(object) : value;
24250      }
24251      return object;
24252    }
24253
24254    /**
24255     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,
24256     * it's created. Arrays are created for missing index properties while objects
24257     * are created for all other missing properties. Use `_.setWith` to customize
24258     * `path` creation.
24259     *
24260     * **Note:** This method mutates `object`.
24261     *
24262     * @static
24263     * @memberOf _
24264     * @since 3.7.0
24265     * @category Object
24266     * @param {Object} object The object to modify.
24267     * @param {Array|string} path The path of the property to set.
24268     * @param {*} value The value to set.
24269     * @returns {Object} Returns `object`.
24270     * @example
24271     *
24272     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
24273     *
24274     * _.set(object, 'a[0].b.c', 4);
24275     * console.log(object.a[0].b.c);
24276     * // => 4
24277     *
24278     * _.set(object, ['x', '0', 'y', 'z'], 5);
24279     * console.log(object.x[0].y.z);
24280     * // => 5
24281     */
24282    function set(object, path, value) {
24283      return object == null ? object : baseSet(object, path, value);
24284    }
24285
24286    /**
24287     * This method is like `_.set` except that it accepts `customizer` which is
24288     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`
24289     * path creation is handled by the method instead. The `customizer` is invoked
24290     * with three arguments: (nsValue, key, nsObject).
24291     *
24292     * **Note:** This method mutates `object`.
24293     *
24294     * @static
24295     * @memberOf _
24296     * @since 4.0.0
24297     * @category Object
24298     * @param {Object} object The object to modify.
24299     * @param {Array|string} path The path of the property to set.
24300     * @param {*} value The value to set.
24301     * @param {Function} [customizer] The function to customize assigned values.
24302     * @returns {Object} Returns `object`.
24303     * @example
24304     *
24305     * var object = {};
24306     *
24307     * _.setWith(object, '[0][1]', 'a', Object);
24308     * // => { '0': { '1': 'a' } }
24309     */
24310    function setWith(object, path, value, customizer) {
24311      customizer = typeof customizer == 'function' ? customizer : undefined;
24312      return object == null ? object : baseSet(object, path, value, customizer);
24313    }
24314
24315    /**
24316     * Creates an array of own enumerable string keyed-value pairs for `object`
24317     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its
24318     * entries are returned.
24319     *
24320     * @static
24321     * @memberOf _
24322     * @since 4.0.0
24323     * @alias entries
24324     * @category Object
24325     * @param {Object} object The object to query.
24326     * @returns {Array} Returns the key-value pairs.
24327     * @example
24328     *
24329     * function Foo() {
24330     *   this.a = 1;
24331     *   this.b = 2;
24332     * }
24333     *
24334     * Foo.prototype.c = 3;
24335     *
24336     * _.toPairs(new Foo);
24337     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)
24338     */
24339    var toPairs = createToPairs(keys);
24340
24341    /**
24342     * Creates an array of own and inherited enumerable string keyed-value pairs
24343     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map
24344     * or set, its entries are returned.
24345     *
24346     * @static
24347     * @memberOf _
24348     * @since 4.0.0
24349     * @alias entriesIn
24350     * @category Object
24351     * @param {Object} object The object to query.
24352     * @returns {Array} Returns the key-value pairs.
24353     * @example
24354     *
24355     * function Foo() {
24356     *   this.a = 1;
24357     *   this.b = 2;
24358     * }
24359     *
24360     * Foo.prototype.c = 3;
24361     *
24362     * _.toPairsIn(new Foo);
24363     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)
24364     */
24365    var toPairsIn = createToPairs(keysIn);
24366
24367    /**
24368     * An alternative to `_.reduce`; this method transforms `object` to a new
24369     * `accumulator` object which is the result of running each of its own
24370     * enumerable string keyed properties thru `iteratee`, with each invocation
24371     * potentially mutating the `accumulator` object. If `accumulator` is not
24372     * provided, a new object with the same `[[Prototype]]` will be used. The
24373     * iteratee is invoked with four arguments: (accumulator, value, key, object).
24374     * Iteratee functions may exit iteration early by explicitly returning `false`.
24375     *
24376     * @static
24377     * @memberOf _
24378     * @since 1.3.0
24379     * @category Object
24380     * @param {Object} object The object to iterate over.
24381     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
24382     * @param {*} [accumulator] The custom accumulator value.
24383     * @returns {*} Returns the accumulated value.
24384     * @example
24385     *
24386     * _.transform([2, 3, 4], function(result, n) {
24387     *   result.push(n *= n);
24388     *   return n % 2 == 0;
24389     * }, []);
24390     * // => [4, 9]
24391     *
24392     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
24393     *   (result[value] || (result[value] = [])).push(key);
24394     * }, {});
24395     * // => { '1': ['a', 'c'], '2': ['b'] }
24396     */
24397    function transform(object, iteratee, accumulator) {
24398      var isArr = isArray(object),
24399          isArrLike = isArr || isBuffer(object) || isTypedArray(object);
24400
24401      iteratee = getIteratee(iteratee, 4);
24402      if (accumulator == null) {
24403        var Ctor = object && object.constructor;
24404        if (isArrLike) {
24405          accumulator = isArr ? new Ctor : [];
24406        }
24407        else if (isObject(object)) {
24408          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};
24409        }
24410        else {
24411          accumulator = {};
24412        }
24413      }
24414      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {
24415        return iteratee(accumulator, value, index, object);
24416      });
24417      return accumulator;
24418    }
24419
24420    /**
24421     * Removes the property at `path` of `object`.
24422     *
24423     * **Note:** This method mutates `object`.
24424     *
24425     * @static
24426     * @memberOf _
24427     * @since 4.0.0
24428     * @category Object
24429     * @param {Object} object The object to modify.
24430     * @param {Array|string} path The path of the property to unset.
24431     * @returns {boolean} Returns `true` if the property is deleted, else `false`.
24432     * @example
24433     *
24434     * var object = { 'a': [{ 'b': { 'c': 7 } }] };
24435     * _.unset(object, 'a[0].b.c');
24436     * // => true
24437     *
24438     * console.log(object);
24439     * // => { 'a': [{ 'b': {} }] };
24440     *
24441     * _.unset(object, ['a', '0', 'b', 'c']);
24442     * // => true
24443     *
24444     * console.log(object);
24445     * // => { 'a': [{ 'b': {} }] };
24446     */
24447    function unset(object, path) {
24448      return object == null ? true : baseUnset(object, path);
24449    }
24450
24451    /**
24452     * This method is like `_.set` except that accepts `updater` to produce the
24453     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`
24454     * is invoked with one argument: (value).
24455     *
24456     * **Note:** This method mutates `object`.
24457     *
24458     * @static
24459     * @memberOf _
24460     * @since 4.6.0
24461     * @category Object
24462     * @param {Object} object The object to modify.
24463     * @param {Array|string} path The path of the property to set.
24464     * @param {Function} updater The function to produce the updated value.
24465     * @returns {Object} Returns `object`.
24466     * @example
24467     *
24468     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
24469     *
24470     * _.update(object, 'a[0].b.c', function(n) { return n * n; });
24471     * console.log(object.a[0].b.c);
24472     * // => 9
24473     *
24474     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });
24475     * console.log(object.x[0].y.z);
24476     * // => 0
24477     */
24478    function update(object, path, updater) {
24479      return object == null ? object : baseUpdate(object, path, castFunction(updater));
24480    }
24481
24482    /**
24483     * This method is like `_.update` except that it accepts `customizer` which is
24484     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`
24485     * path creation is handled by the method instead. The `customizer` is invoked
24486     * with three arguments: (nsValue, key, nsObject).
24487     *
24488     * **Note:** This method mutates `object`.
24489     *
24490     * @static
24491     * @memberOf _
24492     * @since 4.6.0
24493     * @category Object
24494     * @param {Object} object The object to modify.
24495     * @param {Array|string} path The path of the property to set.
24496     * @param {Function} updater The function to produce the updated value.
24497     * @param {Function} [customizer] The function to customize assigned values.
24498     * @returns {Object} Returns `object`.
24499     * @example
24500     *
24501     * var object = {};
24502     *
24503     * _.updateWith(object, '[0][1]', _.constant('a'), Object);
24504     * // => { '0': { '1': 'a' } }
24505     */
24506    function updateWith(object, path, updater, customizer) {
24507      customizer = typeof customizer == 'function' ? customizer : undefined;
24508      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);
24509    }
24510
24511    /**
24512     * Creates an array of the own enumerable string keyed property values of `object`.
24513     *
24514     * **Note:** Non-object values are coerced to objects.
24515     *
24516     * @static
24517     * @since 0.1.0
24518     * @memberOf _
24519     * @category Object
24520     * @param {Object} object The object to query.
24521     * @returns {Array} Returns the array of property values.
24522     * @example
24523     *
24524     * function Foo() {
24525     *   this.a = 1;
24526     *   this.b = 2;
24527     * }
24528     *
24529     * Foo.prototype.c = 3;
24530     *
24531     * _.values(new Foo);
24532     * // => [1, 2] (iteration order is not guaranteed)
24533     *
24534     * _.values('hi');
24535     * // => ['h', 'i']
24536     */
24537    function values(object) {
24538      return object == null ? [] : baseValues(object, keys(object));
24539    }
24540
24541    /**
24542     * Creates an array of the own and inherited enumerable string keyed property
24543     * values of `object`.
24544     *
24545     * **Note:** Non-object values are coerced to objects.
24546     *
24547     * @static
24548     * @memberOf _
24549     * @since 3.0.0
24550     * @category Object
24551     * @param {Object} object The object to query.
24552     * @returns {Array} Returns the array of property values.
24553     * @example
24554     *
24555     * function Foo() {
24556     *   this.a = 1;
24557     *   this.b = 2;
24558     * }
24559     *
24560     * Foo.prototype.c = 3;
24561     *
24562     * _.valuesIn(new Foo);
24563     * // => [1, 2, 3] (iteration order is not guaranteed)
24564     */
24565    function valuesIn(object) {
24566      return object == null ? [] : baseValues(object, keysIn(object));
24567    }
24568
24569    /*------------------------------------------------------------------------*/
24570
24571    /**
24572     * Clamps `number` within the inclusive `lower` and `upper` bounds.
24573     *
24574     * @static
24575     * @memberOf _
24576     * @since 4.0.0
24577     * @category Number
24578     * @param {number} number The number to clamp.
24579     * @param {number} [lower] The lower bound.
24580     * @param {number} upper The upper bound.
24581     * @returns {number} Returns the clamped number.
24582     * @example
24583     *
24584     * _.clamp(-10, -5, 5);
24585     * // => -5
24586     *
24587     * _.clamp(10, -5, 5);
24588     * // => 5
24589     */
24590    function clamp(number, lower, upper) {
24591      if (upper === undefined) {
24592        upper = lower;
24593        lower = undefined;
24594      }
24595      if (upper !== undefined) {
24596        upper = toNumber(upper);
24597        upper = upper === upper ? upper : 0;
24598      }
24599      if (lower !== undefined) {
24600        lower = toNumber(lower);
24601        lower = lower === lower ? lower : 0;
24602      }
24603      return baseClamp(toNumber(number), lower, upper);
24604    }
24605
24606    /**
24607     * Checks if `n` is between `start` and up to, but not including, `end`. If
24608     * `end` is not specified, it's set to `start` with `start` then set to `0`.
24609     * If `start` is greater than `end` the params are swapped to support
24610     * negative ranges.
24611     *
24612     * @static
24613     * @memberOf _
24614     * @since 3.3.0
24615     * @category Number
24616     * @param {number} number The number to check.
24617     * @param {number} [start=0] The start of the range.
24618     * @param {number} end The end of the range.
24619     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.
24620     * @see _.range, _.rangeRight
24621     * @example
24622     *
24623     * _.inRange(3, 2, 4);
24624     * // => true
24625     *
24626     * _.inRange(4, 8);
24627     * // => true
24628     *
24629     * _.inRange(4, 2);
24630     * // => false
24631     *
24632     * _.inRange(2, 2);
24633     * // => false
24634     *
24635     * _.inRange(1.2, 2);
24636     * // => true
24637     *
24638     * _.inRange(5.2, 4);
24639     * // => false
24640     *
24641     * _.inRange(-3, -2, -6);
24642     * // => true
24643     */
24644    function inRange(number, start, end) {
24645      start = toFinite(start);
24646      if (end === undefined) {
24647        end = start;
24648        start = 0;
24649      } else {
24650        end = toFinite(end);
24651      }
24652      number = toNumber(number);
24653      return baseInRange(number, start, end);
24654    }
24655
24656    /**
24657     * Produces a random number between the inclusive `lower` and `upper` bounds.
24658     * If only one argument is provided a number between `0` and the given number
24659     * is returned. If `floating` is `true`, or either `lower` or `upper` are
24660     * floats, a floating-point number is returned instead of an integer.
24661     *
24662     * **Note:** JavaScript follows the IEEE-754 standard for resolving
24663     * floating-point values which can produce unexpected results.
24664     *
24665     * @static
24666     * @memberOf _
24667     * @since 0.7.0
24668     * @category Number
24669     * @param {number} [lower=0] The lower bound.
24670     * @param {number} [upper=1] The upper bound.
24671     * @param {boolean} [floating] Specify returning a floating-point number.
24672     * @returns {number} Returns the random number.
24673     * @example
24674     *
24675     * _.random(0, 5);
24676     * // => an integer between 0 and 5
24677     *
24678     * _.random(5);
24679     * // => also an integer between 0 and 5
24680     *
24681     * _.random(5, true);
24682     * // => a floating-point number between 0 and 5
24683     *
24684     * _.random(1.2, 5.2);
24685     * // => a floating-point number between 1.2 and 5.2
24686     */
24687    function random(lower, upper, floating) {
24688      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {
24689        upper = floating = undefined;
24690      }
24691      if (floating === undefined) {
24692        if (typeof upper == 'boolean') {
24693          floating = upper;
24694          upper = undefined;
24695        }
24696        else if (typeof lower == 'boolean') {
24697          floating = lower;
24698          lower = undefined;
24699        }
24700      }
24701      if (lower === undefined && upper === undefined) {
24702        lower = 0;
24703        upper = 1;
24704      }
24705      else {
24706        lower = toFinite(lower);
24707        if (upper === undefined) {
24708          upper = lower;
24709          lower = 0;
24710        } else {
24711          upper = toFinite(upper);
24712        }
24713      }
24714      if (lower > upper) {
24715        var temp = lower;
24716        lower = upper;
24717        upper = temp;
24718      }
24719      if (floating || lower % 1 || upper % 1) {
24720        var rand = nativeRandom();
24721        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);
24722      }
24723      return baseRandom(lower, upper);
24724    }
24725
24726    /*------------------------------------------------------------------------*/
24727
24728    /**
24729     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).
24730     *
24731     * @static
24732     * @memberOf _
24733     * @since 3.0.0
24734     * @category String
24735     * @param {string} [string=''] The string to convert.
24736     * @returns {string} Returns the camel cased string.
24737     * @example
24738     *
24739     * _.camelCase('Foo Bar');
24740     * // => 'fooBar'
24741     *
24742     * _.camelCase('--foo-bar--');
24743     * // => 'fooBar'
24744     *
24745     * _.camelCase('__FOO_BAR__');
24746     * // => 'fooBar'
24747     */
24748    var camelCase = createCompounder(function(result, word, index) {
24749      word = word.toLowerCase();
24750      return result + (index ? capitalize(word) : word);
24751    });
24752
24753    /**
24754     * Converts the first character of `string` to upper case and the remaining
24755     * to lower case.
24756     *
24757     * @static
24758     * @memberOf _
24759     * @since 3.0.0
24760     * @category String
24761     * @param {string} [string=''] The string to capitalize.
24762     * @returns {string} Returns the capitalized string.
24763     * @example
24764     *
24765     * _.capitalize('FRED');
24766     * // => 'Fred'
24767     */
24768    function capitalize(string) {
24769      return upperFirst(toString(string).toLowerCase());
24770    }
24771
24772    /**
24773     * Deburrs `string` by converting
24774     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)
24775     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)
24776     * letters to basic Latin letters and removing
24777     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).
24778     *
24779     * @static
24780     * @memberOf _
24781     * @since 3.0.0
24782     * @category String
24783     * @param {string} [string=''] The string to deburr.
24784     * @returns {string} Returns the deburred string.
24785     * @example
24786     *
24787     * _.deburr('déjà vu');
24788     * // => 'deja vu'
24789     */
24790    function deburr(string) {
24791      string = toString(string);
24792      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');
24793    }
24794
24795    /**
24796     * Checks if `string` ends with the given target string.
24797     *
24798     * @static
24799     * @memberOf _
24800     * @since 3.0.0
24801     * @category String
24802     * @param {string} [string=''] The string to inspect.
24803     * @param {string} [target] The string to search for.
24804     * @param {number} [position=string.length] The position to search up to.
24805     * @returns {boolean} Returns `true` if `string` ends with `target`,
24806     *  else `false`.
24807     * @example
24808     *
24809     * _.endsWith('abc', 'c');
24810     * // => true
24811     *
24812     * _.endsWith('abc', 'b');
24813     * // => false
24814     *
24815     * _.endsWith('abc', 'b', 2);
24816     * // => true
24817     */
24818    function endsWith(string, target, position) {
24819      string = toString(string);
24820      target = baseToString(target);
24821
24822      var length = string.length;
24823      position = position === undefined
24824        ? length
24825        : baseClamp(toInteger(position), 0, length);
24826
24827      var end = position;
24828      position -= target.length;
24829      return position >= 0 && string.slice(position, end) == target;
24830    }
24831
24832    /**
24833     * Converts the characters "&", "<", ">", '"', and "'" in `string` to their
24834     * corresponding HTML entities.
24835     *
24836     * **Note:** No other characters are escaped. To escape additional
24837     * characters use a third-party library like [_he_](https://mths.be/he).
24838     *
24839     * Though the ">" character is escaped for symmetry, characters like
24840     * ">" and "/" don't need escaping in HTML and have no special meaning
24841     * unless they're part of a tag or unquoted attribute value. See
24842     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)
24843     * (under "semi-related fun fact") for more details.
24844     *
24845     * When working with HTML you should always
24846     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce
24847     * XSS vectors.
24848     *
24849     * @static
24850     * @since 0.1.0
24851     * @memberOf _
24852     * @category String
24853     * @param {string} [string=''] The string to escape.
24854     * @returns {string} Returns the escaped string.
24855     * @example
24856     *
24857     * _.escape('fred, barney, & pebbles');
24858     * // => 'fred, barney, &amp; pebbles'
24859     */
24860    function escape(string) {
24861      string = toString(string);
24862      return (string && reHasUnescapedHtml.test(string))
24863        ? string.replace(reUnescapedHtml, escapeHtmlChar)
24864        : string;
24865    }
24866
24867    /**
24868     * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+",
24869     * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`.
24870     *
24871     * @static
24872     * @memberOf _
24873     * @since 3.0.0
24874     * @category String
24875     * @param {string} [string=''] The string to escape.
24876     * @returns {string} Returns the escaped string.
24877     * @example
24878     *
24879     * _.escapeRegExp('[lodash](https://lodash.com/)');
24880     * // => '\[lodash\]\(https://lodash\.com/\)'
24881     */
24882    function escapeRegExp(string) {
24883      string = toString(string);
24884      return (string && reHasRegExpChar.test(string))
24885        ? string.replace(reRegExpChar, '\\$&')
24886        : string;
24887    }
24888
24889    /**
24890     * Converts `string` to
24891     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).
24892     *
24893     * @static
24894     * @memberOf _
24895     * @since 3.0.0
24896     * @category String
24897     * @param {string} [string=''] The string to convert.
24898     * @returns {string} Returns the kebab cased string.
24899     * @example
24900     *
24901     * _.kebabCase('Foo Bar');
24902     * // => 'foo-bar'
24903     *
24904     * _.kebabCase('fooBar');
24905     * // => 'foo-bar'
24906     *
24907     * _.kebabCase('__FOO_BAR__');
24908     * // => 'foo-bar'
24909     */
24910    var kebabCase = createCompounder(function(result, word, index) {
24911      return result + (index ? '-' : '') + word.toLowerCase();
24912    });
24913
24914    /**
24915     * Converts `string`, as space separated words, to lower case.
24916     *
24917     * @static
24918     * @memberOf _
24919     * @since 4.0.0
24920     * @category String
24921     * @param {string} [string=''] The string to convert.
24922     * @returns {string} Returns the lower cased string.
24923     * @example
24924     *
24925     * _.lowerCase('--Foo-Bar--');
24926     * // => 'foo bar'
24927     *
24928     * _.lowerCase('fooBar');
24929     * // => 'foo bar'
24930     *
24931     * _.lowerCase('__FOO_BAR__');
24932     * // => 'foo bar'
24933     */
24934    var lowerCase = createCompounder(function(result, word, index) {
24935      return result + (index ? ' ' : '') + word.toLowerCase();
24936    });
24937
24938    /**
24939     * Converts the first character of `string` to lower case.
24940     *
24941     * @static
24942     * @memberOf _
24943     * @since 4.0.0
24944     * @category String
24945     * @param {string} [string=''] The string to convert.
24946     * @returns {string} Returns the converted string.
24947     * @example
24948     *
24949     * _.lowerFirst('Fred');
24950     * // => 'fred'
24951     *
24952     * _.lowerFirst('FRED');
24953     * // => 'fRED'
24954     */
24955    var lowerFirst = createCaseFirst('toLowerCase');
24956
24957    /**
24958     * Pads `string` on the left and right sides if it's shorter than `length`.
24959     * Padding characters are truncated if they can't be evenly divided by `length`.
24960     *
24961     * @static
24962     * @memberOf _
24963     * @since 3.0.0
24964     * @category String
24965     * @param {string} [string=''] The string to pad.
24966     * @param {number} [length=0] The padding length.
24967     * @param {string} [chars=' '] The string used as padding.
24968     * @returns {string} Returns the padded string.
24969     * @example
24970     *
24971     * _.pad('abc', 8);
24972     * // => '  abc   '
24973     *
24974     * _.pad('abc', 8, '_-');
24975     * // => '_-abc_-_'
24976     *
24977     * _.pad('abc', 3);
24978     * // => 'abc'
24979     */
24980    function pad(string, length, chars) {
24981      string = toString(string);
24982      length = toInteger(length);
24983
24984      var strLength = length ? stringSize(string) : 0;
24985      if (!length || strLength >= length) {
24986        return string;
24987      }
24988      var mid = (length - strLength) / 2;
24989      return (
24990        createPadding(nativeFloor(mid), chars) +
24991        string +
24992        createPadding(nativeCeil(mid), chars)
24993      );
24994    }
24995
24996    /**
24997     * Pads `string` on the right side if it's shorter than `length`. Padding
24998     * characters are truncated if they exceed `length`.
24999     *
25000     * @static
25001     * @memberOf _
25002     * @since 4.0.0
25003     * @category String
25004     * @param {string} [string=''] The string to pad.
25005     * @param {number} [length=0] The padding length.
25006     * @param {string} [chars=' '] The string used as padding.
25007     * @returns {string} Returns the padded string.
25008     * @example
25009     *
25010     * _.padEnd('abc', 6);
25011     * // => 'abc   '
25012     *
25013     * _.padEnd('abc', 6, '_-');
25014     * // => 'abc_-_'
25015     *
25016     * _.padEnd('abc', 3);
25017     * // => 'abc'
25018     */
25019    function padEnd(string, length, chars) {
25020      string = toString(string);
25021      length = toInteger(length);
25022
25023      var strLength = length ? stringSize(string) : 0;
25024      return (length && strLength < length)
25025        ? (string + createPadding(length - strLength, chars))
25026        : string;
25027    }
25028
25029    /**
25030     * Pads `string` on the left side if it's shorter than `length`. Padding
25031     * characters are truncated if they exceed `length`.
25032     *
25033     * @static
25034     * @memberOf _
25035     * @since 4.0.0
25036     * @category String
25037     * @param {string} [string=''] The string to pad.
25038     * @param {number} [length=0] The padding length.
25039     * @param {string} [chars=' '] The string used as padding.
25040     * @returns {string} Returns the padded string.
25041     * @example
25042     *
25043     * _.padStart('abc', 6);
25044     * // => '   abc'
25045     *
25046     * _.padStart('abc', 6, '_-');
25047     * // => '_-_abc'
25048     *
25049     * _.padStart('abc', 3);
25050     * // => 'abc'
25051     */
25052    function padStart(string, length, chars) {
25053      string = toString(string);
25054      length = toInteger(length);
25055
25056      var strLength = length ? stringSize(string) : 0;
25057      return (length && strLength < length)
25058        ? (createPadding(length - strLength, chars) + string)
25059        : string;
25060    }
25061
25062    /**
25063     * Converts `string` to an integer of the specified radix. If `radix` is
25064     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a
25065     * hexadecimal, in which case a `radix` of `16` is used.
25066     *
25067     * **Note:** This method aligns with the
25068     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.
25069     *
25070     * @static
25071     * @memberOf _
25072     * @since 1.1.0
25073     * @category String
25074     * @param {string} string The string to convert.
25075     * @param {number} [radix=10] The radix to interpret `value` by.
25076     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
25077     * @returns {number} Returns the converted integer.
25078     * @example
25079     *
25080     * _.parseInt('08');
25081     * // => 8
25082     *
25083     * _.map(['6', '08', '10'], _.parseInt);
25084     * // => [6, 8, 10]
25085     */
25086    function parseInt(string, radix, guard) {
25087      if (guard || radix == null) {
25088        radix = 0;
25089      } else if (radix) {
25090        radix = +radix;
25091      }
25092      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);
25093    }
25094
25095    /**
25096     * Repeats the given string `n` times.
25097     *
25098     * @static
25099     * @memberOf _
25100     * @since 3.0.0
25101     * @category String
25102     * @param {string} [string=''] The string to repeat.
25103     * @param {number} [n=1] The number of times to repeat the string.
25104     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
25105     * @returns {string} Returns the repeated string.
25106     * @example
25107     *
25108     * _.repeat('*', 3);
25109     * // => '***'
25110     *
25111     * _.repeat('abc', 2);
25112     * // => 'abcabc'
25113     *
25114     * _.repeat('abc', 0);
25115     * // => ''
25116     */
25117    function repeat(string, n, guard) {
25118      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {
25119        n = 1;
25120      } else {
25121        n = toInteger(n);
25122      }
25123      return baseRepeat(toString(string), n);
25124    }
25125
25126    /**
25127     * Replaces matches for `pattern` in `string` with `replacement`.
25128     *
25129     * **Note:** This method is based on
25130     * [`String#replace`](https://mdn.io/String/replace).
25131     *
25132     * @static
25133     * @memberOf _
25134     * @since 4.0.0
25135     * @category String
25136     * @param {string} [string=''] The string to modify.
25137     * @param {RegExp|string} pattern The pattern to replace.
25138     * @param {Function|string} replacement The match replacement.
25139     * @returns {string} Returns the modified string.
25140     * @example
25141     *
25142     * _.replace('Hi Fred', 'Fred', 'Barney');
25143     * // => 'Hi Barney'
25144     */
25145    function replace() {
25146      var args = arguments,
25147          string = toString(args[0]);
25148
25149      return args.length < 3 ? string : string.replace(args[1], args[2]);
25150    }
25151
25152    /**
25153     * Converts `string` to
25154     * [snake case](https://en.wikipedia.org/wiki/Snake_case).
25155     *
25156     * @static
25157     * @memberOf _
25158     * @since 3.0.0
25159     * @category String
25160     * @param {string} [string=''] The string to convert.
25161     * @returns {string} Returns the snake cased string.
25162     * @example
25163     *
25164     * _.snakeCase('Foo Bar');
25165     * // => 'foo_bar'
25166     *
25167     * _.snakeCase('fooBar');
25168     * // => 'foo_bar'
25169     *
25170     * _.snakeCase('--FOO-BAR--');
25171     * // => 'foo_bar'
25172     */
25173    var snakeCase = createCompounder(function(result, word, index) {
25174      return result + (index ? '_' : '') + word.toLowerCase();
25175    });
25176
25177    /**
25178     * Splits `string` by `separator`.
25179     *
25180     * **Note:** This method is based on
25181     * [`String#split`](https://mdn.io/String/split).
25182     *
25183     * @static
25184     * @memberOf _
25185     * @since 4.0.0
25186     * @category String
25187     * @param {string} [string=''] The string to split.
25188     * @param {RegExp|string} separator The separator pattern to split by.
25189     * @param {number} [limit] The length to truncate results to.
25190     * @returns {Array} Returns the string segments.
25191     * @example
25192     *
25193     * _.split('a-b-c', '-', 2);
25194     * // => ['a', 'b']
25195     */
25196    function split(string, separator, limit) {
25197      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {
25198        separator = limit = undefined;
25199      }
25200      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;
25201      if (!limit) {
25202        return [];
25203      }
25204      string = toString(string);
25205      if (string && (
25206            typeof separator == 'string' ||
25207            (separator != null && !isRegExp(separator))
25208          )) {
25209        separator = baseToString(separator);
25210        if (!separator && hasUnicode(string)) {
25211          return castSlice(stringToArray(string), 0, limit);
25212        }
25213      }
25214      return string.split(separator, limit);
25215    }
25216
25217    /**
25218     * Converts `string` to
25219     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).
25220     *
25221     * @static
25222     * @memberOf _
25223     * @since 3.1.0
25224     * @category String
25225     * @param {string} [string=''] The string to convert.
25226     * @returns {string} Returns the start cased string.
25227     * @example
25228     *
25229     * _.startCase('--foo-bar--');
25230     * // => 'Foo Bar'
25231     *
25232     * _.startCase('fooBar');
25233     * // => 'Foo Bar'
25234     *
25235     * _.startCase('__FOO_BAR__');
25236     * // => 'FOO BAR'
25237     */
25238    var startCase = createCompounder(function(result, word, index) {
25239      return result + (index ? ' ' : '') + upperFirst(word);
25240    });
25241
25242    /**
25243     * Checks if `string` starts with the given target string.
25244     *
25245     * @static
25246     * @memberOf _
25247     * @since 3.0.0
25248     * @category String
25249     * @param {string} [string=''] The string to inspect.
25250     * @param {string} [target] The string to search for.
25251     * @param {number} [position=0] The position to search from.
25252     * @returns {boolean} Returns `true` if `string` starts with `target`,
25253     *  else `false`.
25254     * @example
25255     *
25256     * _.startsWith('abc', 'a');
25257     * // => true
25258     *
25259     * _.startsWith('abc', 'b');
25260     * // => false
25261     *
25262     * _.startsWith('abc', 'b', 1);
25263     * // => true
25264     */
25265    function startsWith(string, target, position) {
25266      string = toString(string);
25267      position = position == null
25268        ? 0
25269        : baseClamp(toInteger(position), 0, string.length);
25270
25271      target = baseToString(target);
25272      return string.slice(position, position + target.length) == target;
25273    }
25274
25275    /**
25276     * Creates a compiled template function that can interpolate data properties
25277     * in "interpolate" delimiters, HTML-escape interpolated data properties in
25278     * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data
25279     * properties may be accessed as free variables in the template. If a setting
25280     * object is given, it takes precedence over `_.templateSettings` values.
25281     *
25282     * **Note:** In the development build `_.template` utilizes
25283     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)
25284     * for easier debugging.
25285     *
25286     * For more information on precompiling templates see
25287     * [lodash's custom builds documentation](https://lodash.com/custom-builds).
25288     *
25289     * For more information on Chrome extension sandboxes see
25290     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).
25291     *
25292     * @static
25293     * @since 0.1.0
25294     * @memberOf _
25295     * @category String
25296     * @param {string} [string=''] The template string.
25297     * @param {Object} [options={}] The options object.
25298     * @param {RegExp} [options.escape=_.templateSettings.escape]
25299     *  The HTML "escape" delimiter.
25300     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]
25301     *  The "evaluate" delimiter.
25302     * @param {Object} [options.imports=_.templateSettings.imports]
25303     *  An object to import into the template as free variables.
25304     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]
25305     *  The "interpolate" delimiter.
25306     * @param {string} [options.sourceURL='lodash.templateSources[n]']
25307     *  The sourceURL of the compiled template.
25308     * @param {string} [options.variable='obj']
25309     *  The data object variable name.
25310     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
25311     * @returns {Function} Returns the compiled template function.
25312     * @example
25313     *
25314     * // Use the "interpolate" delimiter to create a compiled template.
25315     * var compiled = _.template('hello <%= user %>!');
25316     * compiled({ 'user': 'fred' });
25317     * // => 'hello fred!'
25318     *
25319     * // Use the HTML "escape" delimiter to escape data property values.
25320     * var compiled = _.template('<b><%- value %></b>');
25321     * compiled({ 'value': '<script>' });
25322     * // => '<b>&lt;script&gt;</b>'
25323     *
25324     * // Use the "evaluate" delimiter to execute JavaScript and generate HTML.
25325     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');
25326     * compiled({ 'users': ['fred', 'barney'] });
25327     * // => '<li>fred</li><li>barney</li>'
25328     *
25329     * // Use the internal `print` function in "evaluate" delimiters.
25330     * var compiled = _.template('<% print("hello " + user); %>!');
25331     * compiled({ 'user': 'barney' });
25332     * // => 'hello barney!'
25333     *
25334     * // Use the ES template literal delimiter as an "interpolate" delimiter.
25335     * // Disable support by replacing the "interpolate" delimiter.
25336     * var compiled = _.template('hello ${ user }!');
25337     * compiled({ 'user': 'pebbles' });
25338     * // => 'hello pebbles!'
25339     *
25340     * // Use backslashes to treat delimiters as plain text.
25341     * var compiled = _.template('<%= "\\<%- value %\\>" %>');
25342     * compiled({ 'value': 'ignored' });
25343     * // => '<%- value %>'
25344     *
25345     * // Use the `imports` option to import `jQuery` as `jq`.
25346     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';
25347     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });
25348     * compiled({ 'users': ['fred', 'barney'] });
25349     * // => '<li>fred</li><li>barney</li>'
25350     *
25351     * // Use the `sourceURL` option to specify a custom sourceURL for the template.
25352     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });
25353     * compiled(data);
25354     * // => Find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector.
25355     *
25356     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.
25357     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });
25358     * compiled.source;
25359     * // => function(data) {
25360     * //   var __t, __p = '';
25361     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';
25362     * //   return __p;
25363     * // }
25364     *
25365     * // Use custom template delimiters.
25366     * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g;
25367     * var compiled = _.template('hello {{ user }}!');
25368     * compiled({ 'user': 'mustache' });
25369     * // => 'hello mustache!'
25370     *
25371     * // Use the `source` property to inline compiled templates for meaningful
25372     * // line numbers in error messages and stack traces.
25373     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\
25374     *   var JST = {\
25375     *     "main": ' + _.template(mainText).source + '\
25376     *   };\
25377     * ');
25378     */
25379    function template(string, options, guard) {
25380      // Based on John Resig's `tmpl` implementation
25381      // (http://ejohn.org/blog/javascript-micro-templating/)
25382      // and Laura Doktorova's doT.js (https://github.com/olado/doT).
25383      var settings = lodash.templateSettings;
25384
25385      if (guard && isIterateeCall(string, options, guard)) {
25386        options = undefined;
25387      }
25388      string = toString(string);
25389      options = assignInWith({}, options, settings, customDefaultsAssignIn);
25390
25391      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),
25392          importsKeys = keys(imports),
25393          importsValues = baseValues(imports, importsKeys);
25394
25395      var isEscaping,
25396          isEvaluating,
25397          index = 0,
25398          interpolate = options.interpolate || reNoMatch,
25399          source = "__p += '";
25400
25401      // Compile the regexp to match each delimiter.
25402      var reDelimiters = RegExp(
25403        (options.escape || reNoMatch).source + '|' +
25404        interpolate.source + '|' +
25405        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +
25406        (options.evaluate || reNoMatch).source + '|$'
25407      , 'g');
25408
25409      // Use a sourceURL for easier debugging.
25410      // The sourceURL gets injected into the source that's eval-ed, so be careful
25411      // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in
25412      // and escape the comment, thus injecting code that gets evaled.
25413      var sourceURL = '//# sourceURL=' +
25414        (hasOwnProperty.call(options, 'sourceURL')
25415          ? (options.sourceURL + '').replace(/\s/g, ' ')
25416          : ('lodash.templateSources[' + (++templateCounter) + ']')
25417        ) + '\n';
25418
25419      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
25420        interpolateValue || (interpolateValue = esTemplateValue);
25421
25422        // Escape characters that can't be included in string literals.
25423        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);
25424
25425        // Replace delimiters with snippets.
25426        if (escapeValue) {
25427          isEscaping = true;
25428          source += "' +\n__e(" + escapeValue + ") +\n'";
25429        }
25430        if (evaluateValue) {
25431          isEvaluating = true;
25432          source += "';\n" + evaluateValue + ";\n__p += '";
25433        }
25434        if (interpolateValue) {
25435          source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
25436        }
25437        index = offset + match.length;
25438
25439        // The JS engine embedded in Adobe products needs `match` returned in
25440        // order to produce the correct `offset` value.
25441        return match;
25442      });
25443
25444      source += "';\n";
25445
25446      // If `variable` is not specified wrap a with-statement around the generated
25447      // code to add the data object to the top of the scope chain.
25448      var variable = hasOwnProperty.call(options, 'variable') && options.variable;
25449      if (!variable) {
25450        source = 'with (obj) {\n' + source + '\n}\n';
25451      }
25452      // Throw an error if a forbidden character was found in `variable`, to prevent
25453      // potential command injection attacks.
25454      else if (reForbiddenIdentifierChars.test(variable)) {
25455        throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);
25456      }
25457
25458      // Cleanup code by stripping empty strings.
25459      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
25460        .replace(reEmptyStringMiddle, '$1')
25461        .replace(reEmptyStringTrailing, '$1;');
25462
25463      // Frame code as the function body.
25464      source = 'function(' + (variable || 'obj') + ') {\n' +
25465        (variable
25466          ? ''
25467          : 'obj || (obj = {});\n'
25468        ) +
25469        "var __t, __p = ''" +
25470        (isEscaping
25471           ? ', __e = _.escape'
25472           : ''
25473        ) +
25474        (isEvaluating
25475          ? ', __j = Array.prototype.join;\n' +
25476            "function print() { __p += __j.call(arguments, '') }\n"
25477          : ';\n'
25478        ) +
25479        source +
25480        'return __p\n}';
25481
25482      var result = attempt(function() {
25483        return Function(importsKeys, sourceURL + 'return ' + source)
25484          .apply(undefined, importsValues);
25485      });
25486
25487      // Provide the compiled function's source by its `toString` method or
25488      // the `source` property as a convenience for inlining compiled templates.
25489      result.source = source;
25490      if (isError(result)) {
25491        throw result;
25492      }
25493      return result;
25494    }
25495
25496    /**
25497     * Converts `string`, as a whole, to lower case just like
25498     * [String#toLowerCase](https://mdn.io/toLowerCase).
25499     *
25500     * @static
25501     * @memberOf _
25502     * @since 4.0.0
25503     * @category String
25504     * @param {string} [string=''] The string to convert.
25505     * @returns {string} Returns the lower cased string.
25506     * @example
25507     *
25508     * _.toLower('--Foo-Bar--');
25509     * // => '--foo-bar--'
25510     *
25511     * _.toLower('fooBar');
25512     * // => 'foobar'
25513     *
25514     * _.toLower('__FOO_BAR__');
25515     * // => '__foo_bar__'
25516     */
25517    function toLower(value) {
25518      return toString(value).toLowerCase();
25519    }
25520
25521    /**
25522     * Converts `string`, as a whole, to upper case just like
25523     * [String#toUpperCase](https://mdn.io/toUpperCase).
25524     *
25525     * @static
25526     * @memberOf _
25527     * @since 4.0.0
25528     * @category String
25529     * @param {string} [string=''] The string to convert.
25530     * @returns {string} Returns the upper cased string.
25531     * @example
25532     *
25533     * _.toUpper('--foo-bar--');
25534     * // => '--FOO-BAR--'
25535     *
25536     * _.toUpper('fooBar');
25537     * // => 'FOOBAR'
25538     *
25539     * _.toUpper('__foo_bar__');
25540     * // => '__FOO_BAR__'
25541     */
25542    function toUpper(value) {
25543      return toString(value).toUpperCase();
25544    }
25545
25546    /**
25547     * Removes leading and trailing whitespace or specified characters from `string`.
25548     *
25549     * @static
25550     * @memberOf _
25551     * @since 3.0.0
25552     * @category String
25553     * @param {string} [string=''] The string to trim.
25554     * @param {string} [chars=whitespace] The characters to trim.
25555     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
25556     * @returns {string} Returns the trimmed string.
25557     * @example
25558     *
25559     * _.trim('  abc  ');
25560     * // => 'abc'
25561     *
25562     * _.trim('-_-abc-_-', '_-');
25563     * // => 'abc'
25564     *
25565     * _.map(['  foo  ', '  bar  '], _.trim);
25566     * // => ['foo', 'bar']
25567     */
25568    function trim(string, chars, guard) {
25569      string = toString(string);
25570      if (string && (guard || chars === undefined)) {
25571        return baseTrim(string);
25572      }
25573      if (!string || !(chars = baseToString(chars))) {
25574        return string;
25575      }
25576      var strSymbols = stringToArray(string),
25577          chrSymbols = stringToArray(chars),
25578          start = charsStartIndex(strSymbols, chrSymbols),
25579          end = charsEndIndex(strSymbols, chrSymbols) + 1;
25580
25581      return castSlice(strSymbols, start, end).join('');
25582    }
25583
25584    /**
25585     * Removes trailing whitespace or specified characters from `string`.
25586     *
25587     * @static
25588     * @memberOf _
25589     * @since 4.0.0
25590     * @category String
25591     * @param {string} [string=''] The string to trim.
25592     * @param {string} [chars=whitespace] The characters to trim.
25593     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
25594     * @returns {string} Returns the trimmed string.
25595     * @example
25596     *
25597     * _.trimEnd('  abc  ');
25598     * // => '  abc'
25599     *
25600     * _.trimEnd('-_-abc-_-', '_-');
25601     * // => '-_-abc'
25602     */
25603    function trimEnd(string, chars, guard) {
25604      string = toString(string);
25605      if (string && (guard || chars === undefined)) {
25606        return string.slice(0, trimmedEndIndex(string) + 1);
25607      }
25608      if (!string || !(chars = baseToString(chars))) {
25609        return string;
25610      }
25611      var strSymbols = stringToArray(string),
25612          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;
25613
25614      return castSlice(strSymbols, 0, end).join('');
25615    }
25616
25617    /**
25618     * Removes leading whitespace or specified characters from `string`.
25619     *
25620     * @static
25621     * @memberOf _
25622     * @since 4.0.0
25623     * @category String
25624     * @param {string} [string=''] The string to trim.
25625     * @param {string} [chars=whitespace] The characters to trim.
25626     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
25627     * @returns {string} Returns the trimmed string.
25628     * @example
25629     *
25630     * _.trimStart('  abc  ');
25631     * // => 'abc  '
25632     *
25633     * _.trimStart('-_-abc-_-', '_-');
25634     * // => 'abc-_-'
25635     */
25636    function trimStart(string, chars, guard) {
25637      string = toString(string);
25638      if (string && (guard || chars === undefined)) {
25639        return string.replace(reTrimStart, '');
25640      }
25641      if (!string || !(chars = baseToString(chars))) {
25642        return string;
25643      }
25644      var strSymbols = stringToArray(string),
25645          start = charsStartIndex(strSymbols, stringToArray(chars));
25646
25647      return castSlice(strSymbols, start).join('');
25648    }
25649
25650    /**
25651     * Truncates `string` if it's longer than the given maximum string length.
25652     * The last characters of the truncated string are replaced with the omission
25653     * string which defaults to "...".
25654     *
25655     * @static
25656     * @memberOf _
25657     * @since 4.0.0
25658     * @category String
25659     * @param {string} [string=''] The string to truncate.
25660     * @param {Object} [options={}] The options object.
25661     * @param {number} [options.length=30] The maximum string length.
25662     * @param {string} [options.omission='...'] The string to indicate text is omitted.
25663     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.
25664     * @returns {string} Returns the truncated string.
25665     * @example
25666     *
25667     * _.truncate('hi-diddly-ho there, neighborino');
25668     * // => 'hi-diddly-ho there, neighbo...'
25669     *
25670     * _.truncate('hi-diddly-ho there, neighborino', {
25671     *   'length': 24,
25672     *   'separator': ' '
25673     * });
25674     * // => 'hi-diddly-ho there,...'
25675     *
25676     * _.truncate('hi-diddly-ho there, neighborino', {
25677     *   'length': 24,
25678     *   'separator': /,? +/
25679     * });
25680     * // => 'hi-diddly-ho there...'
25681     *
25682     * _.truncate('hi-diddly-ho there, neighborino', {
25683     *   'omission': ' [...]'
25684     * });
25685     * // => 'hi-diddly-ho there, neig [...]'
25686     */
25687    function truncate(string, options) {
25688      var length = DEFAULT_TRUNC_LENGTH,
25689          omission = DEFAULT_TRUNC_OMISSION;
25690
25691      if (isObject(options)) {
25692        var separator = 'separator' in options ? options.separator : separator;
25693        length = 'length' in options ? toInteger(options.length) : length;
25694        omission = 'omission' in options ? baseToString(options.omission) : omission;
25695      }
25696      string = toString(string);
25697
25698      var strLength = string.length;
25699      if (hasUnicode(string)) {
25700        var strSymbols = stringToArray(string);
25701        strLength = strSymbols.length;
25702      }
25703      if (length >= strLength) {
25704        return string;
25705      }
25706      var end = length - stringSize(omission);
25707      if (end < 1) {
25708        return omission;
25709      }
25710      var result = strSymbols
25711        ? castSlice(strSymbols, 0, end).join('')
25712        : string.slice(0, end);
25713
25714      if (separator === undefined) {
25715        return result + omission;
25716      }
25717      if (strSymbols) {
25718        end += (result.length - end);
25719      }
25720      if (isRegExp(separator)) {
25721        if (string.slice(end).search(separator)) {
25722          var match,
25723              substring = result;
25724
25725          if (!separator.global) {
25726            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');
25727          }
25728          separator.lastIndex = 0;
25729          while ((match = separator.exec(substring))) {
25730            var newEnd = match.index;
25731          }
25732          result = result.slice(0, newEnd === undefined ? end : newEnd);
25733        }
25734      } else if (string.indexOf(baseToString(separator), end) != end) {
25735        var index = result.lastIndexOf(separator);
25736        if (index > -1) {
25737          result = result.slice(0, index);
25738        }
25739      }
25740      return result + omission;
25741    }
25742
25743    /**
25744     * The inverse of `_.escape`; this method converts the HTML entities
25745     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to
25746     * their corresponding characters.
25747     *
25748     * **Note:** No other HTML entities are unescaped. To unescape additional
25749     * HTML entities use a third-party library like [_he_](https://mths.be/he).
25750     *
25751     * @static
25752     * @memberOf _
25753     * @since 0.6.0
25754     * @category String
25755     * @param {string} [string=''] The string to unescape.
25756     * @returns {string} Returns the unescaped string.
25757     * @example
25758     *
25759     * _.unescape('fred, barney, &amp; pebbles');
25760     * // => 'fred, barney, & pebbles'
25761     */
25762    function unescape(string) {
25763      string = toString(string);
25764      return (string && reHasEscapedHtml.test(string))
25765        ? string.replace(reEscapedHtml, unescapeHtmlChar)
25766        : string;
25767    }
25768
25769    /**
25770     * Converts `string`, as space separated words, to upper case.
25771     *
25772     * @static
25773     * @memberOf _
25774     * @since 4.0.0
25775     * @category String
25776     * @param {string} [string=''] The string to convert.
25777     * @returns {string} Returns the upper cased string.
25778     * @example
25779     *
25780     * _.upperCase('--foo-bar');
25781     * // => 'FOO BAR'
25782     *
25783     * _.upperCase('fooBar');
25784     * // => 'FOO BAR'
25785     *
25786     * _.upperCase('__foo_bar__');
25787     * // => 'FOO BAR'
25788     */
25789    var upperCase = createCompounder(function(result, word, index) {
25790      return result + (index ? ' ' : '') + word.toUpperCase();
25791    });
25792
25793    /**
25794     * Converts the first character of `string` to upper case.
25795     *
25796     * @static
25797     * @memberOf _
25798     * @since 4.0.0
25799     * @category String
25800     * @param {string} [string=''] The string to convert.
25801     * @returns {string} Returns the converted string.
25802     * @example
25803     *
25804     * _.upperFirst('fred');
25805     * // => 'Fred'
25806     *
25807     * _.upperFirst('FRED');
25808     * // => 'FRED'
25809     */
25810    var upperFirst = createCaseFirst('toUpperCase');
25811
25812    /**
25813     * Splits `string` into an array of its words.
25814     *
25815     * @static
25816     * @memberOf _
25817     * @since 3.0.0
25818     * @category String
25819     * @param {string} [string=''] The string to inspect.
25820     * @param {RegExp|string} [pattern] The pattern to match words.
25821     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
25822     * @returns {Array} Returns the words of `string`.
25823     * @example
25824     *
25825     * _.words('fred, barney, & pebbles');
25826     * // => ['fred', 'barney', 'pebbles']
25827     *
25828     * _.words('fred, barney, & pebbles', /[^, ]+/g);
25829     * // => ['fred', 'barney', '&', 'pebbles']
25830     */
25831    function words(string, pattern, guard) {
25832      string = toString(string);
25833      pattern = guard ? undefined : pattern;
25834
25835      if (pattern === undefined) {
25836        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);
25837      }
25838      return string.match(pattern) || [];
25839    }
25840
25841    /*------------------------------------------------------------------------*/
25842
25843    /**
25844     * Attempts to invoke `func`, returning either the result or the caught error
25845     * object. Any additional arguments are provided to `func` when it's invoked.
25846     *
25847     * @static
25848     * @memberOf _
25849     * @since 3.0.0
25850     * @category Util
25851     * @param {Function} func The function to attempt.
25852     * @param {...*} [args] The arguments to invoke `func` with.
25853     * @returns {*} Returns the `func` result or error object.
25854     * @example
25855     *
25856     * // Avoid throwing errors for invalid selectors.
25857     * var elements = _.attempt(function(selector) {
25858     *   return document.querySelectorAll(selector);
25859     * }, '>_>');
25860     *
25861     * if (_.isError(elements)) {
25862     *   elements = [];
25863     * }
25864     */
25865    var attempt = baseRest(function(func, args) {
25866      try {
25867        return apply(func, undefined, args);
25868      } catch (e) {
25869        return isError(e) ? e : new Error(e);
25870      }
25871    });
25872
25873    /**
25874     * Binds methods of an object to the object itself, overwriting the existing
25875     * method.
25876     *
25877     * **Note:** This method doesn't set the "length" property of bound functions.
25878     *
25879     * @static
25880     * @since 0.1.0
25881     * @memberOf _
25882     * @category Util
25883     * @param {Object} object The object to bind and assign the bound methods to.
25884     * @param {...(string|string[])} methodNames The object method names to bind.
25885     * @returns {Object} Returns `object`.
25886     * @example
25887     *
25888     * var view = {
25889     *   'label': 'docs',
25890     *   'click': function() {
25891     *     console.log('clicked ' + this.label);
25892     *   }
25893     * };
25894     *
25895     * _.bindAll(view, ['click']);
25896     * jQuery(element).on('click', view.click);
25897     * // => Logs 'clicked docs' when clicked.
25898     */
25899    var bindAll = flatRest(function(object, methodNames) {
25900      arrayEach(methodNames, function(key) {
25901        key = toKey(key);
25902        baseAssignValue(object, key, bind(object[key], object));
25903      });
25904      return object;
25905    });
25906
25907    /**
25908     * Creates a function that iterates over `pairs` and invokes the corresponding
25909     * function of the first predicate to return truthy. The predicate-function
25910     * pairs are invoked with the `this` binding and arguments of the created
25911     * function.
25912     *
25913     * @static
25914     * @memberOf _
25915     * @since 4.0.0
25916     * @category Util
25917     * @param {Array} pairs The predicate-function pairs.
25918     * @returns {Function} Returns the new composite function.
25919     * @example
25920     *
25921     * var func = _.cond([
25922     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],
25923     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],
25924     *   [_.stubTrue,                      _.constant('no match')]
25925     * ]);
25926     *
25927     * func({ 'a': 1, 'b': 2 });
25928     * // => 'matches A'
25929     *
25930     * func({ 'a': 0, 'b': 1 });
25931     * // => 'matches B'
25932     *
25933     * func({ 'a': '1', 'b': '2' });
25934     * // => 'no match'
25935     */
25936    function cond(pairs) {
25937      var length = pairs == null ? 0 : pairs.length,
25938          toIteratee = getIteratee();
25939
25940      pairs = !length ? [] : arrayMap(pairs, function(pair) {
25941        if (typeof pair[1] != 'function') {
25942          throw new TypeError(FUNC_ERROR_TEXT);
25943        }
25944        return [toIteratee(pair[0]), pair[1]];
25945      });
25946
25947      return baseRest(function(args) {
25948        var index = -1;
25949        while (++index < length) {
25950          var pair = pairs[index];
25951          if (apply(pair[0], this, args)) {
25952            return apply(pair[1], this, args);
25953          }
25954        }
25955      });
25956    }
25957
25958    /**
25959     * Creates a function that invokes the predicate properties of `source` with
25960     * the corresponding property values of a given object, returning `true` if
25961     * all predicates return truthy, else `false`.
25962     *
25963     * **Note:** The created function is equivalent to `_.conformsTo` with
25964     * `source` partially applied.
25965     *
25966     * @static
25967     * @memberOf _
25968     * @since 4.0.0
25969     * @category Util
25970     * @param {Object} source The object of property predicates to conform to.
25971     * @returns {Function} Returns the new spec function.
25972     * @example
25973     *
25974     * var objects = [
25975     *   { 'a': 2, 'b': 1 },
25976     *   { 'a': 1, 'b': 2 }
25977     * ];
25978     *
25979     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));
25980     * // => [{ 'a': 1, 'b': 2 }]
25981     */
25982    function conforms(source) {
25983      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));
25984    }
25985
25986    /**
25987     * Creates a function that returns `value`.
25988     *
25989     * @static
25990     * @memberOf _
25991     * @since 2.4.0
25992     * @category Util
25993     * @param {*} value The value to return from the new function.
25994     * @returns {Function} Returns the new constant function.
25995     * @example
25996     *
25997     * var objects = _.times(2, _.constant({ 'a': 1 }));
25998     *
25999     * console.log(objects);
26000     * // => [{ 'a': 1 }, { 'a': 1 }]
26001     *
26002     * console.log(objects[0] === objects[1]);
26003     * // => true
26004     */
26005    function constant(value) {
26006      return function() {
26007        return value;
26008      };
26009    }
26010
26011    /**
26012     * Checks `value` to determine whether a default value should be returned in
26013     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,
26014     * or `undefined`.
26015     *
26016     * @static
26017     * @memberOf _
26018     * @since 4.14.0
26019     * @category Util
26020     * @param {*} value The value to check.
26021     * @param {*} defaultValue The default value.
26022     * @returns {*} Returns the resolved value.
26023     * @example
26024     *
26025     * _.defaultTo(1, 10);
26026     * // => 1
26027     *
26028     * _.defaultTo(undefined, 10);
26029     * // => 10
26030     */
26031    function defaultTo(value, defaultValue) {
26032      return (value == null || value !== value) ? defaultValue : value;
26033    }
26034
26035    /**
26036     * Creates a function that returns the result of invoking the given functions
26037     * with the `this` binding of the created function, where each successive
26038     * invocation is supplied the return value of the previous.
26039     *
26040     * @static
26041     * @memberOf _
26042     * @since 3.0.0
26043     * @category Util
26044     * @param {...(Function|Function[])} [funcs] The functions to invoke.
26045     * @returns {Function} Returns the new composite function.
26046     * @see _.flowRight
26047     * @example
26048     *
26049     * function square(n) {
26050     *   return n * n;
26051     * }
26052     *
26053     * var addSquare = _.flow([_.add, square]);
26054     * addSquare(1, 2);
26055     * // => 9
26056     */
26057    var flow = createFlow();
26058
26059    /**
26060     * This method is like `_.flow` except that it creates a function that
26061     * invokes the given functions from right to left.
26062     *
26063     * @static
26064     * @since 3.0.0
26065     * @memberOf _
26066     * @category Util
26067     * @param {...(Function|Function[])} [funcs] The functions to invoke.
26068     * @returns {Function} Returns the new composite function.
26069     * @see _.flow
26070     * @example
26071     *
26072     * function square(n) {
26073     *   return n * n;
26074     * }
26075     *
26076     * var addSquare = _.flowRight([square, _.add]);
26077     * addSquare(1, 2);
26078     * // => 9
26079     */
26080    var flowRight = createFlow(true);
26081
26082    /**
26083     * This method returns the first argument it receives.
26084     *
26085     * @static
26086     * @since 0.1.0
26087     * @memberOf _
26088     * @category Util
26089     * @param {*} value Any value.
26090     * @returns {*} Returns `value`.
26091     * @example
26092     *
26093     * var object = { 'a': 1 };
26094     *
26095     * console.log(_.identity(object) === object);
26096     * // => true
26097     */
26098    function identity(value) {
26099      return value;
26100    }
26101
26102    /**
26103     * Creates a function that invokes `func` with the arguments of the created
26104     * function. If `func` is a property name, the created function returns the
26105     * property value for a given element. If `func` is an array or object, the
26106     * created function returns `true` for elements that contain the equivalent
26107     * source properties, otherwise it returns `false`.
26108     *
26109     * @static
26110     * @since 4.0.0
26111     * @memberOf _
26112     * @category Util
26113     * @param {*} [func=_.identity] The value to convert to a callback.
26114     * @returns {Function} Returns the callback.
26115     * @example
26116     *
26117     * var users = [
26118     *   { 'user': 'barney', 'age': 36, 'active': true },
26119     *   { 'user': 'fred',   'age': 40, 'active': false }
26120     * ];
26121     *
26122     * // The `_.matches` iteratee shorthand.
26123     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));
26124     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]
26125     *
26126     * // The `_.matchesProperty` iteratee shorthand.
26127     * _.filter(users, _.iteratee(['user', 'fred']));
26128     * // => [{ 'user': 'fred', 'age': 40 }]
26129     *
26130     * // The `_.property` iteratee shorthand.
26131     * _.map(users, _.iteratee('user'));
26132     * // => ['barney', 'fred']
26133     *
26134     * // Create custom iteratee shorthands.
26135     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {
26136     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {
26137     *     return func.test(string);
26138     *   };
26139     * });
26140     *
26141     * _.filter(['abc', 'def'], /ef/);
26142     * // => ['def']
26143     */
26144    function iteratee(func) {
26145      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));
26146    }
26147
26148    /**
26149     * Creates a function that performs a partial deep comparison between a given
26150     * object and `source`, returning `true` if the given object has equivalent
26151     * property values, else `false`.
26152     *
26153     * **Note:** The created function is equivalent to `_.isMatch` with `source`
26154     * partially applied.
26155     *
26156     * Partial comparisons will match empty array and empty object `source`
26157     * values against any array or object value, respectively. See `_.isEqual`
26158     * for a list of supported value comparisons.
26159     *
26160     * **Note:** Multiple values can be checked by combining several matchers
26161     * using `_.overSome`
26162     *
26163     * @static
26164     * @memberOf _
26165     * @since 3.0.0
26166     * @category Util
26167     * @param {Object} source The object of property values to match.
26168     * @returns {Function} Returns the new spec function.
26169     * @example
26170     *
26171     * var objects = [
26172     *   { 'a': 1, 'b': 2, 'c': 3 },
26173     *   { 'a': 4, 'b': 5, 'c': 6 }
26174     * ];
26175     *
26176     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));
26177     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]
26178     *
26179     * // Checking for several possible values
26180     * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));
26181     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]
26182     */
26183    function matches(source) {
26184      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));
26185    }
26186
26187    /**
26188     * Creates a function that performs a partial deep comparison between the
26189     * value at `path` of a given object to `srcValue`, returning `true` if the
26190     * object value is equivalent, else `false`.
26191     *
26192     * **Note:** Partial comparisons will match empty array and empty object
26193     * `srcValue` values against any array or object value, respectively. See
26194     * `_.isEqual` for a list of supported value comparisons.
26195     *
26196     * **Note:** Multiple values can be checked by combining several matchers
26197     * using `_.overSome`
26198     *
26199     * @static
26200     * @memberOf _
26201     * @since 3.2.0
26202     * @category Util
26203     * @param {Array|string} path The path of the property to get.
26204     * @param {*} srcValue The value to match.
26205     * @returns {Function} Returns the new spec function.
26206     * @example
26207     *
26208     * var objects = [
26209     *   { 'a': 1, 'b': 2, 'c': 3 },
26210     *   { 'a': 4, 'b': 5, 'c': 6 }
26211     * ];
26212     *
26213     * _.find(objects, _.matchesProperty('a', 4));
26214     * // => { 'a': 4, 'b': 5, 'c': 6 }
26215     *
26216     * // Checking for several possible values
26217     * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));
26218     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]
26219     */
26220    function matchesProperty(path, srcValue) {
26221      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));
26222    }
26223
26224    /**
26225     * Creates a function that invokes the method at `path` of a given object.
26226     * Any additional arguments are provided to the invoked method.
26227     *
26228     * @static
26229     * @memberOf _
26230     * @since 3.7.0
26231     * @category Util
26232     * @param {Array|string} path The path of the method to invoke.
26233     * @param {...*} [args] The arguments to invoke the method with.
26234     * @returns {Function} Returns the new invoker function.
26235     * @example
26236     *
26237     * var objects = [
26238     *   { 'a': { 'b': _.constant(2) } },
26239     *   { 'a': { 'b': _.constant(1) } }
26240     * ];
26241     *
26242     * _.map(objects, _.method('a.b'));
26243     * // => [2, 1]
26244     *
26245     * _.map(objects, _.method(['a', 'b']));
26246     * // => [2, 1]
26247     */
26248    var method = baseRest(function(path, args) {
26249      return function(object) {
26250        return baseInvoke(object, path, args);
26251      };
26252    });
26253
26254    /**
26255     * The opposite of `_.method`; this method creates a function that invokes
26256     * the method at a given path of `object`. Any additional arguments are
26257     * provided to the invoked method.
26258     *
26259     * @static
26260     * @memberOf _
26261     * @since 3.7.0
26262     * @category Util
26263     * @param {Object} object The object to query.
26264     * @param {...*} [args] The arguments to invoke the method with.
26265     * @returns {Function} Returns the new invoker function.
26266     * @example
26267     *
26268     * var array = _.times(3, _.constant),
26269     *     object = { 'a': array, 'b': array, 'c': array };
26270     *
26271     * _.map(['a[2]', 'c[0]'], _.methodOf(object));
26272     * // => [2, 0]
26273     *
26274     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));
26275     * // => [2, 0]
26276     */
26277    var methodOf = baseRest(function(object, args) {
26278      return function(path) {
26279        return baseInvoke(object, path, args);
26280      };
26281    });
26282
26283    /**
26284     * Adds all own enumerable string keyed function properties of a source
26285     * object to the destination object. If `object` is a function, then methods
26286     * are added to its prototype as well.
26287     *
26288     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to
26289     * avoid conflicts caused by modifying the original.
26290     *
26291     * @static
26292     * @since 0.1.0
26293     * @memberOf _
26294     * @category Util
26295     * @param {Function|Object} [object=lodash] The destination object.
26296     * @param {Object} source The object of functions to add.
26297     * @param {Object} [options={}] The options object.
26298     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.
26299     * @returns {Function|Object} Returns `object`.
26300     * @example
26301     *
26302     * function vowels(string) {
26303     *   return _.filter(string, function(v) {
26304     *     return /[aeiou]/i.test(v);
26305     *   });
26306     * }
26307     *
26308     * _.mixin({ 'vowels': vowels });
26309     * _.vowels('fred');
26310     * // => ['e']
26311     *
26312     * _('fred').vowels().value();
26313     * // => ['e']
26314     *
26315     * _.mixin({ 'vowels': vowels }, { 'chain': false });
26316     * _('fred').vowels();
26317     * // => ['e']
26318     */
26319    function mixin(object, source, options) {
26320      var props = keys(source),
26321          methodNames = baseFunctions(source, props);
26322
26323      if (options == null &&
26324          !(isObject(source) && (methodNames.length || !props.length))) {
26325        options = source;
26326        source = object;
26327        object = this;
26328        methodNames = baseFunctions(source, keys(source));
26329      }
26330      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,
26331          isFunc = isFunction(object);
26332
26333      arrayEach(methodNames, function(methodName) {
26334        var func = source[methodName];
26335        object[methodName] = func;
26336        if (isFunc) {
26337          object.prototype[methodName] = function() {
26338            var chainAll = this.__chain__;
26339            if (chain || chainAll) {
26340              var result = object(this.__wrapped__),
26341                  actions = result.__actions__ = copyArray(this.__actions__);
26342
26343              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });
26344              result.__chain__ = chainAll;
26345              return result;
26346            }
26347            return func.apply(object, arrayPush([this.value()], arguments));
26348          };
26349        }
26350      });
26351
26352      return object;
26353    }
26354
26355    /**
26356     * Reverts the `_` variable to its previous value and returns a reference to
26357     * the `lodash` function.
26358     *
26359     * @static
26360     * @since 0.1.0
26361     * @memberOf _
26362     * @category Util
26363     * @returns {Function} Returns the `lodash` function.
26364     * @example
26365     *
26366     * var lodash = _.noConflict();
26367     */
26368    function noConflict() {
26369      if (root._ === this) {
26370        root._ = oldDash;
26371      }
26372      return this;
26373    }
26374
26375    /**
26376     * This method returns `undefined`.
26377     *
26378     * @static
26379     * @memberOf _
26380     * @since 2.3.0
26381     * @category Util
26382     * @example
26383     *
26384     * _.times(2, _.noop);
26385     * // => [undefined, undefined]
26386     */
26387    function noop() {
26388      // No operation performed.
26389    }
26390
26391    /**
26392     * Creates a function that gets the argument at index `n`. If `n` is negative,
26393     * the nth argument from the end is returned.
26394     *
26395     * @static
26396     * @memberOf _
26397     * @since 4.0.0
26398     * @category Util
26399     * @param {number} [n=0] The index of the argument to return.
26400     * @returns {Function} Returns the new pass-thru function.
26401     * @example
26402     *
26403     * var func = _.nthArg(1);
26404     * func('a', 'b', 'c', 'd');
26405     * // => 'b'
26406     *
26407     * var func = _.nthArg(-2);
26408     * func('a', 'b', 'c', 'd');
26409     * // => 'c'
26410     */
26411    function nthArg(n) {
26412      n = toInteger(n);
26413      return baseRest(function(args) {
26414        return baseNth(args, n);
26415      });
26416    }
26417
26418    /**
26419     * Creates a function that invokes `iteratees` with the arguments it receives
26420     * and returns their results.
26421     *
26422     * @static
26423     * @memberOf _
26424     * @since 4.0.0
26425     * @category Util
26426     * @param {...(Function|Function[])} [iteratees=[_.identity]]
26427     *  The iteratees to invoke.
26428     * @returns {Function} Returns the new function.
26429     * @example
26430     *
26431     * var func = _.over([Math.max, Math.min]);
26432     *
26433     * func(1, 2, 3, 4);
26434     * // => [4, 1]
26435     */
26436    var over = createOver(arrayMap);
26437
26438    /**
26439     * Creates a function that checks if **all** of the `predicates` return
26440     * truthy when invoked with the arguments it receives.
26441     *
26442     * Following shorthands are possible for providing predicates.
26443     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.
26444     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.
26445     *
26446     * @static
26447     * @memberOf _
26448     * @since 4.0.0
26449     * @category Util
26450     * @param {...(Function|Function[])} [predicates=[_.identity]]
26451     *  The predicates to check.
26452     * @returns {Function} Returns the new function.
26453     * @example
26454     *
26455     * var func = _.overEvery([Boolean, isFinite]);
26456     *
26457     * func('1');
26458     * // => true
26459     *
26460     * func(null);
26461     * // => false
26462     *
26463     * func(NaN);
26464     * // => false
26465     */
26466    var overEvery = createOver(arrayEvery);
26467
26468    /**
26469     * Creates a function that checks if **any** of the `predicates` return
26470     * truthy when invoked with the arguments it receives.
26471     *
26472     * Following shorthands are possible for providing predicates.
26473     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.
26474     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.
26475     *
26476     * @static
26477     * @memberOf _
26478     * @since 4.0.0
26479     * @category Util
26480     * @param {...(Function|Function[])} [predicates=[_.identity]]
26481     *  The predicates to check.
26482     * @returns {Function} Returns the new function.
26483     * @example
26484     *
26485     * var func = _.overSome([Boolean, isFinite]);
26486     *
26487     * func('1');
26488     * // => true
26489     *
26490     * func(null);
26491     * // => true
26492     *
26493     * func(NaN);
26494     * // => false
26495     *
26496     * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])
26497     * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])
26498     */
26499    var overSome = createOver(arraySome);
26500
26501    /**
26502     * Creates a function that returns the value at `path` of a given object.
26503     *
26504     * @static
26505     * @memberOf _
26506     * @since 2.4.0
26507     * @category Util
26508     * @param {Array|string} path The path of the property to get.
26509     * @returns {Function} Returns the new accessor function.
26510     * @example
26511     *
26512     * var objects = [
26513     *   { 'a': { 'b': 2 } },
26514     *   { 'a': { 'b': 1 } }
26515     * ];
26516     *
26517     * _.map(objects, _.property('a.b'));
26518     * // => [2, 1]
26519     *
26520     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
26521     * // => [1, 2]
26522     */
26523    function property(path) {
26524      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
26525    }
26526
26527    /**
26528     * The opposite of `_.property`; this method creates a function that returns
26529     * the value at a given path of `object`.
26530     *
26531     * @static
26532     * @memberOf _
26533     * @since 3.0.0
26534     * @category Util
26535     * @param {Object} object The object to query.
26536     * @returns {Function} Returns the new accessor function.
26537     * @example
26538     *
26539     * var array = [0, 1, 2],
26540     *     object = { 'a': array, 'b': array, 'c': array };
26541     *
26542     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));
26543     * // => [2, 0]
26544     *
26545     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));
26546     * // => [2, 0]
26547     */
26548    function propertyOf(object) {
26549      return function(path) {
26550        return object == null ? undefined : baseGet(object, path);
26551      };
26552    }
26553
26554    /**
26555     * Creates an array of numbers (positive and/or negative) progressing from
26556     * `start` up to, but not including, `end`. A step of `-1` is used if a negative
26557     * `start` is specified without an `end` or `step`. If `end` is not specified,
26558     * it's set to `start` with `start` then set to `0`.
26559     *
26560     * **Note:** JavaScript follows the IEEE-754 standard for resolving
26561     * floating-point values which can produce unexpected results.
26562     *
26563     * @static
26564     * @since 0.1.0
26565     * @memberOf _
26566     * @category Util
26567     * @param {number} [start=0] The start of the range.
26568     * @param {number} end The end of the range.
26569     * @param {number} [step=1] The value to increment or decrement by.
26570     * @returns {Array} Returns the range of numbers.
26571     * @see _.inRange, _.rangeRight
26572     * @example
26573     *
26574     * _.range(4);
26575     * // => [0, 1, 2, 3]
26576     *
26577     * _.range(-4);
26578     * // => [0, -1, -2, -3]
26579     *
26580     * _.range(1, 5);
26581     * // => [1, 2, 3, 4]
26582     *
26583     * _.range(0, 20, 5);
26584     * // => [0, 5, 10, 15]
26585     *
26586     * _.range(0, -4, -1);
26587     * // => [0, -1, -2, -3]
26588     *
26589     * _.range(1, 4, 0);
26590     * // => [1, 1, 1]
26591     *
26592     * _.range(0);
26593     * // => []
26594     */
26595    var range = createRange();
26596
26597    /**
26598     * This method is like `_.range` except that it populates values in
26599     * descending order.
26600     *
26601     * @static
26602     * @memberOf _
26603     * @since 4.0.0
26604     * @category Util
26605     * @param {number} [start=0] The start of the range.
26606     * @param {number} end The end of the range.
26607     * @param {number} [step=1] The value to increment or decrement by.
26608     * @returns {Array} Returns the range of numbers.
26609     * @see _.inRange, _.range
26610     * @example
26611     *
26612     * _.rangeRight(4);
26613     * // => [3, 2, 1, 0]
26614     *
26615     * _.rangeRight(-4);
26616     * // => [-3, -2, -1, 0]
26617     *
26618     * _.rangeRight(1, 5);
26619     * // => [4, 3, 2, 1]
26620     *
26621     * _.rangeRight(0, 20, 5);
26622     * // => [15, 10, 5, 0]
26623     *
26624     * _.rangeRight(0, -4, -1);
26625     * // => [-3, -2, -1, 0]
26626     *
26627     * _.rangeRight(1, 4, 0);
26628     * // => [1, 1, 1]
26629     *
26630     * _.rangeRight(0);
26631     * // => []
26632     */
26633    var rangeRight = createRange(true);
26634
26635    /**
26636     * This method returns a new empty array.
26637     *
26638     * @static
26639     * @memberOf _
26640     * @since 4.13.0
26641     * @category Util
26642     * @returns {Array} Returns the new empty array.
26643     * @example
26644     *
26645     * var arrays = _.times(2, _.stubArray);
26646     *
26647     * console.log(arrays);
26648     * // => [[], []]
26649     *
26650     * console.log(arrays[0] === arrays[1]);
26651     * // => false
26652     */
26653    function stubArray() {
26654      return [];
26655    }
26656
26657    /**
26658     * This method returns `false`.
26659     *
26660     * @static
26661     * @memberOf _
26662     * @since 4.13.0
26663     * @category Util
26664     * @returns {boolean} Returns `false`.
26665     * @example
26666     *
26667     * _.times(2, _.stubFalse);
26668     * // => [false, false]
26669     */
26670    function stubFalse() {
26671      return false;
26672    }
26673
26674    /**
26675     * This method returns a new empty object.
26676     *
26677     * @static
26678     * @memberOf _
26679     * @since 4.13.0
26680     * @category Util
26681     * @returns {Object} Returns the new empty object.
26682     * @example
26683     *
26684     * var objects = _.times(2, _.stubObject);
26685     *
26686     * console.log(objects);
26687     * // => [{}, {}]
26688     *
26689     * console.log(objects[0] === objects[1]);
26690     * // => false
26691     */
26692    function stubObject() {
26693      return {};
26694    }
26695
26696    /**
26697     * This method returns an empty string.
26698     *
26699     * @static
26700     * @memberOf _
26701     * @since 4.13.0
26702     * @category Util
26703     * @returns {string} Returns the empty string.
26704     * @example
26705     *
26706     * _.times(2, _.stubString);
26707     * // => ['', '']
26708     */
26709    function stubString() {
26710      return '';
26711    }
26712
26713    /**
26714     * This method returns `true`.
26715     *
26716     * @static
26717     * @memberOf _
26718     * @since 4.13.0
26719     * @category Util
26720     * @returns {boolean} Returns `true`.
26721     * @example
26722     *
26723     * _.times(2, _.stubTrue);
26724     * // => [true, true]
26725     */
26726    function stubTrue() {
26727      return true;
26728    }
26729
26730    /**
26731     * Invokes the iteratee `n` times, returning an array of the results of
26732     * each invocation. The iteratee is invoked with one argument; (index).
26733     *
26734     * @static
26735     * @since 0.1.0
26736     * @memberOf _
26737     * @category Util
26738     * @param {number} n The number of times to invoke `iteratee`.
26739     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
26740     * @returns {Array} Returns the array of results.
26741     * @example
26742     *
26743     * _.times(3, String);
26744     * // => ['0', '1', '2']
26745     *
26746     *  _.times(4, _.constant(0));
26747     * // => [0, 0, 0, 0]
26748     */
26749    function times(n, iteratee) {
26750      n = toInteger(n);
26751      if (n < 1 || n > MAX_SAFE_INTEGER) {
26752        return [];
26753      }
26754      var index = MAX_ARRAY_LENGTH,
26755          length = nativeMin(n, MAX_ARRAY_LENGTH);
26756
26757      iteratee = getIteratee(iteratee);
26758      n -= MAX_ARRAY_LENGTH;
26759
26760      var result = baseTimes(length, iteratee);
26761      while (++index < n) {
26762        iteratee(index);
26763      }
26764      return result;
26765    }
26766
26767    /**
26768     * Converts `value` to a property path array.
26769     *
26770     * @static
26771     * @memberOf _
26772     * @since 4.0.0
26773     * @category Util
26774     * @param {*} value The value to convert.
26775     * @returns {Array} Returns the new property path array.
26776     * @example
26777     *
26778     * _.toPath('a.b.c');
26779     * // => ['a', 'b', 'c']
26780     *
26781     * _.toPath('a[0].b.c');
26782     * // => ['a', '0', 'b', 'c']
26783     */
26784    function toPath(value) {
26785      if (isArray(value)) {
26786        return arrayMap(value, toKey);
26787      }
26788      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));
26789    }
26790
26791    /**
26792     * Generates a unique ID. If `prefix` is given, the ID is appended to it.
26793     *
26794     * @static
26795     * @since 0.1.0
26796     * @memberOf _
26797     * @category Util
26798     * @param {string} [prefix=''] The value to prefix the ID with.
26799     * @returns {string} Returns the unique ID.
26800     * @example
26801     *
26802     * _.uniqueId('contact_');
26803     * // => 'contact_104'
26804     *
26805     * _.uniqueId();
26806     * // => '105'
26807     */
26808    function uniqueId(prefix) {
26809      var id = ++idCounter;
26810      return toString(prefix) + id;
26811    }
26812
26813    /*------------------------------------------------------------------------*/
26814
26815    /**
26816     * Adds two numbers.
26817     *
26818     * @static
26819     * @memberOf _
26820     * @since 3.4.0
26821     * @category Math
26822     * @param {number} augend The first number in an addition.
26823     * @param {number} addend The second number in an addition.
26824     * @returns {number} Returns the total.
26825     * @example
26826     *
26827     * _.add(6, 4);
26828     * // => 10
26829     */
26830    var add = createMathOperation(function(augend, addend) {
26831      return augend + addend;
26832    }, 0);
26833
26834    /**
26835     * Computes `number` rounded up to `precision`.
26836     *
26837     * @static
26838     * @memberOf _
26839     * @since 3.10.0
26840     * @category Math
26841     * @param {number} number The number to round up.
26842     * @param {number} [precision=0] The precision to round up to.
26843     * @returns {number} Returns the rounded up number.
26844     * @example
26845     *
26846     * _.ceil(4.006);
26847     * // => 5
26848     *
26849     * _.ceil(6.004, 2);
26850     * // => 6.01
26851     *
26852     * _.ceil(6040, -2);
26853     * // => 6100
26854     */
26855    var ceil = createRound('ceil');
26856
26857    /**
26858     * Divide two numbers.
26859     *
26860     * @static
26861     * @memberOf _
26862     * @since 4.7.0
26863     * @category Math
26864     * @param {number} dividend The first number in a division.
26865     * @param {number} divisor The second number in a division.
26866     * @returns {number} Returns the quotient.
26867     * @example
26868     *
26869     * _.divide(6, 4);
26870     * // => 1.5
26871     */
26872    var divide = createMathOperation(function(dividend, divisor) {
26873      return dividend / divisor;
26874    }, 1);
26875
26876    /**
26877     * Computes `number` rounded down to `precision`.
26878     *
26879     * @static
26880     * @memberOf _
26881     * @since 3.10.0
26882     * @category Math
26883     * @param {number} number The number to round down.
26884     * @param {number} [precision=0] The precision to round down to.
26885     * @returns {number} Returns the rounded down number.
26886     * @example
26887     *
26888     * _.floor(4.006);
26889     * // => 4
26890     *
26891     * _.floor(0.046, 2);
26892     * // => 0.04
26893     *
26894     * _.floor(4060, -2);
26895     * // => 4000
26896     */
26897    var floor = createRound('floor');
26898
26899    /**
26900     * Computes the maximum value of `array`. If `array` is empty or falsey,
26901     * `undefined` is returned.
26902     *
26903     * @static
26904     * @since 0.1.0
26905     * @memberOf _
26906     * @category Math
26907     * @param {Array} array The array to iterate over.
26908     * @returns {*} Returns the maximum value.
26909     * @example
26910     *
26911     * _.max([4, 2, 8, 6]);
26912     * // => 8
26913     *
26914     * _.max([]);
26915     * // => undefined
26916     */
26917    function max(array) {
26918      return (array && array.length)
26919        ? baseExtremum(array, identity, baseGt)
26920        : undefined;
26921    }
26922
26923    /**
26924     * This method is like `_.max` except that it accepts `iteratee` which is
26925     * invoked for each element in `array` to generate the criterion by which
26926     * the value is ranked. The iteratee is invoked with one argument: (value).
26927     *
26928     * @static
26929     * @memberOf _
26930     * @since 4.0.0
26931     * @category Math
26932     * @param {Array} array The array to iterate over.
26933     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
26934     * @returns {*} Returns the maximum value.
26935     * @example
26936     *
26937     * var objects = [{ 'n': 1 }, { 'n': 2 }];
26938     *
26939     * _.maxBy(objects, function(o) { return o.n; });
26940     * // => { 'n': 2 }
26941     *
26942     * // The `_.property` iteratee shorthand.
26943     * _.maxBy(objects, 'n');
26944     * // => { 'n': 2 }
26945     */
26946    function maxBy(array, iteratee) {
26947      return (array && array.length)
26948        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)
26949        : undefined;
26950    }
26951
26952    /**
26953     * Computes the mean of the values in `array`.
26954     *
26955     * @static
26956     * @memberOf _
26957     * @since 4.0.0
26958     * @category Math
26959     * @param {Array} array The array to iterate over.
26960     * @returns {number} Returns the mean.
26961     * @example
26962     *
26963     * _.mean([4, 2, 8, 6]);
26964     * // => 5
26965     */
26966    function mean(array) {
26967      return baseMean(array, identity);
26968    }
26969
26970    /**
26971     * This method is like `_.mean` except that it accepts `iteratee` which is
26972     * invoked for each element in `array` to generate the value to be averaged.
26973     * The iteratee is invoked with one argument: (value).
26974     *
26975     * @static
26976     * @memberOf _
26977     * @since 4.7.0
26978     * @category Math
26979     * @param {Array} array The array to iterate over.
26980     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
26981     * @returns {number} Returns the mean.
26982     * @example
26983     *
26984     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
26985     *
26986     * _.meanBy(objects, function(o) { return o.n; });
26987     * // => 5
26988     *
26989     * // The `_.property` iteratee shorthand.
26990     * _.meanBy(objects, 'n');
26991     * // => 5
26992     */
26993    function meanBy(array, iteratee) {
26994      return baseMean(array, getIteratee(iteratee, 2));
26995    }
26996
26997    /**
26998     * Computes the minimum value of `array`. If `array` is empty or falsey,
26999     * `undefined` is returned.
27000     *
27001     * @static
27002     * @since 0.1.0
27003     * @memberOf _
27004     * @category Math
27005     * @param {Array} array The array to iterate over.
27006     * @returns {*} Returns the minimum value.
27007     * @example
27008     *
27009     * _.min([4, 2, 8, 6]);
27010     * // => 2
27011     *
27012     * _.min([]);
27013     * // => undefined
27014     */
27015    function min(array) {
27016      return (array && array.length)
27017        ? baseExtremum(array, identity, baseLt)
27018        : undefined;
27019    }
27020
27021    /**
27022     * This method is like `_.min` except that it accepts `iteratee` which is
27023     * invoked for each element in `array` to generate the criterion by which
27024     * the value is ranked. The iteratee is invoked with one argument: (value).
27025     *
27026     * @static
27027     * @memberOf _
27028     * @since 4.0.0
27029     * @category Math
27030     * @param {Array} array The array to iterate over.
27031     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
27032     * @returns {*} Returns the minimum value.
27033     * @example
27034     *
27035     * var objects = [{ 'n': 1 }, { 'n': 2 }];
27036     *
27037     * _.minBy(objects, function(o) { return o.n; });
27038     * // => { 'n': 1 }
27039     *
27040     * // The `_.property` iteratee shorthand.
27041     * _.minBy(objects, 'n');
27042     * // => { 'n': 1 }
27043     */
27044    function minBy(array, iteratee) {
27045      return (array && array.length)
27046        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)
27047        : undefined;
27048    }
27049
27050    /**
27051     * Multiply two numbers.
27052     *
27053     * @static
27054     * @memberOf _
27055     * @since 4.7.0
27056     * @category Math
27057     * @param {number} multiplier The first number in a multiplication.
27058     * @param {number} multiplicand The second number in a multiplication.
27059     * @returns {number} Returns the product.
27060     * @example
27061     *
27062     * _.multiply(6, 4);
27063     * // => 24
27064     */
27065    var multiply = createMathOperation(function(multiplier, multiplicand) {
27066      return multiplier * multiplicand;
27067    }, 1);
27068
27069    /**
27070     * Computes `number` rounded to `precision`.
27071     *
27072     * @static
27073     * @memberOf _
27074     * @since 3.10.0
27075     * @category Math
27076     * @param {number} number The number to round.
27077     * @param {number} [precision=0] The precision to round to.
27078     * @returns {number} Returns the rounded number.
27079     * @example
27080     *
27081     * _.round(4.006);
27082     * // => 4
27083     *
27084     * _.round(4.006, 2);
27085     * // => 4.01
27086     *
27087     * _.round(4060, -2);
27088     * // => 4100
27089     */
27090    var round = createRound('round');
27091
27092    /**
27093     * Subtract two numbers.
27094     *
27095     * @static
27096     * @memberOf _
27097     * @since 4.0.0
27098     * @category Math
27099     * @param {number} minuend The first number in a subtraction.
27100     * @param {number} subtrahend The second number in a subtraction.
27101     * @returns {number} Returns the difference.
27102     * @example
27103     *
27104     * _.subtract(6, 4);
27105     * // => 2
27106     */
27107    var subtract = createMathOperation(function(minuend, subtrahend) {
27108      return minuend - subtrahend;
27109    }, 0);
27110
27111    /**
27112     * Computes the sum of the values in `array`.
27113     *
27114     * @static
27115     * @memberOf _
27116     * @since 3.4.0
27117     * @category Math
27118     * @param {Array} array The array to iterate over.
27119     * @returns {number} Returns the sum.
27120     * @example
27121     *
27122     * _.sum([4, 2, 8, 6]);
27123     * // => 20
27124     */
27125    function sum(array) {
27126      return (array && array.length)
27127        ? baseSum(array, identity)
27128        : 0;
27129    }
27130
27131    /**
27132     * This method is like `_.sum` except that it accepts `iteratee` which is
27133     * invoked for each element in `array` to generate the value to be summed.
27134     * The iteratee is invoked with one argument: (value).
27135     *
27136     * @static
27137     * @memberOf _
27138     * @since 4.0.0
27139     * @category Math
27140     * @param {Array} array The array to iterate over.
27141     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
27142     * @returns {number} Returns the sum.
27143     * @example
27144     *
27145     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
27146     *
27147     * _.sumBy(objects, function(o) { return o.n; });
27148     * // => 20
27149     *
27150     * // The `_.property` iteratee shorthand.
27151     * _.sumBy(objects, 'n');
27152     * // => 20
27153     */
27154    function sumBy(array, iteratee) {
27155      return (array && array.length)
27156        ? baseSum(array, getIteratee(iteratee, 2))
27157        : 0;
27158    }
27159
27160    /*------------------------------------------------------------------------*/
27161
27162    // Add methods that return wrapped values in chain sequences.
27163    lodash.after = after;
27164    lodash.ary = ary;
27165    lodash.assign = assign;
27166    lodash.assignIn = assignIn;
27167    lodash.assignInWith = assignInWith;
27168    lodash.assignWith = assignWith;
27169    lodash.at = at;
27170    lodash.before = before;
27171    lodash.bind = bind;
27172    lodash.bindAll = bindAll;
27173    lodash.bindKey = bindKey;
27174    lodash.castArray = castArray;
27175    lodash.chain = chain;
27176    lodash.chunk = chunk;
27177    lodash.compact = compact;
27178    lodash.concat = concat;
27179    lodash.cond = cond;
27180    lodash.conforms = conforms;
27181    lodash.constant = constant;
27182    lodash.countBy = countBy;
27183    lodash.create = create;
27184    lodash.curry = curry;
27185    lodash.curryRight = curryRight;
27186    lodash.debounce = debounce;
27187    lodash.defaults = defaults;
27188    lodash.defaultsDeep = defaultsDeep;
27189    lodash.defer = defer;
27190    lodash.delay = delay;
27191    lodash.difference = difference;
27192    lodash.differenceBy = differenceBy;
27193    lodash.differenceWith = differenceWith;
27194    lodash.drop = drop;
27195    lodash.dropRight = dropRight;
27196    lodash.dropRightWhile = dropRightWhile;
27197    lodash.dropWhile = dropWhile;
27198    lodash.fill = fill;
27199    lodash.filter = filter;
27200    lodash.flatMap = flatMap;
27201    lodash.flatMapDeep = flatMapDeep;
27202    lodash.flatMapDepth = flatMapDepth;
27203    lodash.flatten = flatten;
27204    lodash.flattenDeep = flattenDeep;
27205    lodash.flattenDepth = flattenDepth;
27206    lodash.flip = flip;
27207    lodash.flow = flow;
27208    lodash.flowRight = flowRight;
27209    lodash.fromPairs = fromPairs;
27210    lodash.functions = functions;
27211    lodash.functionsIn = functionsIn;
27212    lodash.groupBy = groupBy;
27213    lodash.initial = initial;
27214    lodash.intersection = intersection;
27215    lodash.intersectionBy = intersectionBy;
27216    lodash.intersectionWith = intersectionWith;
27217    lodash.invert = invert;
27218    lodash.invertBy = invertBy;
27219    lodash.invokeMap = invokeMap;
27220    lodash.iteratee = iteratee;
27221    lodash.keyBy = keyBy;
27222    lodash.keys = keys;
27223    lodash.keysIn = keysIn;
27224    lodash.map = map;
27225    lodash.mapKeys = mapKeys;
27226    lodash.mapValues = mapValues;
27227    lodash.matches = matches;
27228    lodash.matchesProperty = matchesProperty;
27229    lodash.memoize = memoize;
27230    lodash.merge = merge;
27231    lodash.mergeWith = mergeWith;
27232    lodash.method = method;
27233    lodash.methodOf = methodOf;
27234    lodash.mixin = mixin;
27235    lodash.negate = negate;
27236    lodash.nthArg = nthArg;
27237    lodash.omit = omit;
27238    lodash.omitBy = omitBy;
27239    lodash.once = once;
27240    lodash.orderBy = orderBy;
27241    lodash.over = over;
27242    lodash.overArgs = overArgs;
27243    lodash.overEvery = overEvery;
27244    lodash.overSome = overSome;
27245    lodash.partial = partial;
27246    lodash.partialRight = partialRight;
27247    lodash.partition = partition;
27248    lodash.pick = pick;
27249    lodash.pickBy = pickBy;
27250    lodash.property = property;
27251    lodash.propertyOf = propertyOf;
27252    lodash.pull = pull;
27253    lodash.pullAll = pullAll;
27254    lodash.pullAllBy = pullAllBy;
27255    lodash.pullAllWith = pullAllWith;
27256    lodash.pullAt = pullAt;
27257    lodash.range = range;
27258    lodash.rangeRight = rangeRight;
27259    lodash.rearg = rearg;
27260    lodash.reject = reject;
27261    lodash.remove = remove;
27262    lodash.rest = rest;
27263    lodash.reverse = reverse;
27264    lodash.sampleSize = sampleSize;
27265    lodash.set = set;
27266    lodash.setWith = setWith;
27267    lodash.shuffle = shuffle;
27268    lodash.slice = slice;
27269    lodash.sortBy = sortBy;
27270    lodash.sortedUniq = sortedUniq;
27271    lodash.sortedUniqBy = sortedUniqBy;
27272    lodash.split = split;
27273    lodash.spread = spread;
27274    lodash.tail = tail;
27275    lodash.take = take;
27276    lodash.takeRight = takeRight;
27277    lodash.takeRightWhile = takeRightWhile;
27278    lodash.takeWhile = takeWhile;
27279    lodash.tap = tap;
27280    lodash.throttle = throttle;
27281    lodash.thru = thru;
27282    lodash.toArray = toArray;
27283    lodash.toPairs = toPairs;
27284    lodash.toPairsIn = toPairsIn;
27285    lodash.toPath = toPath;
27286    lodash.toPlainObject = toPlainObject;
27287    lodash.transform = transform;
27288    lodash.unary = unary;
27289    lodash.union = union;
27290    lodash.unionBy = unionBy;
27291    lodash.unionWith = unionWith;
27292    lodash.uniq = uniq;
27293    lodash.uniqBy = uniqBy;
27294    lodash.uniqWith = uniqWith;
27295    lodash.unset = unset;
27296    lodash.unzip = unzip;
27297    lodash.unzipWith = unzipWith;
27298    lodash.update = update;
27299    lodash.updateWith = updateWith;
27300    lodash.values = values;
27301    lodash.valuesIn = valuesIn;
27302    lodash.without = without;
27303    lodash.words = words;
27304    lodash.wrap = wrap;
27305    lodash.xor = xor;
27306    lodash.xorBy = xorBy;
27307    lodash.xorWith = xorWith;
27308    lodash.zip = zip;
27309    lodash.zipObject = zipObject;
27310    lodash.zipObjectDeep = zipObjectDeep;
27311    lodash.zipWith = zipWith;
27312
27313    // Add aliases.
27314    lodash.entries = toPairs;
27315    lodash.entriesIn = toPairsIn;
27316    lodash.extend = assignIn;
27317    lodash.extendWith = assignInWith;
27318
27319    // Add methods to `lodash.prototype`.
27320    mixin(lodash, lodash);
27321
27322    /*------------------------------------------------------------------------*/
27323
27324    // Add methods that return unwrapped values in chain sequences.
27325    lodash.add = add;
27326    lodash.attempt = attempt;
27327    lodash.camelCase = camelCase;
27328    lodash.capitalize = capitalize;
27329    lodash.ceil = ceil;
27330    lodash.clamp = clamp;
27331    lodash.clone = clone;
27332    lodash.cloneDeep = cloneDeep;
27333    lodash.cloneDeepWith = cloneDeepWith;
27334    lodash.cloneWith = cloneWith;
27335    lodash.conformsTo = conformsTo;
27336    lodash.deburr = deburr;
27337    lodash.defaultTo = defaultTo;
27338    lodash.divide = divide;
27339    lodash.endsWith = endsWith;
27340    lodash.eq = eq;
27341    lodash.escape = escape;
27342    lodash.escapeRegExp = escapeRegExp;
27343    lodash.every = every;
27344    lodash.find = find;
27345    lodash.findIndex = findIndex;
27346    lodash.findKey = findKey;
27347    lodash.findLast = findLast;
27348    lodash.findLastIndex = findLastIndex;
27349    lodash.findLastKey = findLastKey;
27350    lodash.floor = floor;
27351    lodash.forEach = forEach;
27352    lodash.forEachRight = forEachRight;
27353    lodash.forIn = forIn;
27354    lodash.forInRight = forInRight;
27355    lodash.forOwn = forOwn;
27356    lodash.forOwnRight = forOwnRight;
27357    lodash.get = get;
27358    lodash.gt = gt;
27359    lodash.gte = gte;
27360    lodash.has = has;
27361    lodash.hasIn = hasIn;
27362    lodash.head = head;
27363    lodash.identity = identity;
27364    lodash.includes = includes;
27365    lodash.indexOf = indexOf;
27366    lodash.inRange = inRange;
27367    lodash.invoke = invoke;
27368    lodash.isArguments = isArguments;
27369    lodash.isArray = isArray;
27370    lodash.isArrayBuffer = isArrayBuffer;
27371    lodash.isArrayLike = isArrayLike;
27372    lodash.isArrayLikeObject = isArrayLikeObject;
27373    lodash.isBoolean = isBoolean;
27374    lodash.isBuffer = isBuffer;
27375    lodash.isDate = isDate;
27376    lodash.isElement = isElement;
27377    lodash.isEmpty = isEmpty;
27378    lodash.isEqual = isEqual;
27379    lodash.isEqualWith = isEqualWith;
27380    lodash.isError = isError;
27381    lodash.isFinite = isFinite;
27382    lodash.isFunction = isFunction;
27383    lodash.isInteger = isInteger;
27384    lodash.isLength = isLength;
27385    lodash.isMap = isMap;
27386    lodash.isMatch = isMatch;
27387    lodash.isMatchWith = isMatchWith;
27388    lodash.isNaN = isNaN;
27389    lodash.isNative = isNative;
27390    lodash.isNil = isNil;
27391    lodash.isNull = isNull;
27392    lodash.isNumber = isNumber;
27393    lodash.isObject = isObject;
27394    lodash.isObjectLike = isObjectLike;
27395    lodash.isPlainObject = isPlainObject;
27396    lodash.isRegExp = isRegExp;
27397    lodash.isSafeInteger = isSafeInteger;
27398    lodash.isSet = isSet;
27399    lodash.isString = isString;
27400    lodash.isSymbol = isSymbol;
27401    lodash.isTypedArray = isTypedArray;
27402    lodash.isUndefined = isUndefined;
27403    lodash.isWeakMap = isWeakMap;
27404    lodash.isWeakSet = isWeakSet;
27405    lodash.join = join;
27406    lodash.kebabCase = kebabCase;
27407    lodash.last = last;
27408    lodash.lastIndexOf = lastIndexOf;
27409    lodash.lowerCase = lowerCase;
27410    lodash.lowerFirst = lowerFirst;
27411    lodash.lt = lt;
27412    lodash.lte = lte;
27413    lodash.max = max;
27414    lodash.maxBy = maxBy;
27415    lodash.mean = mean;
27416    lodash.meanBy = meanBy;
27417    lodash.min = min;
27418    lodash.minBy = minBy;
27419    lodash.stubArray = stubArray;
27420    lodash.stubFalse = stubFalse;
27421    lodash.stubObject = stubObject;
27422    lodash.stubString = stubString;
27423    lodash.stubTrue = stubTrue;
27424    lodash.multiply = multiply;
27425    lodash.nth = nth;
27426    lodash.noConflict = noConflict;
27427    lodash.noop = noop;
27428    lodash.now = now;
27429    lodash.pad = pad;
27430    lodash.padEnd = padEnd;
27431    lodash.padStart = padStart;
27432    lodash.parseInt = parseInt;
27433    lodash.random = random;
27434    lodash.reduce = reduce;
27435    lodash.reduceRight = reduceRight;
27436    lodash.repeat = repeat;
27437    lodash.replace = replace;
27438    lodash.result = result;
27439    lodash.round = round;
27440    lodash.runInContext = runInContext;
27441    lodash.sample = sample;
27442    lodash.size = size;
27443    lodash.snakeCase = snakeCase;
27444    lodash.some = some;
27445    lodash.sortedIndex = sortedIndex;
27446    lodash.sortedIndexBy = sortedIndexBy;
27447    lodash.sortedIndexOf = sortedIndexOf;
27448    lodash.sortedLastIndex = sortedLastIndex;
27449    lodash.sortedLastIndexBy = sortedLastIndexBy;
27450    lodash.sortedLastIndexOf = sortedLastIndexOf;
27451    lodash.startCase = startCase;
27452    lodash.startsWith = startsWith;
27453    lodash.subtract = subtract;
27454    lodash.sum = sum;
27455    lodash.sumBy = sumBy;
27456    lodash.template = template;
27457    lodash.times = times;
27458    lodash.toFinite = toFinite;
27459    lodash.toInteger = toInteger;
27460    lodash.toLength = toLength;
27461    lodash.toLower = toLower;
27462    lodash.toNumber = toNumber;
27463    lodash.toSafeInteger = toSafeInteger;
27464    lodash.toString = toString;
27465    lodash.toUpper = toUpper;
27466    lodash.trim = trim;
27467    lodash.trimEnd = trimEnd;
27468    lodash.trimStart = trimStart;
27469    lodash.truncate = truncate;
27470    lodash.unescape = unescape;
27471    lodash.uniqueId = uniqueId;
27472    lodash.upperCase = upperCase;
27473    lodash.upperFirst = upperFirst;
27474
27475    // Add aliases.
27476    lodash.each = forEach;
27477    lodash.eachRight = forEachRight;
27478    lodash.first = head;
27479
27480    mixin(lodash, (function() {
27481      var source = {};
27482      baseForOwn(lodash, function(func, methodName) {
27483        if (!hasOwnProperty.call(lodash.prototype, methodName)) {
27484          source[methodName] = func;
27485        }
27486      });
27487      return source;
27488    }()), { 'chain': false });
27489
27490    /*------------------------------------------------------------------------*/
27491
27492    /**
27493     * The semantic version number.
27494     *
27495     * @static
27496     * @memberOf _
27497     * @type {string}
27498     */
27499    lodash.VERSION = VERSION;
27500
27501    // Assign default placeholders.
27502    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {
27503      lodash[methodName].placeholder = lodash;
27504    });
27505
27506    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.
27507    arrayEach(['drop', 'take'], function(methodName, index) {
27508      LazyWrapper.prototype[methodName] = function(n) {
27509        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);
27510
27511        var result = (this.__filtered__ && !index)
27512          ? new LazyWrapper(this)
27513          : this.clone();
27514
27515        if (result.__filtered__) {
27516          result.__takeCount__ = nativeMin(n, result.__takeCount__);
27517        } else {
27518          result.__views__.push({
27519            'size': nativeMin(n, MAX_ARRAY_LENGTH),
27520            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')
27521          });
27522        }
27523        return result;
27524      };
27525
27526      LazyWrapper.prototype[methodName + 'Right'] = function(n) {
27527        return this.reverse()[methodName](n).reverse();
27528      };
27529    });
27530
27531    // Add `LazyWrapper` methods that accept an `iteratee` value.
27532    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {
27533      var type = index + 1,
27534          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;
27535
27536      LazyWrapper.prototype[methodName] = function(iteratee) {
27537        var result = this.clone();
27538        result.__iteratees__.push({
27539          'iteratee': getIteratee(iteratee, 3),
27540          'type': type
27541        });
27542        result.__filtered__ = result.__filtered__ || isFilter;
27543        return result;
27544      };
27545    });
27546
27547    // Add `LazyWrapper` methods for `_.head` and `_.last`.
27548    arrayEach(['head', 'last'], function(methodName, index) {
27549      var takeName = 'take' + (index ? 'Right' : '');
27550
27551      LazyWrapper.prototype[methodName] = function() {
27552        return this[takeName](1).value()[0];
27553      };
27554    });
27555
27556    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.
27557    arrayEach(['initial', 'tail'], function(methodName, index) {
27558      var dropName = 'drop' + (index ? '' : 'Right');
27559
27560      LazyWrapper.prototype[methodName] = function() {
27561        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);
27562      };
27563    });
27564
27565    LazyWrapper.prototype.compact = function() {
27566      return this.filter(identity);
27567    };
27568
27569    LazyWrapper.prototype.find = function(predicate) {
27570      return this.filter(predicate).head();
27571    };
27572
27573    LazyWrapper.prototype.findLast = function(predicate) {
27574      return this.reverse().find(predicate);
27575    };
27576
27577    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {
27578      if (typeof path == 'function') {
27579        return new LazyWrapper(this);
27580      }
27581      return this.map(function(value) {
27582        return baseInvoke(value, path, args);
27583      });
27584    });
27585
27586    LazyWrapper.prototype.reject = function(predicate) {
27587      return this.filter(negate(getIteratee(predicate)));
27588    };
27589
27590    LazyWrapper.prototype.slice = function(start, end) {
27591      start = toInteger(start);
27592
27593      var result = this;
27594      if (result.__filtered__ && (start > 0 || end < 0)) {
27595        return new LazyWrapper(result);
27596      }
27597      if (start < 0) {
27598        result = result.takeRight(-start);
27599      } else if (start) {
27600        result = result.drop(start);
27601      }
27602      if (end !== undefined) {
27603        end = toInteger(end);
27604        result = end < 0 ? result.dropRight(-end) : result.take(end - start);
27605      }
27606      return result;
27607    };
27608
27609    LazyWrapper.prototype.takeRightWhile = function(predicate) {
27610      return this.reverse().takeWhile(predicate).reverse();
27611    };
27612
27613    LazyWrapper.prototype.toArray = function() {
27614      return this.take(MAX_ARRAY_LENGTH);
27615    };
27616
27617    // Add `LazyWrapper` methods to `lodash.prototype`.
27618    baseForOwn(LazyWrapper.prototype, function(func, methodName) {
27619      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),
27620          isTaker = /^(?:head|last)$/.test(methodName),
27621          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],
27622          retUnwrapped = isTaker || /^find/.test(methodName);
27623
27624      if (!lodashFunc) {
27625        return;
27626      }
27627      lodash.prototype[methodName] = function() {
27628        var value = this.__wrapped__,
27629            args = isTaker ? [1] : arguments,
27630            isLazy = value instanceof LazyWrapper,
27631            iteratee = args[0],
27632            useLazy = isLazy || isArray(value);
27633
27634        var interceptor = function(value) {
27635          var result = lodashFunc.apply(lodash, arrayPush([value], args));
27636          return (isTaker && chainAll) ? result[0] : result;
27637        };
27638
27639        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {
27640          // Avoid lazy use if the iteratee has a "length" value other than `1`.
27641          isLazy = useLazy = false;
27642        }
27643        var chainAll = this.__chain__,
27644            isHybrid = !!this.__actions__.length,
27645            isUnwrapped = retUnwrapped && !chainAll,
27646            onlyLazy = isLazy && !isHybrid;
27647
27648        if (!retUnwrapped && useLazy) {
27649          value = onlyLazy ? value : new LazyWrapper(this);
27650          var result = func.apply(value, args);
27651          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });
27652          return new LodashWrapper(result, chainAll);
27653        }
27654        if (isUnwrapped && onlyLazy) {
27655          return func.apply(this, args);
27656        }
27657        result = this.thru(interceptor);
27658        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;
27659      };
27660    });
27661
27662    // Add `Array` methods to `lodash.prototype`.
27663    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {
27664      var func = arrayProto[methodName],
27665          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',
27666          retUnwrapped = /^(?:pop|shift)$/.test(methodName);
27667
27668      lodash.prototype[methodName] = function() {
27669        var args = arguments;
27670        if (retUnwrapped && !this.__chain__) {
27671          var value = this.value();
27672          return func.apply(isArray(value) ? value : [], args);
27673        }
27674        return this[chainName](function(value) {
27675          return func.apply(isArray(value) ? value : [], args);
27676        });
27677      };
27678    });
27679
27680    // Map minified method names to their real names.
27681    baseForOwn(LazyWrapper.prototype, function(func, methodName) {
27682      var lodashFunc = lodash[methodName];
27683      if (lodashFunc) {
27684        var key = lodashFunc.name + '';
27685        if (!hasOwnProperty.call(realNames, key)) {
27686          realNames[key] = [];
27687        }
27688        realNames[key].push({ 'name': methodName, 'func': lodashFunc });
27689      }
27690    });
27691
27692    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{
27693      'name': 'wrapper',
27694      'func': undefined
27695    }];
27696
27697    // Add methods to `LazyWrapper`.
27698    LazyWrapper.prototype.clone = lazyClone;
27699    LazyWrapper.prototype.reverse = lazyReverse;
27700    LazyWrapper.prototype.value = lazyValue;
27701
27702    // Add chain sequence methods to the `lodash` wrapper.
27703    lodash.prototype.at = wrapperAt;
27704    lodash.prototype.chain = wrapperChain;
27705    lodash.prototype.commit = wrapperCommit;
27706    lodash.prototype.next = wrapperNext;
27707    lodash.prototype.plant = wrapperPlant;
27708    lodash.prototype.reverse = wrapperReverse;
27709    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;
27710
27711    // Add lazy aliases.
27712    lodash.prototype.first = lodash.prototype.head;
27713
27714    if (symIterator) {
27715      lodash.prototype[symIterator] = wrapperToIterator;
27716    }
27717    return lodash;
27718  });
27719
27720  /*--------------------------------------------------------------------------*/
27721
27722  // Export lodash.
27723  var _ = runInContext();
27724
27725  // Some AMD build optimizers, like r.js, check for condition patterns like:
27726  if (true) {
27727    // Expose Lodash on the global object to prevent errors when Lodash is
27728    // loaded by a script tag in the presence of an AMD loader.
27729    // See http://requirejs.org/docs/errors.html#mismatch for more details.
27730    // Use `_.noConflict` to remove Lodash from the global object.
27731    root._ = _;
27732
27733    // Define as an anonymous module so, through path mapping, it can be
27734    // referenced as the "underscore" module.
27735    !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {
27736      return _;
27737    }).call(exports, __webpack_require__, exports, module),
27738		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
27739  }
27740  // Check for `exports` after `define` in case a build optimizer adds it.
27741  else {}
27742}.call(this));
27743
27744
27745/***/ }),
27746
27747/***/ "./resources/sass/app.scss":
27748/*!*********************************!*\
27749  !*** ./resources/sass/app.scss ***!
27750  \*********************************/
27751/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
27752
27753"use strict";
27754__webpack_require__.r(__webpack_exports__);
27755// extracted by mini-css-extract-plugin
27756
27757
27758/***/ }),
27759
27760/***/ "./resources/css/app.css":
27761/*!*******************************!*\
27762  !*** ./resources/css/app.css ***!
27763  \*******************************/
27764/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
27765
27766"use strict";
27767__webpack_require__.r(__webpack_exports__);
27768// extracted by mini-css-extract-plugin
27769
27770
27771/***/ }),
27772
vendor: 5,636 bytes, lines 27773-27966
27773/***/ "./node_modules/process/browser.js":
27774/*!*****************************************!*\
27775  !*** ./node_modules/process/browser.js ***!
27776  \*****************************************/
27777/***/ ((module) => {
27778
27779// shim for using process in browser
27780var process = module.exports = {};
27781
27782// cached from whatever global is present so that test runners that stub it
27783// don't break things.  But we need to wrap it in a try catch in case it is
27784// wrapped in strict mode code which doesn't define any globals.  It's inside a
27785// function because try/catches deoptimize in certain engines.
27786
27787var cachedSetTimeout;
27788var cachedClearTimeout;
27789
27790function defaultSetTimout() {
27791    throw new Error('setTimeout has not been defined');
27792}
27793function defaultClearTimeout () {
27794    throw new Error('clearTimeout has not been defined');
27795}
27796(function () {
27797    try {
27798        if (typeof setTimeout === 'function') {
27799            cachedSetTimeout = setTimeout;
27800        } else {
27801            cachedSetTimeout = defaultSetTimout;
27802        }
27803    } catch (e) {
27804        cachedSetTimeout = defaultSetTimout;
27805    }
27806    try {
27807        if (typeof clearTimeout === 'function') {
27808            cachedClearTimeout = clearTimeout;
27809        } else {
27810            cachedClearTimeout = defaultClearTimeout;
27811        }
27812    } catch (e) {
27813        cachedClearTimeout = defaultClearTimeout;
27814    }
27815} ())
27816function runTimeout(fun) {
27817    if (cachedSetTimeout === setTimeout) {
27818        //normal enviroments in sane situations
27819        return setTimeout(fun, 0);
27820    }
27821    // if setTimeout wasn't available but was latter defined
27822    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
27823        cachedSetTimeout = setTimeout;
27824        return setTimeout(fun, 0);
27825    }
27826    try {
27827        // when when somebody has screwed with setTimeout but no I.E. maddness
27828        return cachedSetTimeout(fun, 0);
27829    } catch(e){
27830        try {
27831            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
27832            return cachedSetTimeout.call(null, fun, 0);
27833        } catch(e){
27834            // 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
27835            return cachedSetTimeout.call(this, fun, 0);
27836        }
27837    }
27838
27839
27840}
27841function runClearTimeout(marker) {
27842    if (cachedClearTimeout === clearTimeout) {
27843        //normal enviroments in sane situations
27844        return clearTimeout(marker);
27845    }
27846    // if clearTimeout wasn't available but was latter defined
27847    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
27848        cachedClearTimeout = clearTimeout;
27849        return clearTimeout(marker);
27850    }
27851    try {
27852        // when when somebody has screwed with setTimeout but no I.E. maddness
27853        return cachedClearTimeout(marker);
27854    } catch (e){
27855        try {
27856            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
27857            return cachedClearTimeout.call(null, marker);
27858        } catch (e){
27859            // 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.
27860            // Some versions of I.E. have different rules for clearTimeout vs setTimeout
27861            return cachedClearTimeout.call(this, marker);
27862        }
27863    }
27864
27865
27866
27867}
27868var queue = [];
27869var draining = false;
27870var currentQueue;
27871var queueIndex = -1;
27872
27873function cleanUpNextTick() {
27874    if (!draining || !currentQueue) {
27875        return;
27876    }
27877    draining = false;
27878    if (currentQueue.length) {
27879        queue = currentQueue.concat(queue);
27880    } else {
27881        queueIndex = -1;
27882    }
27883    if (queue.length) {
27884        drainQueue();
27885    }
27886}
27887
27888function drainQueue() {
27889    if (draining) {
27890        return;
27891    }
27892    var timeout = runTimeout(cleanUpNextTick);
27893    draining = true;
27894
27895    var len = queue.length;
27896    while(len) {
27897        currentQueue = queue;
27898        queue = [];
27899        while (++queueIndex < len) {
27900            if (currentQueue) {
27901                currentQueue[queueIndex].run();
27902            }
27903        }
27904        queueIndex = -1;
27905        len = queue.length;
27906    }
27907    currentQueue = null;
27908    draining = false;
27909    runClearTimeout(timeout);
27910}
27911
27912process.nextTick = function (fun) {
27913    var args = new Array(arguments.length - 1);
27914    if (arguments.length > 1) {
27915        for (var i = 1; i < arguments.length; i++) {
27916            args[i - 1] = arguments[i];
27917        }
27918    }
27919    queue.push(new Item(fun, args));
27920    if (queue.length === 1 && !draining) {
27921        runTimeout(drainQueue);
27922    }
27923};
27924
27925// v8 likes predictible objects
27926function Item(fun, array) {
27927    this.fun = fun;
27928    this.array = array;
27929}
27930Item.prototype.run = function () {
27931    this.fun.apply(null, this.array);
27932};
27933process.title = 'browser';
27934process.browser = true;
27935process.env = {};
27936process.argv = [];
27937process.version = ''; // empty string to avoid regexp issues
27938process.versions = {};
27939
27940function noop() {}
27941
27942process.on = noop;
27943process.addListener = noop;
27944process.once = noop;
27945process.off = noop;
27946process.removeListener = noop;
27947process.removeAllListeners = noop;
27948process.emit = noop;
27949process.prependListener = noop;
27950process.prependOnceListener = noop;
27951
27952process.listeners = function (name) { return [] }
27953
27954process.binding = function (name) {
27955    throw new Error('process.binding is not supported');
27956};
27957
27958process.cwd = function () { return '/' };
27959process.chdir = function (dir) {
27960    throw new Error('process.chdir is not supported');
27961};
27962process.umask = function() { return 0; };
27963
27964
27965/***/ }),
27966
27967/***/ "./resources/js/components/ExampleComponent.vue":
27968/*!******************************************************!*\
27969  !*** ./resources/js/components/ExampleComponent.vue ***!
27970  \******************************************************/
27971/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
27972
27973"use strict";
27974__webpack_require__.r(__webpack_exports__);
27975/* harmony export */ __webpack_require__.d(__webpack_exports__, {
27976/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
27977/* harmony export */ });
27978/* harmony import */ var _ExampleComponent_vue_vue_type_template_id_299e239e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ExampleComponent.vue?vue&type=template&id=299e239e& */ "./resources/js/components/ExampleComponent.vue?vue&type=template&id=299e239e&");
27979/* harmony import */ var _ExampleComponent_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ExampleComponent.vue?vue&type=script&lang=js& */ "./resources/js/components/ExampleComponent.vue?vue&type=script&lang=js&");
27980/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
27981
27982
27983
27984
27985
27986/* normalize component */
27987;
27988var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
27989  _ExampleComponent_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
27990  _ExampleComponent_vue_vue_type_template_id_299e239e___WEBPACK_IMPORTED_MODULE_0__.render,
27991  _ExampleComponent_vue_vue_type_template_id_299e239e___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
27992  false,
27993  null,
27994  null,
27995  null
27996
27997)
27998
27999/* hot reload */
28000if (false) { var api; }
28001component.options.__file = "resources/js/components/ExampleComponent.vue"
28002/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);
28003
28004/***/ }),
28005
28006/***/ "./resources/js/components/RoleAssignButton.vue":
28007/*!******************************************************!*\
28008  !*** ./resources/js/components/RoleAssignButton.vue ***!
28009  \******************************************************/
28010/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28011
28012"use strict";
28013__webpack_require__.r(__webpack_exports__);
28014/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28015/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
28016/* harmony export */ });
28017/* harmony import */ var _RoleAssignButton_vue_vue_type_template_id_3d01b0fc_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./RoleAssignButton.vue?vue&type=template&id=3d01b0fc&scoped=true& */ "./resources/js/components/RoleAssignButton.vue?vue&type=template&id=3d01b0fc&scoped=true&");
28018/* harmony import */ var _RoleAssignButton_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./RoleAssignButton.vue?vue&type=script&lang=js& */ "./resources/js/components/RoleAssignButton.vue?vue&type=script&lang=js&");
28019/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
28020
28021
28022
28023
28024
28025/* normalize component */
28026;
28027var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
28028  _RoleAssignButton_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
28029  _RoleAssignButton_vue_vue_type_template_id_3d01b0fc_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,
28030  _RoleAssignButton_vue_vue_type_template_id_3d01b0fc_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
28031  false,
28032  null,
28033  "3d01b0fc",
28034  null
28035
28036)
28037
28038/* hot reload */
28039if (false) { var api; }
28040component.options.__file = "resources/js/components/RoleAssignButton.vue"
28041/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);
28042
28043/***/ }),
28044
28045/***/ "./resources/js/components/ExampleComponent.vue?vue&type=script&lang=js&":
28046/*!*******************************************************************************!*\
28047  !*** ./resources/js/components/ExampleComponent.vue?vue&type=script&lang=js& ***!
28048  \*******************************************************************************/
28049/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28050
28051"use strict";
28052__webpack_require__.r(__webpack_exports__);
28053/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28054/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
28055/* harmony export */ });
28056/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_0_rules_0_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ExampleComponent_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ExampleComponent.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/ExampleComponent.vue?vue&type=script&lang=js&");
28057 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_0_rules_0_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ExampleComponent_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
28058
28059/***/ }),
28060
28061/***/ "./resources/js/components/RoleAssignButton.vue?vue&type=script&lang=js&":
28062/*!*******************************************************************************!*\
28063  !*** ./resources/js/components/RoleAssignButton.vue?vue&type=script&lang=js& ***!
28064  \*******************************************************************************/
28065/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28066
28067"use strict";
28068__webpack_require__.r(__webpack_exports__);
28069/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28070/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
28071/* harmony export */ });
28072/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_0_rules_0_use_
280720_node_modules_vue_loader_lib_index_js_vue_loader_options_RoleAssignButton_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoleAssignButton.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/RoleAssignButton.vue?vue&type=script&lang=js&");
28073 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_0_rules_0_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_RoleAssignButton_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
28074
28075/***/ }),
28076
28077/***/ "./resources/js/components/ExampleComponent.vue?vue&type=template&id=299e239e&":
28078/*!*************************************************************************************!*\
28079  !*** ./resources/js/components/ExampleComponent.vue?vue&type=template&id=299e239e& ***!
28080  \*************************************************************************************/
28081/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28082
28083"use strict";
28084__webpack_require__.r(__webpack_exports__);
28085/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28086/* harmony export */   "render": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ExampleComponent_vue_vue_type_template_id_299e239e___WEBPACK_IMPORTED_MODULE_0__.render),
28087/* harmony export */   "staticRenderFns": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ExampleComponent_vue_vue_type_template_id_299e239e___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
28088/* harmony export */ });
28089/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ExampleComponent_vue_vue_type_template_id_299e239e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ExampleComponent.vue?vue&type=template&id=299e239e& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/ExampleComponent.vue?vue&type=template&id=299e239e&");
28090
28091
28092/***/ }),
28093
28094/***/ "./resources/js/components/RoleAssignButton.vue?vue&type=template&id=3d01b0fc&scoped=true&":
28095/*!*************************************************************************************************!*\
28096  !*** ./resources/js/components/RoleAssignButton.vue?vue&type=template&id=3d01b0fc&scoped=true& ***!
28097  \*************************************************************************************************/
28098/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28099
28100"use strict";
28101__webpack_require__.r(__webpack_exports__);
28102/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28103/* harmony export */   "render": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_RoleAssignButton_vue_vue_type_template_id_3d01b0fc_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render),
28104/* harmony export */   "staticRenderFns": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_RoleAssignButton_vue_vue_type_template_id_3d01b0fc_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
28105/* harmony export */ });
28106/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_RoleAssignButton_vue_vue_type_template_id_3d01b0fc_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoleAssignButton.vue?vue&type=template&id=3d01b0fc&scoped=true& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/RoleAssignButton.vue?vue&type=template&id=3d01b0fc&scoped=true&");
28107
28108
28109/***/ }),
28110
28111/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/ExampleComponent.vue?vue&type=template&id=299e239e&":
28112/*!****************************************************************************************************************************************************************************************************************************!*\
28113  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/ExampleComponent.vue?vue&type=template&id=299e239e& ***!
28114  \****************************************************************************************************************************************************************************************************************************/
28115/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28116
28117"use strict";
28118__webpack_require__.r(__webpack_exports__);
28119/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28120/* harmony export */   "render": () => (/* binding */ render),
28121/* harmony export */   "staticRenderFns": () => (/* binding */ staticRenderFns)
28122/* harmony export */ });
28123var render = function () {
28124  var _vm = this
28125  var _h = _vm.$createElement
28126  var _c = _vm._self._c || _h
28127  return _vm._m(0)
28128}
28129var staticRenderFns = [
28130  function () {
28131    var _vm = this
28132    var _h = _vm.$createElement
28133    var _c = _vm._self._c || _h
28134    return _c("div", { staticClass: "container" }, [
28135      _c("div", { staticClass: "row justify-content-center" }, [
28136        _c("div", { staticClass: "col-md-8" }, [
28137          _c("div", { staticClass: "card" }, [
28138            _c("div", { staticClass: "card-header" }, [
28139              _vm._v("Example Component"),
28140            ]),
28141            _vm._v(" "),
28142            _c("div", { staticClass: "card-body" }, [
28143              _vm._v(
28144                "\n                    I'm an example component.\n                "
28145              ),
28146            ]),
28147          ]),
28148        ]),
28149      ]),
28150    ])
28151  },
28152]
28153render._withStripped = true
28154
28155
28156
28157/***/ }),
28158
28159/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/RoleAssignButton.vue?vue&type=template&id=3d01b0fc&scoped=true&":
28160/*!****************************************************************************************************************************************************************************************************************************************!*\
28161  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/RoleAssignButton.vue?vue&type=template&id=3d01b0fc&scoped=true& ***!
28162  \****************************************************************************************************************************************************************************************************************************************/
28163/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28164
28165"use strict";
28166__webpack_require__.r(__webpack_exports__);
28167/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28168/* harmony export */   "render": () => (/* binding */ render),
28169/* harmony export */   "staticRenderFns": () => (/* binding */ staticRenderFns)
28170/* harmony export */ });
28171var render = function () {
28172  var _vm = this
28173  var _h = _vm.$createElement
28174  var _c = _vm._self._c || _h
28175  return _c("div", [
28176    _c("button", {
28177      staticClass: "btn btn-primary",
28178      domProps: { textContent: _vm._s(_vm.buttonText) },
28179      on: { click: _vm.roleAssignment },
28180    }),
28181  ])
28182}
28183var staticRenderFns = []
28184render._withStripped = true
28185
28186
28187
28188/***/ }),
28189
vendor: 3,365 bytes, lines 28190-28302
28190/***/ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js":
28191/*!********************************************************************!*\
28192  !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***!
28193  \********************************************************************/
28194/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28195
28196"use strict";
28197__webpack_require__.r(__webpack_exports__);
28198/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28199/* harmony export */   "default": () => (/* binding */ normalizeComponent)
28200/* harmony export */ });
28201/* globals __VUE_SSR_CONTEXT__ */
28202
28203// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
28204// This module is a runtime utility for cleaner component module output and will
28205// be included in the final webpack user bundle.
28206
28207function normalizeComponent (
28208  scriptExports,
28209  render,
28210  staticRenderFns,
28211  functionalTemplate,
28212  injectStyles,
28213  scopeId,
28214  moduleIdentifier, /* server only */
28215  shadowMode /* vue-cli only */
28216) {
28217  // Vue.extend constructor export interop
28218  var options = typeof scriptExports === 'function'
28219    ? scriptExports.options
28220    : scriptExports
28221
28222  // render functions
28223  if (render) {
28224    options.render = render
28225    options.staticRenderFns = staticRenderFns
28226    options._compiled = true
28227  }
28228
28229  // functional template
28230  if (functionalTemplate) {
28231    options.functional = true
28232  }
28233
28234  // scopedId
28235  if (scopeId) {
28236    options._scopeId = 'data-v-' + scopeId
28237  }
28238
28239  var hook
28240  if (moduleIdentifier) { // server build
28241    hook = function (context) {
28242      // 2.3 injection
28243      context =
28244        context || // cached call
28245        (this.$vnode && this.$vnode.ssrContext) || // stateful
28246        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
28247      // 2.2 with runInNewContext: true
28248      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
28249        context = __VUE_SSR_CONTEXT__
28250      }
28251      // inject component styles
28252      if (injectStyles) {
28253        injectStyles.call(this, context)
28254      }
28255      // register component module identifier for async chunk inferrence
28256      if (context && context._registeredComponents) {
28257        context._registeredComponents.add(moduleIdentifier)
28258      }
28259    }
28260    // used by ssr in case component is cached and beforeCreate
28261    // never gets called
28262    options._ssrRegister = hook
28263  } else if (injectStyles) {
28264    hook = shadowMode
28265      ? function () {
28266        injectStyles.call(
28267          this,
28268          (options.functional ? this.parent : this).$root.$options.shadowRoot
28269        )
28270      }
28271      : injectStyles
28272  }
28273
28274  if (hook) {
28275    if (options.functional) {
28276      // for template-only hot-reload because in that case the render fn doesn't
28277      // go through the normalizer
28278      options._injectStyles = hook
28279      // register for functional component in vue file
28280      var originalRender = options.render
28281      options.render = function renderWithStyleInjection (h, context) {
28282        hook.call(context)
28283        return originalRender(h, context)
28284      }
28285    } else {
28286      // inject component registration as beforeCreate hook
28287      var existing = options.beforeCreate
28288      options.beforeCreate = existing
28289        ? [].concat(existing, hook)
28290        : [hook]
28291    }
28292  }
28293
28294  return {
28295    exports: scriptExports,
28296    options: options
28297  }
28298}
28299
28300
28301/***/ }),
28302
vendor: 324,061 bytes, lines 28303-40345
28303/***/ "./node_modules/vue/dist/vue.esm.js":
28304/*!******************************************!*\
28305  !*** ./node_modules/vue/dist/vue.esm.js ***!
28306  \******************************************/
28307/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28308
28309"use strict";
28310__webpack_require__.r(__webpack_exports__);
28311/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28312/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
28313/* harmony export */ });
28314/*!
28315 * Vue.js v2.6.14
28316 * (c) 2014-2021 Evan You
28317 * Released under the MIT License.
28318 */
28319/*  */
28320
28321var emptyObject = Object.freeze({});
28322
28323// These helpers produce better VM code in JS engines due to their
28324// explicitness and function inlining.
28325function isUndef (v) {
28326  return v === undefined || v === null
28327}
28328
28329function isDef (v) {
28330  return v !== undefined && v !== null
28331}
28332
28333function isTrue (v) {
28334  return v === true
28335}
28336
28337function isFalse (v) {
28338  return v === false
28339}
28340
28341/**
28342 * Check if value is primitive.
28343 */
28344function isPrimitive (value) {
28345  return (
28346    typeof value === 'string' ||
28347    typeof value === 'number' ||
28348    // $flow-disable-line
28349    typeof value === 'symbol' ||
28350    typeof value === 'boolean'
28351  )
28352}
28353
28354/**
28355 * Quick object check - this is primarily used to tell
28356 * Objects from primitive values when we know the value
28357 * is a JSON-compliant type.
28358 */
28359function isObject (obj) {
28360  return obj !== null && typeof obj === 'object'
28361}
28362
28363/**
28364 * Get the raw type string of a value, e.g., [object Object].
28365 */
28366var _toString = Object.prototype.toString;
28367
28368function toRawType (value) {
28369  return _toString.call(value).slice(8, -1)
28370}
28371
28372/**
28373 * Strict object type check. Only returns true
28374 * for plain JavaScript objects.
28375 */
28376function isPlainObject (obj) {
28377  return _toString.call(obj) === '[object Object]'
28378}
28379
28380function isRegExp (v) {
28381  return _toString.call(v) === '[object RegExp]'
28382}
28383
28384/**
28385 * Check if val is a valid array index.
28386 */
28387function isValidArrayIndex (val) {
28388  var n = parseFloat(String(val));
28389  return n >= 0 && Math.floor(n) === n && isFinite(val)
28390}
28391
28392function isPromise (val) {
28393  return (
28394    isDef(val) &&
28395    typeof val.then === 'function' &&
28396    typeof val.catch === 'function'
28397  )
28398}
28399
28400/**
28401 * Convert a value to a string that is actually rendered.
28402 */
28403function toString (val) {
28404  return val == null
28405    ? ''
28406    : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)
28407      ? JSON.stringify(val, null, 2)
28408      : String(val)
28409}
28410
28411/**
28412 * Convert an input value to a number for persistence.
28413 * If the conversion fails, return original string.
28414 */
28415function toNumber (val) {
28416  var n = parseFloat(val);
28417  return isNaN(n) ? val : n
28418}
28419
28420/**
28421 * Make a map and return a function for checking if a key
28422 * is in that map.
28423 */
28424function makeMap (
28425  str,
28426  expectsLowerCase
28427) {
28428  var map = Object.create(null);
28429  var list = str.split(',');
28430  for (var i = 0; i < list.length; i++) {
28431    map[list[i]] = true;
28432  }
28433  return expectsLowerCase
28434    ? function (val) { return map[val.toLowerCase()]; }
28435    : function (val) { return map[val]; }
28436}
28437
28438/**
28439 * Check if a tag is a built-in tag.
28440 */
28441var isBuiltInTag = makeMap('slot,component', true);
28442
28443/**
28444 * Check if an attribute is a reserved attribute.
28445 */
28446var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');
28447
28448/**
28449 * Remove an item from an array.
28450 */
28451function remove (arr, item) {
28452  if (arr.length) {
28453    var index = arr.indexOf(item);
28454    if (index > -1) {
28455      return arr.splice(index, 1)
28456    }
28457  }
28458}
28459
28460/**
28461 * Check whether an object has the property.
28462 */
28463var hasOwnProperty = Object.prototype.hasOwnProperty;
28464function hasOwn (obj, key) {
28465  return hasOwnProperty.call(obj, key)
28466}
28467
28468/**
28469 * Create a cached version of a pure function.
28470 */
28471function cached (fn) {
28472  var cache = Object.create(null);
28473  return (function cachedFn (str) {
28474    var hit = cache[str];
28475    return hit || (cache[str] = fn(str))
28476  })
28477}
28478
28479/**
28480 * Camelize a hyphen-delimited string.
28481 */
28482var camelizeRE = /-(\w)/g;
28483var camelize = cached(function (str) {
28484  return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })
28485});
28486
28487/**
28488 * Capitalize a string.
28489 */
28490var capitalize = cached(function (str) {
28491  return str.charAt(0).toUpperCase() + str.slice(1)
28492});
28493
28494/**
28495 * Hyphenate a camelCase string.
28496 */
28497var hyphenateRE = /\B([A-Z])/g;
28498var hyphenate = cached(function (str) {
28499  return str.replace(hyphenateRE, '-$1').toLowerCase()
28500});
28501
28502/**
28503 * Simple bind polyfill for environments that do not support it,
28504 * e.g., PhantomJS 1.x. Technically, we don't need this anymore
28505 * since native bind is now performant enough in most browsers.
28506 * But removing it would mean breaking code that was able to run in
28507 * PhantomJS 1.x, so this must be kept for backward compatibility.
28508 */
28509
28510/* istanbul ignore next */
28511function polyfillBind (fn, ctx) {
28512  function boundFn (a) {
28513    var l = arguments.length;
28514    return l
28515      ? l > 1
28516        ? fn.apply(ctx, arguments)
28517        : fn.call(ctx, a)
28518      : fn.call(ctx)
28519  }
28520
28521  boundFn._length = fn.length;
28522  return boundFn
28523}
28524
28525function nativeBind (fn, ctx) {
28526  return fn.bind(ctx)
28527}
28528
28529var bind = Function.prototype.bind
28530  ? nativeBind
28531  : polyfillBind;
28532
28533/**
28534 * Convert an Array-like object to a real Array.
28535 */
28536function toArray (list, start) {
28537  start = start || 0;
28538  var i = list.length - start;
28539  var ret = new Array(i);
28540  while (i--) {
28541    ret[i] = list[i + start];
28542  }
28543  return ret
28544}
28545
28546/**
28547 * Mix properties into target object.
28548 */
28549function extend (to, _from) {
28550  for (var key in _from) {
28551    to[key] = _from[key];
28552  }
28553  return to
28554}
28555
28556/**
28557 * Merge an Array of Objects into a single Object.
28558 */
28559function toObject (arr) {
28560  var res = {};
28561  for (var i = 0; i < arr.length; i++) {
28562    if (arr[i]) {
28563      extend(res, arr[i]);
28564    }
28565  }
28566  return res
28567}
28568
28569/* eslint-disable no-unused-vars */
28570
28571/**
28572 * Perform no operation.
28573 * Stubbing args to make Flow happy without leaving useless transpiled code
28574 * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).
28575 */
28576function noop (a, b, c) {}
28577
28578/**
28579 * Always return false.
28580 */
28581var no = function (a, b, c) { return false; };
28582
28583/* eslint-enable no-unused-vars */
28584
28585/**
28586 * Return the same value.
28587 */
28588var identity = function (_) { return _; };
28589
28590/**
28591 * Generate a string containing static keys from compiler modules.
28592 */
28593function genStaticKeys (modules) {
28594  return modules.reduce(function (keys, m) {
28595    return keys.concat(m.staticKeys || [])
28596  }, []).join(',')
28597}
28598
28599/**
28600 * Check if two values are loosely equal - that is,
28601 * if they are plain objects, do they have the same shape?
28602 */
28603function looseEqual (a, b) {
28604  if (a === b) { return true }
28605  var isObjectA = isObject(a);
28606  var isObjectB = isObject(b);
28607  if (isObjectA && isObjectB) {
28608    try {
28609      var isArrayA = Array.isArray(a);
28610      var isArrayB = Array.isArray(b);
28611      if (isArrayA && isArrayB) {
28612        return a.length === b.length && a.every(function (e, i) {
28613          return looseEqual(e, b[i])
28614        })
28615      } else if (a instanceof Date && b instanceof Date) {
28616        return a.getTime() === b.getTime()
28617      } else if (!isArrayA && !isArrayB) {
28618        var keysA = Object.keys(a);
28619        var keysB = Object.keys(b);
28620        return keysA.length === keysB.length && keysA.every(function (key) {
28621          return looseEqual(a[key], b[key])
28622        })
28623      } else {
28624        /* istanbul ignore next */
28625        return false
28626      }
28627    } catch (e) {
28628      /* istanbul ignore next */
28629      return false
28630    }
28631  } else if (!isObjectA && !isObjectB) {
28632    return String(a) === String(b)
28633  } else {
28634    return false
28635  }
28636}
28637
28638/**
28639 * Return the first index at which a loosely equal value can be
28640 * found in the array (if value is a plain object, the array must
28641 * contain an object of the same shape), or -1 if it is not present.
28642 */
28643function looseIndexOf (arr, val) {
28644  for (var i = 0; i < arr.length; i++) {
28645    if (looseEqual(arr[i], val)) { return i }
28646  }
28647  return -1
28648}
28649
28650/**
28651 * Ensure a function is called only once.
28652 */
28653function once (fn) {
28654  var called = false;
28655  return function () {
28656    if (!called) {
28657      called = true;
28658      fn.apply(this, arguments);
28659    }
28660  }
28661}
28662
28663var SSR_ATTR = 'data-server-rendered';
28664
28665var ASSET_TYPES = [
28666  'component',
28667  'directive',
28668  'filter'
28669];
28670
28671var LIFECYCLE_HOOKS = [
28672  'beforeCreate',
28673  'created',
28674  'beforeMount',
28675  'mounted',
28676  'beforeUpdate',
28677  'updated',
28678  'beforeDestroy',
28679  'destroyed',
28680  'activated',
28681  'deactivated',
28682  'errorCaptured',
28683  'serverPrefetch'
28684];
28685
28686/*  */
28687
28688
28689
28690var config = ({
28691  /**
28692   * Option merge strategies (used in core/util/options)
28693   */
28694  // $flow-disable-line
28695  optionMergeStrategies: Object.create(null),
28696
28697  /**
28698   * Whether to suppress warnings.
28699   */
28700  silent: false,
28701
28702  /**
28703   * Show production mode tip message on boot?
28704   */
28705  productionTip: "development" !== 'production',
28706
28707  /**
28708   * Whether to enable devtools
28709   */
28710  devtools: "development" !== 'production',
28711
28712  /**
28713   * Whether to record perf
28714   */
28715  performance: false,
28716
28717  /**
28718   * Error handler for watcher errors
28719   */
28720  errorHandler: null,
28721
28722  /**
28723   * Warn handler for watcher warns
28724   */
28725  warnHandler: null,
28726
28727  /**
28728   * Ignore certain custom elements
28729   */
28730  ignoredElements: [],
28731
28732  /**
28733   * Custom user key aliases for v-on
28734   */
28735  // $flow-disable-line
28736  keyCodes: Object.create(null),
28737
28738  /**
28739   * Check if a tag is reserved so that it cannot be registered as a
28740   * component. This is platform-dependent and may be overwritten.
28741   */
28742  isReservedTag: no,
28743
28744  /**
28745   * Check if an attribute is reserved so that it cannot be used as a component
28746   * prop. This is platform-dependent and may be overwritten.
28747   */
28748  isReservedAttr: no,
28749
28750  /**
28751   * Check if a tag is an unknown element.
28752   * Platform-dependent.
28753   */
28754  isUnknownElement: no,
28755
28756  /**
28757   * Get the namespace of an element
28758   */
28759  getTagNamespace: noop,
28760
28761  /**
28762   * Parse the real tag name for the specific platform.
28763   */
28764  parsePlatformTagName: identity,
28765
28766  /**
28767   * Check if an attribute must be bound using property, e.g. value
28768   * Platform-dependent.
28769   */
28770  mustUseProp: no,
28771
28772  /**
28773   * Perform updates asynchronously. Intended to be used by Vue Test Utils
28774   * This will significantly reduce performance if set to false.
28775   */
28776  async: true,
28777
28778  /**
28779   * Exposed for legacy reasons
28780   */
28781  _lifecycleHooks: LIFECYCLE_HOOKS
28782});
28783
28784/*  */
28785
28786/**
28787 * unicode letters used for parsing html tags, component names and property paths.
28788 * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname
28789 * skipping \u10000-\uEFFFF due to it freezing up PhantomJS
28790 */
28791var 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/;
28792
28793/**
28794 * Check if a string starts with $ or _
28795 */
28796function isReserved (str) {
28797  var c = (str + '').charCodeAt(0);
28798  return c === 0x24 || c === 0x5F
28799}
28800
28801/**
28802 * Define a property.
28803 */
28804function def (obj, key, val, enumerable) {
28805  Object.defineProperty(obj, key, {
28806    value: val,
28807    enumerable: !!enumerable,
28808    writable: true,
28809    configurable: true
28810  });
28811}
28812
28813/**
28814 * Parse simple path.
28815 */
28816var bailRE = new RegExp(("[^" + (unicodeRegExp.source) + ".$_\\d]"));
28817function parsePath (path) {
28818  if (bailRE.test(path)) {
28819    return
28820  }
28821  var segments = path.split('.');
28822  return function (obj) {
28823    for (var i = 0; i < segments.length; i++) {
28824      if (!obj) { return }
28825      obj = obj[segments[i]];
28826    }
28827    return obj
28828  }
28829}
28830
28831/*  */
28832
28833// can we use __proto__?
28834var hasProto = '__proto__' in {};
28835
28836// Browser environment sniffing
28837var inBrowser = typeof window !== 'undefined';
28838var inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;
28839var weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();
28840var UA = inBrowser && window.navigator.userAgent.toLowerCase();
28841var isIE = UA && /msie|trident/.test(UA);
28842var isIE9 = UA && UA.indexOf('msie 9.0') > 0;
28843var isEdge = UA && UA.indexOf('edge/') > 0;
28844var isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');
28845var isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios');
28846var isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge;
28847var isPhantomJS = UA && /phantomjs/.test(UA);
28848var isFF = UA && UA.match(/firefox\/(\d+)/);
28849
28850// Firefox has a "watch" function on Object.prototype...
28851var nativeWatch = ({}).watch;
28852
28853var supportsPassive = false;
28854if (inBrowser) {
28855  try {
28856    var opts = {};
28857    Object.defineProperty(opts, 'passive', ({
28858      get: function get () {
28859        /* istanbul ignore next */
28860        supportsPassive = true;
28861      }
28862    })); // https://github.com/facebook/flow/issues/285
28863    window.addEventListener('test-passive', null, opts);
28864  } catch (e) {}
28865}
28866
28867// this needs to be lazy-evaled because vue may be required before
28868// vue-server-renderer can set VUE_ENV
28869var _isServer;
28870var isServerRendering = function () {
28871  if (_isServer === undefined) {
28872    /* istanbul ignore if */
28873    if (!inBrowser && !inWeex && typeof __webpack_require__.g !== 'undefined') {
28874      // detect presence of vue-server-renderer and avoid
28875      // Webpack shimming the process
28876      _isServer = __webpack_require__.g['process'] && __webpack_require__.g['process'].env.VUE_ENV === 'server';
28877    } else {
28878      _isServer = false;
28879    }
28880  }
28881  return _isServer
28882};
28883
28884// detect devtools
28885var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
28886
28887/* istanbul ignore next */
28888function isNative (Ctor) {
28889  return typeof Ctor === 'function' && /native code/.test(Ctor.toString())
28890}
28891
28892var hasSymbol =
28893  typeof Symbol !== 'undefined' && isNative(Symbol) &&
28894  typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);
28895
28896var _Set;
28897/* istanbul ignore if */ // $flow-disable-line
28898if (typeof Set !== 'undefined' && isNative(Set)) {
28899  // use native Set when available.
28900  _Set = Set;
28901} else {
28902  // a non-standard Set polyfill that only works with primitive keys.
28903  _Set = /*@__PURE__*/(function () {
28904    function Set () {
28905      this.set = Object.create(null);
28906    }
28907    Set.prototype.has = function has (key) {
28908      return this.set[key] === true
28909    };
28910    Set.prototype.add = function add (key) {
28911      this.set[key] = true;
28912    };
28913    Set.prototype.clear = function clear () {
28914      this.set = Object.create(null);
28915    };
28916
28917    return Set;
28918  }());
28919}
28920
28921/*  */
28922
28923var warn = noop;
28924var tip = noop;
28925var generateComponentTrace = (noop); // work around flow check
28926var formatComponentName = (noop);
28927
28928if (true) {
28929  var hasConsole = typeof console !== 'undefined';
28930  var classifyRE = /(?:^|[-_])(\w)/g;
28931  var classify = function (str) { return str
28932    .replace(classifyRE, function (c) { return c.toUpperCase(); })
28933    .replace(/[-_]/g, ''); };
28934
28935  warn = function (msg, vm) {
28936    var trace = vm ? generateComponentTrace(vm) : '';
28937
28938    if (config.warnHandler) {
28939      config.warnHandler.call(null, msg, vm, trace);
28940    } else if (hasConsole && (!config.silent)) {
28941      console.error(("[Vue warn]: " + msg + trace));
28942    }
28943  };
28944
28945  tip = function (msg, vm) {
28946    if (hasConsole && (!config.silent)) {
28947      console.warn("[Vue tip]: " + msg + (
28948        vm ? generateComponentTrace(vm) : ''
28949      ));
28950    }
28951  };
28952
28953  formatComponentName = function (vm, includeFile) {
28954    if (vm.$root === vm) {
28955      return '<Root>'
28956    }
28957    var options = typeof vm === 'function' && vm.cid != null
28958      ? vm.options
28959      : vm._isVue
28960        ? vm.$options || vm.constructor.options
28961        : vm;
28962    var name = options.name || options._componentTag;
28963    var file = options.__file;
28964    if (!name && file) {
28965      var match = file.match(/([^/\\]+)\.vue$/);
28966      name = match && match[1];
28967    }
28968
28969    return (
28970      (name ? ("<" + (classify(name)) + ">") : "<Anonymous>") +
28971      (file && includeFile !== false ? (" at " + file) : '')
28972    )
28973  };
28974
28975  var repeat = function (str, n) {
28976    var res = '';
28977    while (n) {
28978      if (n % 2 === 1) { res += str; }
28979      if (n > 1) { str += str; }
28980      n >>= 1;
28981    }
28982    return res
28983  };
28984
28985  generateComponentTrace = function (vm) {
28986    if (vm._isVue && vm.$parent) {
28987      var tree = [];
28988      var currentRecursiveSequence = 0;
28989      while (vm) {
28990        if (tree.length > 0) {
28991          var last = tree[tree.length - 1];
28992          if (last.constructor === vm.constructor) {
28993            currentRecursiveSequence++;
28994            vm = vm.$parent;
28995            continue
28996          } else if (currentRecursiveSequence > 0) {
28997            tree[tree.length - 1] = [last, currentRecursiveSequence];
28998            currentRecursiveSequence = 0;
28999          }
29000        }
29001        tree.push(vm);
29002        vm = vm.$parent;
29003      }
29004      return '\n\nfound in\n\n' + tree
29005        .map(function (vm, i) { return ("" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)
29006            ? ((formatComponentName(vm[0])) + "... (" + (vm[1]) + " recursive calls)")
29007            : formatComponentName(vm))); })
29008        .join('\n')
29009    } else {
29010      return ("\n\n(found in " + (formatComponentName(vm)) + ")")
29011    }
29012  };
29013}
29014
29015/*  */
29016
29017var uid = 0;
29018
29019/**
29020 * A dep is an observable that can have multiple
29021 * directives subscribing to it.
29022 */
29023var Dep = function Dep () {
29024  this.id = uid++;
29025  this.subs = [];
29026};
29027
29028Dep.prototype.addSub = function addSub (sub) {
29029  this.subs.push(sub);
29030};
29031
29032Dep.prototype.removeSub = function removeSub (sub) {
29033  remove(this.subs, sub);
29034};
29035
29036Dep.prototype.depend = function depend () {
29037  if (Dep.target) {
29038    Dep.target.addDep(this);
29039  }
29040};
29041
29042Dep.prototype.notify = function notify () {
29043  // stabilize the subscriber list first
29044  var subs = this.subs.slice();
29045  if ( true && !config.async) {
29046    // subs aren't sorted in scheduler if not running async
29047    // we need to sort them now to make sure they fire in correct
29048    // order
29049    subs.sort(function (a, b) { return a.id - b.id; });
29050  }
29051  for (var i = 0, l = subs.length; i < l; i++) {
29052    subs[i].update();
29053  }
29054};
29055
29056// The current target watcher being evaluated.
29057// This is globally unique because only one watcher
29058// can be evaluated at a time.
29059Dep.target = null;
29060var targetStack = [];
29061
29062function pushTarget (target) {
29063  targetStack.push(target);
29064  Dep.target = target;
29065}
29066
29067function popTarget () {
29068  targetStack.pop();
29069  Dep.target = targetStack[targetStack.length - 1];
29070}
29071
29072/*  */
29073
29074var VNode = function VNode (
29075  tag,
29076  data,
29077  children,
29078  text,
29079  elm,
29080  context,
29081  componentOptions,
29082  asyncFactory
29083) {
29084  this.tag = tag;
29085  this.data = data;
29086  this.children = children;
29087  this.text = text;
29088  this.elm = elm;
29089  this.ns = undefined;
29090  this.context = context;
29091  this.fnContext = undefined;
29092  this.fnOptions = undefined;
29093  this.fnScopeId = undefined;
29094  this.key = data && data.key;
29095  this.componentOptions = componentOptions;
29096  this.componentInstance = undefined;
29097  this.parent = undefined;
29098  this.raw = false;
29099  this.isStatic = false;
29100  this.isRootInsert = true;
29101  this.isComment = false;
29102  this.isCloned = false;
29103  this.isOnce = false;
29104  this.asyncFactory = asyncFactory;
29105  this.asyncMeta = undefined;
29106  this.isAsyncPlaceholder = false;
29107};
29108
29109var prototypeAccessors = { child: { configurable: true } };
29110
29111// DEPRECATED: alias for componentInstance for backwards compat.
29112/* istanbul ignore next */
29113prototypeAccessors.child.get = function () {
29114  return this.componentInstance
29115};
29116
29117Object.defineProperties( VNode.prototype, prototypeAccessors );
29118
29119var createEmptyVNode = function (text) {
29120  if ( text === void 0 ) text = '';
29121
29122  var node = new VNode();
29123  node.text = text;
29124  node.isComment = true;
29125  return node
29126};
29127
29128function createTextVNode (val) {
29129  return new VNode(undefined, undefined, undefined, String(val))
29130}
29131
29132// optimized shallow clone
29133// used for static nodes and slot nodes because they may be reused across
29134// multiple renders, cloning them avoids errors when DOM manipulations rely
29135// on their elm reference.
29136function cloneVNode (vnode) {
29137  var cloned = new VNode(
29138    vnode.tag,
29139    vnode.data,
29140    // #7975
29141    // clone children array to avoid mutating original in case of cloning
29142    // a child.
29143    vnode.children && vnode.children.slice(),
29144    vnode.text,
29145    vnode.elm,
29146    vnode.context,
29147    vnode.componentOptions,
29148    vnode.asyncFactory
29149  );
29150  cloned.ns = vnode.ns;
29151  cloned.isStatic = vnode.isStatic;
29152  cloned.key = vnode.key;
29153  cloned.isComment = vnode.isComment;
29154  cloned.fnContext = vnode.fnContext;
29155  cloned.fnOptions = vnode.fnOptions;
29156  cloned.fnScopeId = vnode.fnScopeId;
29157  cloned.asyncMeta = vnode.asyncMeta;
29158  cloned.isCloned = true;
29159  return cloned
29160}
29161
29162/*
29163 * not type checking this file because flow doesn't play well with
29164 * dynamically accessing methods on Array prototype
29165 */
29166
29167var arrayProto = Array.prototype;
29168var arrayMethods = Object.create(arrayProto);
29169
29170var methodsToPatch = [
29171  'push',
29172  'pop',
29173  'shift',
29174  'unshift',
29175  'splice',
29176  'sort',
29177  'reverse'
29178];
29179
29180/**
29181 * Intercept mutating methods and emit events
29182 */
29183methodsToPatch.forEach(function (method) {
29184  // cache original method
29185  var original = arrayProto[method];
29186  def(arrayMethods, method, function mutator () {
29187    var args = [], len = arguments.length;
29188    while ( len-- ) args[ len ] = arguments[ len ];
29189
29190    var result = original.apply(this, args);
29191    var ob = this.__ob__;
29192    var inserted;
29193    switch (method) {
29194      case 'push':
29195      case 'unshift':
29196        inserted = args;
29197        break
29198      case 'splice':
29199        inserted = args.slice(2);
29200        break
29201    }
29202    if (inserted) { ob.observeArray(inserted); }
29203    // notify change
29204    ob.dep.notify();
29205    return result
29206  });
29207});
29208
29209/*  */
29210
29211var arrayKeys = Object.getOwnPropertyNames(arrayMethods);
29212
29213/**
29214 * In some cases we may want to disable observation inside a component's
29215 * update computation.
29216 */
29217var shouldObserve = true;
29218
29219function toggleObserving (value) {
29220  shouldObserve = value;
29221}
29222
29223/**
29224 * Observer class that is attached to each observed
29225 * object. Once attached, the observer converts the target
29226 * object's property keys into getter/setters that
29227 * collect dependencies and dispatch updates.
29228 */
29229var Observer = function Observer (value) {
29230  this.value = value;
29231  this.dep = new Dep();
29232  this.vmCount = 0;
29233  def(value, '__ob__', this);
29234  if (Array.isArray(value)) {
29235    if (hasProto) {
29236      protoAugment(value, arrayMethods);
29237    } else {
29238      copyAugment(value, arrayMethods, arrayKeys);
29239    }
29240    this.observeArray(value);
29241  } else {
29242    this.walk(value);
29243  }
29244};
29245
29246/**
29247 * Walk through all properties and convert them into
29248 * getter/setters. This method should only be called when
29249 * value type is Object.
29250 */
29251Observer.prototype.walk = function walk (obj) {
29252  var keys = Object.keys(obj);
29253  for (var i = 0; i < keys.length; i++) {
29254    defineReactive$$1(obj, keys[i]);
29255  }
29256};
29257
29258/**
29259 * Observe a list of Array items.
29260 */
29261Observer.prototype.observeArray = function observeArray (items) {
29262  for (var i = 0, l = items.length; i < l; i++) {
29263    observe(items[i]);
29264  }
29265};
29266
29267// helpers
29268
29269/**
29270 * Augment a target Object or Array by intercepting
29271 * the prototype chain using __proto__
29272 */
29273function protoAugment (target, src) {
29274  /* eslint-disable no-proto */
29275  target.__proto__ = src;
29276  /* eslint-enable no-proto */
29277}
29278
29279/**
29280 * Augment a target Object or Array by defining
29281 * hidden properties.
29282 */
29283/* istanbul ignore next */
29284function copyAugment (target, src, keys) {
29285  for (var i = 0, l = keys.length; i < l; i++) {
29286    var key = keys[i];
29287    def(target, key, src[key]);
29288  }
29289}
29290
29291/**
29292 * Attempt to create an observer instance for a value,
29293 * returns the new observer if successfully observed,
29294 * or the existing observer if the value already has one.
29295 */
29296function observe (value, asRootData) {
29297  if (!isObject(value) || value instanceof VNode) {
29298    return
29299  }
29300  var ob;
29301  if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {
29302    ob = value.__ob__;
29303  } else if (
29304    shouldObserve &&
29305    !isServerRendering() &&
29306    (Array.isArray(value) || isPlainObject(value)) &&
29307    Object.isExtensible(value) &&
29308    !value._isVue
29309  ) {
29310    ob = new Observer(value);
29311  }
29312  if (asRootData && ob) {
29313    ob.vmCount++;
29314  }
29315  return ob
29316}
29317
29318/**
29319 * Define a reactive property on an Object.
29320 */
29321function defineReactive$$1 (
29322  obj,
29323  key,
29324  val,
29325  customSetter,
29326  shallow
29327) {
29328  var dep = new Dep();
29329
29330  var property = Object.getOwnPropertyDescriptor(obj, key);
29331  if (property && property.configurable === false) {
29332    return
29333  }
29334
29335  // cater for pre-defined getter/setters
29336  var getter = property && property.get;
29337  var setter = property && property.set;
29338  if ((!getter || setter) && arguments.length === 2) {
29339    val = obj[key];
29340  }
29341
29342  var childOb = !shallow && observe(val);
29343  Object.defineProperty(obj, key, {
29344    enumerable: true,
29345    configurable: true,
29346    get: function reactiveGetter () {
29347      var value = getter ? getter.call(obj) : val;
29348      if (Dep.target) {
29349        dep.depend();
29350        if (childOb) {
29351          childOb.dep.depend();
29352          if (Array.isArray(value)) {
29353            dependArray(value);
29354          }
29355        }
29356      }
29357      return value
29358    },
29359    set: function reactiveSetter (newVal) {
29360      var value = getter ? getter.call(obj) : val;
29361      /* eslint-disable no-self-compare */
29362      if (newVal === value || (newVal !== newVal && value !== value)) {
29363        return
29364      }
29365      /* eslint-enable no-self-compare */
29366      if ( true && customSetter) {
29367        customSetter();
29368      }
29369      // #7981: for accessor properties without setter
29370      if (getter && !setter) { return }
29371      if (setter) {
29372        setter.call(obj, newVal);
29373      } else {
29374        val = newVal;
29375      }
29376      childOb = !shallow && observe(newVal);
29377      dep.notify();
29378    }
29379  });
29380}
29381
29382/**
29383 * Set a property on an object. Adds the new property and
29384 * triggers change notification if the property doesn't
29385 * already exist.
29386 */
29387function set (target, key, val) {
29388  if ( true &&
29389    (isUndef(target) || isPrimitive(target))
29390  ) {
29391    warn(("Cannot set reactive property on undefined, null, or primitive value: " + ((target))));
29392  }
29393  if (Array.isArray(target) && isValidArrayIndex(key)) {
29394    target.length = Math.max(target.length, key);
29395    target.splice(key, 1, val);
29396    return val
29397  }
29398  if (key in target && !(key in Object.prototype)) {
29399    target[key] = val;
29400    return val
29401  }
29402  var ob = (target).__ob__;
29403  if (target._isVue || (ob && ob.vmCount)) {
29404     true && warn(
29405      'Avoid adding reactive properties to a Vue instance or its root $data ' +
29406      'at runtime - declare it upfront in the data option.'
29407    );
29408    return val
29409  }
29410  if (!ob) {
29411    target[key] = val;
29412    return val
29413  }
29414  defineReactive$$1(ob.value, key, val);
29415  ob.dep.notify();
29416  return val
29417}
29418
29419/**
29420 * Delete a property and trigger change if necessary.
29421 */
29422function del (target, key) {
29423  if ( true &&
29424    (isUndef(target) || isPrimitive(target))
29425  ) {
29426    warn(("Cannot delete reactive property on undefined, null, or primitive value: " + ((target))));
29427  }
29428  if (Array.isArray(target) && isValidArrayIndex(key)) {
29429    target.splice(key, 1);
29430    return
29431  }
29432  var ob = (target).__ob__;
29433  if (target._isVue || (ob && ob.vmCount)) {
29434     true && warn(
29435      'Avoid deleting properties on a Vue instance or its root $data ' +
29436      '- just set it to null.'
29437    );
29438    return
29439  }
29440  if (!hasOwn(target, key)) {
29441    return
29442  }
29443  delete target[key];
29444  if (!ob) {
29445    return
29446  }
29447  ob.dep.notify();
29448}
29449
29450/**
29451 * Collect dependencies on array elements when the array is touched, since
29452 * we cannot intercept array element access like property getters.
29453 */
29454function dependArray (value) {
29455  for (var e = (void 0), i = 0, l = value.length; i < l; i++) {
29456    e = value[i];
29457    e && e.__ob__ && e.__ob__.dep.depend();
29458    if (Array.isArray(e)) {
29459      dependArray(e);
29460    }
29461  }
29462}
29463
29464/*  */
29465
29466/**
29467 * Option overwriting strategies are functions that handle
29468 * how to merge a parent option value and a child option
29469 * value into the final value.
29470 */
29471var strats = config.optionMergeStrategies;
29472
29473/**
29474 * Options with restrictions
29475 */
29476if (true) {
29477  strats.el = strats.propsData = function (parent, child, vm, key) {
29478    if (!vm) {
29479      warn(
29480        "option \"" + key + "\" can only be used during instance " +
29481        'creation with the `new` keyword.'
29482      );
29483    }
29484    return defaultStrat(parent, child)
29485  };
29486}
29487
29488/**
29489 * Helper that recursively merges two data objects together.
29490 */
29491function mergeData (to, from) {
29492  if (!from) { return to }
29493  var key, toVal, fromVal;
29494
29495  var keys = hasSymbol
29496    ? Reflect.ownKeys(from)
29497    : Object.keys(from);
29498
29499  for (var i = 0; i < keys.length; i++) {
29500    key = keys[i];
29501    // in case the object is already observed...
29502    if (key === '__ob__') { continue }
29503    toVal = to[key];
29504    fromVal = from[key];
29505    if (!hasOwn(to, key)) {
29506      set(to, key, fromVal);
29507    } else if (
29508      toVal !== fromVal &&
29509      isPlainObject(toVal) &&
29510      isPlainObject(fromVal)
29511    ) {
29512      mergeData(toVal, fromVal);
29513    }
29514  }
29515  return to
29516}
29517
29518/**
29519 * Data
29520 */
29521function mergeDataOrFn (
29522  parentVal,
29523  childVal,
29524  vm
29525) {
29526  if (!vm) {
29527    // in a Vue.extend merge, both should be functions
29528    if (!childVal) {
29529      return parentVal
29530    }
29531    if (!parentVal) {
29532      return childVal
29533    }
29534    // when parentVal & childVal are both present,
29535    // we need to return a function that returns the
29536    // merged result of both functions... no need to
29537    // check if parentVal is a function here because
29538    // it has to be a function to pass previous merges.
29539    return function mergedDataFn () {
29540      return mergeData(
29541        typeof childVal === 'function' ? childVal.call(this, this) : childVal,
29542        typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal
29543      )
29544    }
29545  } else {
29546    return function mergedInstanceDataFn () {
29547      // instance merge
29548      var instanceData = typeof childVal === 'function'
29549        ? childVal.call(vm, vm)
29550        : childVal;
29551      var defaultData = typeof parentVal === 'function'
29552        ? parentVal.call(vm, vm)
29553        : parentVal;
29554      if (instanceData) {
29555        return mergeData(instanceData, defaultData)
29556      } else {
29557        return defaultData
29558      }
29559    }
29560  }
29561}
29562
29563strats.data = function (
29564  parentVal,
29565  childVal,
29566  vm
29567) {
29568  if (!vm) {
29569    if (childVal && typeof childVal !== 'function') {
29570       true && warn(
29571        'The "data" option should be a function ' +
29572        'that returns a per-instance value in component ' +
29573        'definitions.',
29574        vm
29575      );
29576
29577      return parentVal
29578    }
29579    return mergeDataOrFn(parentVal, childVal)
29580  }
29581
29582  return mergeDataOrFn(parentVal, childVal, vm)
29583};
29584
29585/**
29586 * Hooks and props are merged as arrays.
29587 */
29588function mergeHook (
29589  parentVal,
29590  childVal
29591) {
29592  var res = childVal
29593    ? parentVal
29594      ? parentVal.concat(childVal)
29595      : Array.isArray(childVal)
29596        ? childVal
29597        : [childVal]
29598    : parentVal;
29599  return res
29600    ? dedupeHooks(res)
29601    : res
29602}
29603
29604function dedupeHooks (hooks) {
29605  var res = [];
29606  for (var i = 0; i < hooks.length; i++) {
29607    if (res.indexOf(hooks[i]) === -1) {
29608      res.push(hooks[i]);
29609    }
29610  }
29611  return res
29612}
29613
29614LIFECYCLE_HOOKS.forEach(function (hook) {
29615  strats[hook] = mergeHook;
29616});
29617
29618/**
29619 * Assets
29620 *
29621 * When a vm is present (instance creation), we need to do
29622 * a three-way merge between constructor options, instance
29623 * options and parent options.
29624 */
29625function mergeAssets (
29626  parentVal,
29627  childVal,
29628  vm,
29629  key
29630) {
29631  var res = Object.create(parentVal || null);
29632  if (childVal) {
29633     true && assertObjectType(key, childVal, vm);
29634    return extend(res, childVal)
29635  } else {
29636    return res
29637  }
29638}
29639
29640ASSET_TYPES.forEach(function (type) {
29641  strats[type + 's'] = mergeAssets;
29642});
29643
29644/**
29645 * Watchers.
29646 *
29647 * Watchers hashes should not overwrite one
29648 * another, so we merge them as arrays.
29649 */
29650strats.watch = function (
29651  parentVal,
29652  childVal,
29653  vm,
29654  key
29655) {
29656  // work around Firefox's Object.prototype.watch...
29657  if (parentVal === nativeWatch) { parentVal = undefined; }
29658  if (childVal === nativeWatch) { childVal = undefined; }
29659  /* istanbul ignore if */
29660  if (!childVal) { return Object.create(parentVal || null) }
29661  if (true) {
29662    assertObjectType(key, childVal, vm);
29663  }
29664  if (!parentVal) { return childVal }
29665  var ret = {};
29666  extend(ret, parentVal);
29667  for (var key$1 in childVal) {
29668    var parent = ret[key$1];
29669    var child = childVal[key$1];
29670    if (parent && !Array.isArray(parent)) {
29671      parent = [parent];
29672    }
29673    ret[key$1] = parent
29674      ? parent.concat(child)
29675      : Array.isArray(child) ? child : [child];
29676  }
29677  return ret
29678};
29679
29680/**
29681 * Other object hashes.
29682 */
29683strats.props =
29684strats.methods =
29685strats.inject =
29686strats.computed = function (
29687  parentVal,
29688  childVal,
29689  vm,
29690  key
29691) {
29692  if (childVal && "development" !== 'production') {
29693    assertObjectType(key, childVal, vm);
29694  }
29695  if (!parentVal) { return childVal }
29696  var ret = Object.create(null);
29697  extend(ret, parentVal);
29698  if (childVal) { extend(ret, childVal); }
29699  return ret
29700};
29701strats.provide = mergeDataOrFn;
29702
29703/**
29704 * Default strategy.
29705 */
29706var defaultStrat = function (parentVal, childVal) {
29707  return childVal === undefined
29708    ? parentVal
29709    : childVal
29710};
29711
29712/**
29713 * Validate component names
29714 */
29715function checkComponents (options) {
29716  for (var key in options.components) {
29717    validateComponentName(key);
29718  }
29719}
29720
29721function validateComponentName (name) {
29722  if (!new RegExp(("^[a-zA-Z][\\-\\.0-9_" + (unicodeRegExp.source) + "]*$")).test(name)) {
29723    warn(
29724      'Invalid component name: "' + name + '". Component names ' +
29725      'should conform to valid custom element name in html5 specification.'
29726    );
29727  }
29728  if (isBuiltInTag(name) || config.isReservedTag(name)) {
29729    warn(
29730      'Do not use built-in or reserved HTML elements as component ' +
29731      'id: ' + name
29732    );
29733  }
29734}
29735
29736/**
29737 * Ensure all props option syntax are normalized into the
29738 * Object-based format.
29739 */
29740function normalizeProps (options, vm) {
29741  var props = options.props;
29742  if (!props) { return }
29743  var res = {};
29744  var i, val, name;
29745  if (Array.isArray(props)) {
29746    i = props.length;
29747    while (i--) {
29748      val = props[i];
29749      if (typeof val === 'string') {
29750        name = camelize(val);
29751        res[name] = { type: null };
29752      } else if (true) {
29753        warn('props must be strings when using array syntax.');
29754      }
29755    }
29756  } else if (isPlainObject(props)) {
29757    for (var key in props) {
29758      val = props[key];
29759      name = camelize(key);
29760      res[name] = isPlainObject(val)
29761        ? val
29762        : { type: val };
29763    }
29764  } else if (true) {
29765    warn(
29766      "Invalid value for option \"props\": expected an Array or an Object, " +
29767      "but got " + (toRawType(props)) + ".",
29768      vm
29769    );
29770  }
29771  options.props = res;
29772}
29773
29774/**
29775 * Normalize all injections into Object-based format
29776 */
29777function normalizeInject (options, vm) {
29778  var inject = options.inject;
29779  if (!inject) { return }
29780  var normalized = options.inject = {};
29781  if (Array.isArray(inject)) {
29782    for (var i = 0; i < inject.length; i++) {
29783      normalized[inject[i]] = { from: inject[i] };
29784    }
29785  } else if (isPlainObject(inject)) {
29786    for (var key in inject) {
29787      var val = inject[key];
29788      normalized[key] = isPlainObject(val)
29789        ? extend({ from: key }, val)
29790        : { from: val };
29791    }
29792  } else if (true) {
29793    warn(
29794      "Invalid value for option \"inject\": expected an Array or an Object, " +
29795      "but got " + (toRawType(inject)) + ".",
29796      vm
29797    );
29798  }
29799}
29800
29801/**
29802 * Normalize raw function directives into object format.
29803 */
29804function normalizeDirectives (options) {
29805  var dirs = options.directives;
29806  if (dirs) {
29807    for (var key in dirs) {
29808      var def$$1 = dirs[key];
29809      if (typeof def$$1 === 'function') {
29810        dirs[key] = { bind: def$$1, update: def$$1 };
29811      }
29812    }
29813  }
29814}
29815
29816function assertObjectType (name, value, vm) {
29817  if (!isPlainObject(value)) {
29818    warn(
29819      "Invalid value for option \"" + name + "\": expected an Object, " +
29820      "but got " + (toRawType(value)) + ".",
29821      vm
29822    );
29823  }
29824}
29825
29826/**
29827 * Merge two option objects into a new one.
29828 * Core utility used in both instantiation and inheritance.
29829 */
29830function mergeOptions (
29831  parent,
29832  child,
29833  vm
29834) {
29835  if (true) {
29836    checkComponents(child);
29837  }
29838
29839  if (typeof child === 'function') {
29840    child = child.options;
29841  }
29842
29843  normalizeProps(child, vm);
29844  normalizeInject(child, vm);
29845  normalizeDirectives(child);
29846
29847  // Apply extends and mixins on the child options,
29848  // but only if it is a raw options object that isn't
29849  // the result of another mergeOptions call.
29850  // Only merged options has the _base property.
29851  if (!child._base) {
29852    if (child.extends) {
29853      parent = mergeOptions(parent, child.extends, vm);
29854    }
29855    if (child.mixins) {
29856      for (var i = 0, l = child.mixins.length; i < l; i++) {
29857        parent = mergeOptions(parent, child.mixins[i], vm);
29858      }
29859    }
29860  }
29861
29862  var options = {};
29863  var key;
29864  for (key in parent) {
29865    mergeField(key);
29866  }
29867  for (key in child) {
29868    if (!hasOwn(parent, key)) {
29869      mergeField(key);
29870    }
29871  }
29872  function mergeField (key) {
29873    var strat = strats[key] || defaultStrat;
29874    options[key] = strat(parent[key], child[key], vm, key);
29875  }
29876  return options
29877}
29878
29879/**
29880 * Resolve an asset.
29881 * This function is used because child instances need access
29882 * to assets defined in its ancestor chain.
29883 */
29884function resolveAsset (
29885  options,
29886  type,
29887  id,
29888  warnMissing
29889) {
29890  /* istanbul ignore if */
29891  if (typeof id !== 'string') {
29892    return
29893  }
29894  var assets = options[type];
29895  // check local registration variations first
29896  if (hasOwn(assets, id)) { return assets[id] }
29897  var camelizedId = camelize(id);
29898  if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }
29899  var PascalCaseId = capitalize(camelizedId);
29900  if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }
29901  // fallback to prototype chain
29902  var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];
29903  if ( true && warnMissing && !res) {
29904    warn(
29905      'Failed to resolve ' + type.slice(0, -1) + ': ' + id,
29906      options
29907    );
29908  }
29909  return res
29910}
29911
29912/*  */
29913
29914
29915
29916function validateProp (
29917  key,
29918  propOptions,
29919  propsData,
29920  vm
29921) {
29922  var prop = propOptions[key];
29923  var absent = !hasOwn(propsData, key);
29924  var value = propsData[key];
29925  // boolean casting
29926  var booleanIndex = getTypeIndex(Boolean, prop.type);
29927  if (booleanIndex > -1) {
29928    if (absent && !hasOwn(prop, 'default')) {
29929      value = false;
29930    } else if (value === '' || value === hyphenate(key)) {
29931      // only cast empty string / same name to boolean if
29932      // boolean has higher priority
29933      var stringIndex = getTypeIndex(String, prop.type);
29934      if (stringIndex < 0 || booleanIndex < stringIndex) {
29935        value = true;
29936      }
29937    }
29938  }
29939  // check default value
29940  if (value === undefined) {
29941    value = getPropDefaultValue(vm, prop, key);
29942    // since the default value is a fresh copy,
29943    // make sure to observe it.
29944    var prevShouldObserve = shouldObserve;
29945    toggleObserving(true);
29946    observe(value);
29947    toggleObserving(prevShouldObserve);
29948  }
29949  if (
29950    true
29951  ) {
29952    assertProp(prop, key, value, vm, absent);
29953  }
29954  return value
29955}
29956
29957/**
29958 * Get the default value of a prop.
29959 */
29960function getPropDefaultValue (vm, prop, key) {
29961  // no default, return undefined
29962  if (!hasOwn(prop, 'default')) {
29963    return undefined
29964  }
29965  var def = prop.default;
29966  // warn against non-factory defaults for Object & Array
29967  if ( true && isObject(def)) {
29968    warn(
29969      'Invalid default value for prop "' + key + '": ' +
29970      'Props with type Object/Array must use a factory function ' +
29971      'to return the default value.',
29972      vm
29973    );
29974  }
29975  // the raw prop value was also undefined from previous render,
29976  // return previous default value to avoid unnecessary watcher trigger
29977  if (vm && vm.$options.propsData &&
29978    vm.$options.propsData[key] === undefined &&
29979    vm._props[key] !== undefined
29980  ) {
29981    return vm._props[key]
29982  }
29983  // call factory function for non-Function types
29984  // a value is Function if its prototype is function even across different execution context
29985  return typeof def === 'function' && getType(prop.type) !== 'Function'
29986    ? def.call(vm)
29987    : def
29988}
29989
29990/**
29991 * Assert whether a prop is valid.
29992 */
29993function assertProp (
29994  prop,
29995  name,
29996  value,
29997  vm,
29998  absent
29999) {
30000  if (prop.required && absent) {
30001    warn(
30002      'Missing required prop: "' + name + '"',
30003      vm
30004    );
30005    return
30006  }
30007  if (value == null && !prop.required) {
30008    return
30009  }
30010  var type = prop.type;
30011  var valid = !type || type === true;
30012  var expectedTypes = [];
30013  if (type) {
30014    if (!Array.isArray(type)) {
30015      type = [type];
30016    }
30017    for (var i = 0; i < type.length && !valid; i++) {
30018      var assertedType = assertType(value, type[i], vm);
30019      expectedTypes.push(assertedType.expectedType || '');
30020      valid = assertedType.valid;
30021    }
30022  }
30023
30024  var haveExpectedTypes = expectedTypes.some(function (t) { return t; });
30025  if (!valid && haveExpectedTypes) {
30026    warn(
30027      getInvalidTypeMessage(name, value, expectedTypes),
30028      vm
30029    );
30030    return
30031  }
30032  var validator = prop.validator;
30033  if (validator) {
30034    if (!validator(value)) {
30035      warn(
30036        'Invalid prop: custom validator check failed for prop "' + name + '".',
30037        vm
30038      );
30039    }
30040  }
30041}
30042
30043var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol|BigInt)$/;
30044
30045function assertType (value, type, vm) {
30046  var valid;
30047  var expectedType = getType(type);
30048  if (simpleCheckRE.test(expectedType)) {
30049    var t = typeof value;
30050    valid = t === expectedType.toLowerCase();
30051    // for primitive wrapper objects
30052    if (!valid && t === 'object') {
30053      valid = value instanceof type;
30054    }
30055  } else if (expectedType === 'Object') {
30056    valid = isPlainObject(value);
30057  } else if (expectedType === 'Array') {
30058    valid = Array.isArray(value);
30059  } else {
30060    try {
30061      valid = value instanceof type;
30062    } catch (e) {
30063      warn('Invalid prop type: "' + String(type) + '" is not a constructor', vm);
30064      valid = false;
30065    }
30066  }
30067  return {
30068    valid: valid,
30069    expectedType: expectedType
30070  }
30071}
30072
30073var functionTypeCheckRE = /^\s*function (\w+)/;
30074
30075/**
30076 * Use function string name to check built-in types,
30077 * because a simple equality check will fail when running
30078 * across different vms / iframes.
30079 */
30080function getType (fn) {
30081  var match = fn && fn.toString().match(functionTypeCheckRE);
30082  return match ? match[1] : ''
30083}
30084
30085function isSameType (a, b) {
30086  return getType(a) === getType(b)
30087}
30088
30089function getTypeIndex (type, expectedTypes) {
30090  if (!Array.isArray(expectedTypes)) {
30091    return isSameType(expectedTypes, type) ? 0 : -1
30092  }
30093  for (var i = 0, len = expectedTypes.length; i < len; i++) {
30094    if (isSameType(expectedTypes[i], type)) {
30095      return i
30096    }
30097  }
30098  return -1
30099}
30100
30101function getInvalidTypeMessage (name, value, expectedTypes) {
30102  var message = "Invalid prop: type check failed for prop \"" + name + "\"." +
30103    " Expected " + (expectedTypes.map(capitalize).join(', '));
30104  var expectedType = expectedTypes[0];
30105  var receivedType = toRawType(value);
30106  // check if we need to specify expected value
30107  if (
30108    expectedTypes.length === 1 &&
30109    isExplicable(expectedType) &&
30110    isExplicable(typeof value) &&
30111    !isBoolean(expectedType, receivedType)
30112  ) {
30113    message += " with value " + (styleValue(value, expectedType));
30114  }
30115  message += ", got " + receivedType + " ";
30116  // check if we need to specify received value
30117  if (isExplicable(receivedType)) {
30118    message += "with value " + (styleValue(value, receivedType)) + ".";
30119  }
30120  return message
30121}
30122
30123function styleValue (value, type) {
30124  if (type === 'String') {
30125    return ("\"" + value + "\"")
30126  } else if (type === 'Number') {
30127    return ("" + (Number(value)))
30128  } else {
30129    return ("" + value)
30130  }
30131}
30132
30133var EXPLICABLE_TYPES = ['string', 'number', 'boolean'];
30134function isExplicable (value) {
30135  return EXPLICABLE_TYPES.some(function (elem) { return value.toLowerCase() === elem; })
30136}
30137
30138function isBoolean () {
30139  var args = [], len = arguments.length;
30140  while ( len-- ) args[ len ] = arguments[ len ];
30141
30142  return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })
30143}
30144
30145/*  */
30146
30147function handleError (err, vm, info) {
30148  // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.
30149  // See: https://github.com/vuejs/vuex/issues/1505
30150  pushTarget();
30151  try {
30152    if (vm) {
30153      var cur = vm;
30154      while ((cur = cur.$parent)) {
30155        var hooks = cur.$options.errorCaptured;
30156        if (hooks) {
30157          for (var i = 0; i < hooks.length; i++) {
30158            try {
30159              var capture = hooks[i].call(cur, err, vm, info) === false;
30160              if (capture) { return }
30161            } catch (e) {
30162              globalHandleError(e, cur, 'errorCaptured hook');
30163            }
30164          }
30165        }
30166      }
30167    }
30168    globalHandleError(err, vm, info);
30169  } finally {
30170    popTarget();
30171  }
30172}
30173
30174function invokeWithErrorHandling (
30175  handler,
30176  context,
30177  args,
30178  vm,
30179  info
30180) {
30181  var res;
30182  try {
30183    res = args ? handler.apply(context, args) : handler.call(context);
30184    if (res && !res._isVue && isPromise(res) && !res._handled) {
30185      res.catch(function (e) { return handleError(e, vm, info + " (Promise/async)"); });
30186      // issue #9511
30187      // avoid catch triggering multiple times when nested calls
30188      res._handled = true;
30189    }
30190  } catch (e) {
30191    handleError(e, vm, info);
30192  }
30193  return res
30194}
30195
30196function globalHandleError (err, vm, info) {
30197  if (config.errorHandler) {
30198    try {
30199      return config.errorHandler.call(null, err, vm, info)
30200    } catch (e) {
30201      // if the user intentionally throws the original error in the handler,
30202      // do not log it twice
30203      if (e !== err) {
30204        logError(e, null, 'config.errorHandler');
30205      }
30206    }
30207  }
30208  logError(err, vm, info);
30209}
30210
30211function logError (err, vm, info) {
30212  if (true) {
30213    warn(("Error in " + info + ": \"" + (err.toString()) + "\""), vm);
30214  }
30215  /* istanbul ignore else */
30216  if ((inBrowser || inWeex) && typeof console !== 'undefined') {
30217    console.error(err);
30218  } else {
30219    throw err
30220  }
30221}
30222
30223/*  */
30224
30225var isUsingMicroTask = false;
30226
30227var callbacks = [];
30228var pending = false;
30229
30230function flushCallbacks () {
30231  pending = false;
30232  var copies = callbacks.slice(0);
30233  callbacks.length = 0;
30234  for (var i = 0; i < copies.length; i++) {
30235    copies[i]();
30236  }
30237}
30238
30239// Here we have async deferring wrappers using microtasks.
30240// In 2.5 we used (macro) tasks (in combination with microtasks).
30241// However, it has subtle problems when state is changed right before repaint
30242// (e.g. #6813, out-in transitions).
30243// Also, using (macro) tasks in event handler would cause some weird behaviors
30244// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).
30245// So we now use microtasks everywhere, again.
30246// A major drawback of this tradeoff is that there are some scenarios
30247// where microtasks have too high a priority and fire in between supposedly
30248// sequential events (e.g. #4521, #6690, which have workarounds)
30249// or even between bubbling of the same event (#6566).
30250var timerFunc;
30251
30252// The nextTick behavior leverages the microtask queue, which can be accessed
30253// via either native Promise.then or MutationObserver.
30254// MutationObserver has wider support, however it is seriously bugged in
30255// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It
30256// completely stops working after triggering a few times... so, if native
30257// Promise is available, we will use it:
30258/* istanbul ignore next, $flow-disable-line */
30259if (typeof Promise !== 'undefined' && isNative(Promise)) {
30260  var p = Promise.resolve();
30261  timerFunc = function () {
30262    p.then(flushCallbacks);
30263    // In problematic UIWebViews, Promise.then doesn't completely break, but
30264    // it can get stuck in a weird state where callbacks are pushed into the
30265    // microtask queue but the queue isn't being flushed, until the browser
30266    // needs to do some other work, e.g. handle a timer. Therefore we can
30267    // "force" the microtask queue to be flushed by adding an empty timer.
30268    if (isIOS) { setTimeout(noop); }
30269  };
30270  isUsingMicroTask = true;
30271} else if (!isIE && typeof MutationObserver !== 'undefined' && (
30272  isNative(MutationObserver) ||
30273  // PhantomJS and iOS 7.x
30274  MutationObserver.toString() === '[object MutationObserverConstructor]'
30275)) {
30276  // Use MutationObserver where native Promise is not available,
30277  // e.g. PhantomJS, iOS7, Android 4.4
30278  // (#6466 MutationObserver is unreliable in IE11)
30279  var counter = 1;
30280  var observer = new MutationObserver(flushCallbacks);
30281  var textNode = document.createTextNode(String(counter));
30282  observer.observe(textNode, {
30283    characterData: true
30284  });
30285  timerFunc = function () {
30286    counter = (counter + 1) % 2;
30287    textNode.data = String(counter);
30288  };
30289  isUsingMicroTask = true;
30290} else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {
30291  // Fallback to setImmediate.
30292  // Technically it leverages the (macro) task queue,
30293  // but it is still a better choice than setTimeout.
30294  timerFunc = function () {
30295    setImmediate(flushCallbacks);
30296  };
30297} else {
30298  // Fallback to setTimeout.
30299  timerFunc = function () {
30300    setTimeout(flushCallbacks, 0);
30301  };
30302}
30303
30304function nextTick (cb, ctx) {
30305  var _resolve;
30306  callbacks.push(function () {
30307    if (cb) {
30308      try {
30309        cb.call(ctx);
30310      } catch (e) {
30311        handleError(e, ctx, 'nextTick');
30312      }
30313    } else if (_resolve) {
30314      _resolve(ctx);
30315    }
30316  });
30317  if (!pending) {
30318    pending = true;
30319    timerFunc();
30320  }
30321  // $flow-disable-line
30322  if (!cb && typeof Promise !== 'undefined') {
30323    return new Promise(function (resolve) {
30324      _resolve = resolve;
30325    })
30326  }
30327}
30328
30329/*  */
30330
30331var mark;
30332var measure;
30333
30334if (true) {
30335  var perf = inBrowser && window.performance;
30336  /* istanbul ignore if */
30337  if (
30338    perf &&
30339    perf.mark &&
30340    perf.measure &&
30341    perf.clearMarks &&
30342    perf.clearMeasures
30343  ) {
30344    mark = function (tag) { return perf.mark(tag); };
30345    measure = function (name, startTag, endTag) {
30346      perf.measure(name, startTag, endTag);
30347      perf.clearMarks(startTag);
30348      perf.clearMarks(endTag);
30349      // perf.clearMeasures(name)
30350    };
30351  }
30352}
30353
30354/* not type checking this file because flow doesn't play well with Proxy */
30355
30356var initProxy;
30357
30358if (true) {
30359  var allowedGlobals = makeMap(
30360    'Infinity,undefined,NaN,isFinite,isNaN,' +
30361    'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
30362    'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,' +
30363    'require' // for Webpack/Browserify
30364  );
30365
30366  var warnNonPresent = function (target, key) {
30367    warn(
30368      "Property or method \"" + key + "\" is not defined on the instance but " +
30369      'referenced during render. Make sure that this property is reactive, ' +
30370      'either in the data option, or for class-based components, by ' +
30371      'initializing the property. ' +
30372      'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',
30373      target
30374    );
30375  };
30376
30377  var warnReservedPrefix = function (target, key) {
30378    warn(
30379      "Property \"" + key + "\" must be accessed with \"$data." + key + "\" because " +
30380      'properties starting with "$" or "_" are not proxied in the Vue instance to ' +
30381      'prevent conflicts with Vue internals. ' +
30382      'See: https://vuejs.org/v2/api/#data',
30383      target
30384    );
30385  };
30386
30387  var hasProxy =
30388    typeof Proxy !== 'undefined' && isNative(Proxy);
30389
30390  if (hasProxy) {
30391    var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');
30392    config.keyCodes = new Proxy(config.keyCodes, {
30393      set: function set (target, key, value) {
30394        if (isBuiltInModifier(key)) {
30395          warn(("Avoid overwriting built-in modifier in config.keyCodes: ." + key));
30396          return false
30397        } else {
30398          target[key] = value;
30399          return true
30400        }
30401      }
30402    });
30403  }
30404
30405  var hasHandler = {
30406    has: function has (target, key) {
30407      var has = key in target;
30408      var isAllowed = allowedGlobals(key) ||
30409        (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));
30410      if (!has && !isAllowed) {
30411        if (key in target.$data) { warnReservedPrefix(target, key); }
30412        else { warnNonPresent(target, key); }
30413      }
30414      return has || !isAllowed
30415    }
30416  };
30417
30418  var getHandler = {
30419    get: function get (target, key) {
30420      if (typeof key === 'string' && !(key in target)) {
30421        if (key in target.$data) { warnReservedPrefix(target, key); }
30422        else { warnNonPresent(target, key); }
30423      }
30424      return target[key]
30425    }
30426  };
30427
30428  initProxy = function initProxy (vm) {
30429    if (hasProxy) {
30430      // determine which proxy handler to use
30431      var options = vm.$options;
30432      var handlers = options.render && options.render._withStripped
30433        ? getHandler
30434        : hasHandler;
30435      vm._renderProxy = new Proxy(vm, handlers);
30436    } else {
30437      vm._renderProxy = vm;
30438    }
30439  };
30440}
30441
30442/*  */
30443
30444var seenObjects = new _Set();
30445
30446/**
30447 * Recursively traverse an object to evoke all converted
30448 * getters, so that every nested property inside the object
30449 * is collected as a "deep" dependency.
30450 */
30451function traverse (val) {
30452  _traverse(val, seenObjects);
30453  seenObjects.clear();
30454}
30455
30456function _traverse (val, seen) {
30457  var i, keys;
30458  var isA = Array.isArray(val);
30459  if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {
30460    return
30461  }
30462  if (val.__ob__) {
30463    var depId = val.__ob__.dep.id;
30464    if (seen.has(depId)) {
30465      return
30466    }
30467    seen.add(depId);
30468  }
30469  if (isA) {
30470    i = val.length;
30471    while (i--) { _traverse(val[i], seen); }
30472  } else {
30473    keys = Object.keys(val);
30474    i = keys.length;
30475    while (i--) { _traverse(val[keys[i]], seen); }
30476  }
30477}
30478
30479/*  */
30480
30481var normalizeEvent = cached(function (name) {
30482  var passive = name.charAt(0) === '&';
30483  name = passive ? name.slice(1) : name;
30484  var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first
30485  name = once$$1 ? name.slice(1) : name;
30486  var capture = name.charAt(0) === '!';
30487  name = capture ? name.slice(1) : name;
30488  return {
30489    name: name,
30490    once: once$$1,
30491    capture: capture,
30492    passive: passive
30493  }
30494});
30495
30496function createFnInvoker (fns, vm) {
30497  function invoker () {
30498    var arguments$1 = arguments;
30499
30500    var fns = invoker.fns;
30501    if (Array.isArray(fns)) {
30502      var cloned = fns.slice();
30503      for (var i = 0; i < cloned.length; i++) {
30504        invokeWithErrorHandling(cloned[i], null, arguments$1, vm, "v-on handler");
30505      }
30506    } else {
30507      // return handler return value for single handlers
30508      return invokeWithErrorHandling(fns, null, arguments, vm, "v-on handler")
30509    }
30510  }
30511  invoker.fns = fns;
30512  return invoker
30513}
30514
30515function updateListeners (
30516  on,
30517  oldOn,
30518  add,
30519  remove$$1,
30520  createOnceHandler,
30521  vm
30522) {
30523  var name, def$$1, cur, old, event;
30524  for (name in on) {
30525    def$$1 = cur = on[name];
30526    old = oldOn[name];
30527    event = normalizeEvent(name);
30528    if (isUndef(cur)) {
30529       true && warn(
30530        "Invalid handler for event \"" + (event.name) + "\": got " + String(cur),
30531        vm
30532      );
30533    } else if (isUndef(old)) {
30534      if (isUndef(cur.fns)) {
30535        cur = on[name] = createFnInvoker(cur, vm);
30536      }
30537      if (isTrue(event.once)) {
30538        cur = on[name] = createOnceHandler(event.name, cur, event.capture);
30539      }
30540      add(event.name, cur, event.capture, event.passive, event.params);
30541    } else if (cur !== old) {
30542      old.fns = cur;
30543      on[name] = old;
30544    }
30545  }
30546  for (name in oldOn) {
30547    if (isUndef(on[name])) {
30548      event = normalizeEvent(name);
30549      remove$$1(event.name, oldOn[name], event.capture);
30550    }
30551  }
30552}
30553
30554/*  */
30555
30556function mergeVNodeHook (def, hookKey, hook) {
30557  if (def instanceof VNode) {
30558    def = def.data.hook || (def.data.hook = {});
30559  }
30560  var invoker;
30561  var oldHook = def[hookKey];
30562
30563  function wrappedHook () {
30564    hook.apply(this, arguments);
30565    // important: remove merged hook to ensure it's called only once
30566    // and prevent memory leak
30567    remove(invoker.fns, wrappedHook);
30568  }
30569
30570  if (isUndef(oldHook)) {
30571    // no existing hook
30572    invoker = createFnInvoker([wrappedHook]);
30573  } else {
30574    /* istanbul ignore if */
30575    if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {
30576      // already a merged invoker
30577      invoker = oldHook;
30578      invoker.fns.push(wrappedHook);
30579    } else {
30580      // existing plain hook
30581      invoker = createFnInvoker([oldHook, wrappedHook]);
30582    }
30583  }
30584
30585  invoker.merged = true;
30586  def[hookKey] = invoker;
30587}
30588
30589/*  */
30590
30591function extractPropsFromVNodeData (
30592  data,
30593  Ctor,
30594  tag
30595) {
30596  // we are only extracting raw values here.
30597  // validation and default values are handled in the child
30598  // component itself.
30599  var propOptions = Ctor.options.props;
30600  if (isUndef(propOptions)) {
30601    return
30602  }
30603  var res = {};
30604  var attrs = data.attrs;
30605  var props = data.props;
30606  if (isDef(attrs) || isDef(props)) {
30607    for (var key in propOptions) {
30608      var altKey = hyphenate(key);
30609      if (true) {
30610        var keyInLowerCase = key.toLowerCase();
30611        if (
30612          key !== keyInLowerCase &&
30613          attrs && hasOwn(attrs, keyInLowerCase)
30614        ) {
30615          tip(
30616            "Prop \"" + keyInLowerCase + "\" is passed to component " +
30617            (formatComponentName(tag || Ctor)) + ", but the declared prop name is" +
30618            " \"" + key + "\". " +
30619            "Note that HTML attributes are case-insensitive and camelCased " +
30620            "props need to use their kebab-case equivalents when using in-DOM " +
30621            "templates. You should probably use \"" + altKey + "\" instead of \"" + key + "\"."
30622          );
30623        }
30624      }
30625      checkProp(res, props, key, altKey, true) ||
30626      checkProp(res, attrs, key, altKey, false);
30627    }
30628  }
30629  return res
30630}
30631
30632function checkProp (
30633  res,
30634  hash,
30635  key,
30636  altKey,
30637  preserve
30638) {
30639  if (isDef(hash)) {
30640    if (hasOwn(hash, key)) {
30641      res[key] = hash[key];
30642      if (!preserve) {
30643        delete hash[key];
30644      }
30645      return true
30646    } else if (hasOwn(hash, altKey)) {
30647      res[key] = hash[altKey];
30648      if (!preserve) {
30649        delete hash[altKey];
30650      }
30651      return true
30652    }
30653  }
30654  return false
30655}
30656
30657/*  */
30658
30659// The template compiler attempts to minimize the need for normalization by
30660// statically analyzing the template at compile time.
30661//
30662// For plain HTML markup, normalization can be completely skipped because the
30663// generated render function is guaranteed to return Array<VNode>. There are
30664// two cases where extra normalization is needed:
30665
30666// 1. When the children contains components - because a functional component
30667// may return an Array instead of a single root. In this case, just a simple
30668// normalization is needed - if any child is an Array, we flatten the whole
30669// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
30670// because functional components already normalize their own children.
30671function simpleNormalizeChildren (children) {
30672  for (var i = 0; i < children.length; i++) {
30673    if (Array.isArray(children[i])) {
30674      return Array.prototype.concat.apply([], children)
30675    }
30676  }
30677  return children
30678}
30679
30680// 2. When the children contains constructs that always generated nested Arrays,
30681// e.g. <template>, <slot>, v-for, or when the children is provided by user
30682// with hand-written render functions / JSX. In such cases a full normalization
30683// is needed to cater to all possible types of children values.
30684function normalizeChildren (children) {
30685  return isPrimitive(children)
30686    ? [createTextVNode(children)]
30687    : Array.isArray(children)
30688      ? normalizeArrayChildren(children)
30689      : undefined
30690}
30691
30692function isTextNode (node) {
30693  return isDef(node) && isDef(node.text) && isFalse(node.isComment)
30694}
30695
30696function normalizeArrayChildren (children, nestedIndex) {
30697  var res = [];
30698  var i, c, lastIndex, last;
30699  for (i = 0; i < children.length; i++) {
30700    c = children[i];
30701    if (isUndef(c) || typeof c === 'boolean') { continue }
30702    lastIndex = res.length - 1;
30703    last = res[lastIndex];
30704    //  nested
30705    if (Array.isArray(c)) {
30706      if (c.length > 0) {
30707        c = normalizeArrayChildren(c, ((nestedIndex || '') + "_" + i));
30708        // merge adjacent text nodes
30709        if (isTextNode(c[0]) && isTextNode(last)) {
30710          res[lastIndex] = createTextVNode(last.text + (c[0]).text);
30711          c.shift();
30712        }
30713        res.push.apply(res, c);
30714      }
30715    } else if (isPrimitive(c)) {
30716      if (isTextNode(last)) {
30717        // merge adjacent text nodes
30718        // this is necessary for SSR hydration because text nodes are
30719        // essentially merged when rendered to HTML strings
30720        res[lastIndex] = createTextVNode(last.text + c);
30721      } else if (c !== '') {
30722        // convert primitive to vnode
30723        res.push(createTextVNode(c));
30724      }
30725    } else {
30726      if (isTextNode(c) && isTextNode(last)) {
30727        // merge adjacent text nodes
30728        res[lastIndex] = createTextVNode(last.text + c.text);
30729      } else {
30730        // default key for nested array children (likely generated by v-for)
30731        if (isTrue(children._isVList) &&
30732          isDef(c.tag) &&
30733          isUndef(c.key) &&
30734          isDef(nestedIndex)) {
30735          c.key = "__vlist" + nestedIndex + "_" + i + "__";
30736        }
30737        res.push(c);
30738      }
30739    }
30740  }
30741  return res
30742}
30743
30744/*  */
30745
30746function initProvide (vm) {
30747  var provide = vm.$options.provide;
30748  if (provide) {
30749    vm._provided = typeof provide === 'function'
30750      ? provide.call(vm)
30751      : provide;
30752  }
30753}
30754
30755function initInjections (vm) {
30756  var result = resolveInject(vm.$options.inject, vm);
30757  if (result) {
30758    toggleObserving(false);
30759    Object.keys(result).forEach(function (key) {
30760      /* istanbul ignore else */
30761      if (true) {
30762        defineReactive$$1(vm, key, result[key], function () {
30763          warn(
30764            "Avoid mutating an injected value directly since the changes will be " +
30765            "overwritten whenever the provided component re-renders. " +
30766            "injection being mutated: \"" + key + "\"",
30767            vm
30768          );
30769        });
30770      } else {}
30771    });
30772    toggleObserving(true);
30773  }
30774}
30775
30776function resolveInject (inject, vm) {
30777  if (inject) {
30778    // inject is :any because flow is not smart enough to figure out cached
30779    var result = Object.create(null);
30780    var keys = hasSymbol
30781      ? Reflect.ownKeys(inject)
30782      : Object.keys(inject);
30783
30784    for (var i = 0; i < keys.length; i++) {
30785      var key = keys[i];
30786      // #6574 in case the inject object is observed...
30787      if (key === '__ob__') { continue }
30788      var provideKey = inject[key].from;
30789      var source = vm;
30790      while (source) {
30791        if (source._provided && hasOwn(source._provided, provideKey)) {
30792          result[key] = source._provided[provideKey];
30793          break
30794        }
30795        source = source.$parent;
30796      }
30797      if (!source) {
30798        if ('default' in inject[key]) {
30799          var provideDefault = inject[key].default;
30800          result[key] = typeof provideDefault === 'function'
30801            ? provideDefault.call(vm)
30802            : provideDefault;
30803        } else if (true) {
30804          warn(("Injection \"" + key + "\" not found"), vm);
30805        }
30806      }
30807    }
30808    return result
30809  }
30810}
30811
30812/*  */
30813
30814
30815
30816/**
30817 * Runtime helper for resolving raw children VNodes into a slot object.
30818 */
30819function resolveSlots (
30820  children,
30821  context
30822) {
30823  if (!children || !children.length) {
30824    return {}
30825  }
30826  var slots = {};
30827  for (var i = 0, l = children.length; i < l; i++) {
30828    var child = children[i];
30829    var data = child.data;
30830    // remove slot attribute if the node is resolved as a Vue slot node
30831    if (data && data.attrs && data.attrs.slot) {
30832      delete data.attrs.slot;
30833    }
30834    // named slots should only be respected if the vnode was rendered in the
30835    // same context.
30836    if ((child.context === context || child.fnContext === context) &&
30837      data && data.slot != null
30838    ) {
30839      var name = data.slot;
30840      var slot = (slots[name] || (slots[name] = []));
30841      if (child.tag === 'template') {
30842        slot.push.apply(slot, child.children || []);
30843      } else {
30844        slot.push(child);
30845      }
30846    } else {
30847      (slots.default || (slots.default = [])).push(child);
30848    }
30849  }
30850  // ignore slots that contains only whitespace
30851  for (var name$1 in slots) {
30852    if (slots[name$1].every(isWhitespace)) {
30853      delete slots[name$1];
30854    }
30855  }
30856  return slots
30857}
30858
30859function isWhitespace (node) {
30860  return (node.isComment && !node.asyncFactory) || node.text === ' '
30861}
30862
30863/*  */
30864
30865function isAsyncPlaceholder (node) {
30866  return node.isComment && node.asyncFactory
30867}
30868
30869/*  */
30870
30871function normalizeScopedSlots (
30872  slots,
30873  normalSlots,
30874  prevSlots
30875) {
30876  var res;
30877  var hasNormalSlots = Object.keys(normalSlots).length > 0;
30878  var isStable = slots ? !!slots.$stable : !hasNormalSlots;
30879  var key = slots && slots.$key;
30880  if (!slots) {
30881    res = {};
30882  } else if (slots._normalized) {
30883    // fast path 1: child component re-render only, parent did not change
30884    return slots._normalized
30885  } else if (
30886    isStable &&
30887    prevSlots &&
30888    prevSlots !== emptyObject &&
30889    key === prevSlots.$key &&
30890    !hasNormalSlots &&
30891    !prevSlots.$hasNormal
30892  ) {
30893    // fast path 2: stable scoped slots w/ no normal slots to proxy,
30894    // only need to normalize once
30895    return prevSlots
30896  } else {
30897    res = {};
30898    for (var key$1 in slots) {
30899      if (slots[key$1] && key$1[0] !== '$') {
30900        res[key$1] = normalizeScopedSlot(normalSlots, key$1, slots[key$1]);
30901      }
30902    }
30903  }
30904  // expose normal slots on scopedSlots
30905  for (var key$2 in normalSlots) {
30906    if (!(key$2 in res)) {
30907      res[key$2] = proxyNormalSlot(normalSlots, key$2);
30908    }
30909  }
30910  // avoriaz seems to mock a non-extensible $scopedSlots object
30911  // and when that is passed down this would cause an error
30912  if (slots && Object.isExtensible(slots)) {
30913    (slots)._normalized = res;
30914  }
30915  def(res, '$stable', isStable);
30916  def(res, '$key', key);
30917  def(res, '$hasNormal', hasNormalSlots);
30918  return res
30919}
30920
30921function normalizeScopedSlot(normalSlots, key, fn) {
30922  var normalized = function () {
30923    var res = arguments.length ? fn.apply(null, arguments) : fn({});
30924    res = res && typeof res === 'object' && !Array.isArray(res)
30925      ? [res] // single vnode
30926      : normalizeChildren(res);
30927    var vnode = res && res[0];
30928    return res && (
30929      !vnode ||
30930      (res.length === 1 && vnode.isComment && !isAsyncPlaceholder(vnode)) // #9658, #10391
30931    ) ? undefined
30932      : res
30933  };
30934  // this is a slot using the new v-slot syntax without scope. although it is
30935  // compiled as a scoped slot, render fn users would expect it to be present
30936  // on this.$slots because the usage is semantically a normal slot.
30937  if (fn.proxy) {
30938    Object.defineProperty(normalSlots, key, {
30939      get: normalized,
30940      enumerable: true,
30941      configurable: true
30942    });
30943  }
30944  return normalized
30945}
30946
30947function proxyNormalSlot(slots, key) {
30948  return function () { return slots[key]; }
30949}
30950
30951/*  */
30952
30953/**
30954 * Runtime helper for rendering v-for lists.
30955 */
30956function renderList (
30957  val,
30958  render
30959) {
30960  var ret, i, l, keys, key;
30961  if (Array.isArray(val) || typeof val === 'string') {
30962    ret = new Array(val.length);
30963    for (i = 0, l = val.length; i < l; i++) {
30964      ret[i] = render(val[i], i);
30965    }
30966  } else if (typeof val === 'number') {
30967    ret = new Array(val);
30968    for (i = 0; i < val; i++) {
30969      ret[i] = render(i + 1, i);
30970    }
30971  } else if (isObject(val)) {
30972    if (hasSymbol && val[Symbol.iterator]) {
30973      ret = [];
30974      var iterator = val[Symbol.iterator]();
30975      var result = iterator.next();
30976      while (!result.done) {
30977        ret.push(render(result.value, ret.length));
30978        result = iterator.next();
30979      }
30980    } else {
30981      keys = Object.keys(val);
30982      ret = new Array(keys.length);
30983      for (i = 0, l = keys.length; i < l; i++) {
30984        key = keys[i];
30985        ret[i] = render(val[key], key, i);
30986      }
30987    }
30988  }
30989  if (!isDef(ret)) {
30990    ret = [];
30991  }
30992  (ret)._isVList = true;
30993  return ret
30994}
30995
30996/*  */
30997
30998/**
30999 * Runtime helper for rendering <slot>
31000 */
31001function renderSlot (
31002  name,
31003  fallbackRender,
31004  props,
31005  bindObject
31006) {
31007  var scopedSlotFn = this.$scopedSlots[name];
31008  var nodes;
31009  if (scopedSlotFn) {
31010    // scoped slot
31011    props = props || {};
31012    if (bindObject) {
31013      if ( true && !isObject(bindObject)) {
31014        warn('slot v-bind without argument expects an Object', this);
31015      }
31016      props = extend(extend({}, bindObject), props);
31017    }
31018    nodes =
31019      scopedSlotFn(props) ||
31020      (typeof fallbackRender === 'function' ? fallbackRender() : fallbackRender);
31021  } else {
31022    nodes =
31023      this.$slots[name] ||
31024      (typeof fallbackRender === 'function' ? fallbackRender() : fallbackRender);
31025  }
31026
31027  var target = props && props.slot;
31028  if (target) {
31029    return this.$createElement('template', { slot: target }, nodes)
31030  } else {
31031    return nodes
31032  }
31033}
31034
31035/*  */
31036
31037/**
31038 * Runtime helper for resolving filters
31039 */
31040function resolveFilter (id) {
31041  return resolveAsset(this.$options, 'filters', id, true) || identity
31042}
31043
31044/*  */
31045
31046function isKeyNotMatch (expect, actual) {
31047  if (Array.isArray(expect)) {
31048    return expect.indexOf(actual) === -1
31049  } else {
31050    return expect !== actual
31051  }
31052}
31053
31054/**
31055 * Runtime helper for checking keyCodes from config.
31056 * exposed as Vue.prototype._k
31057 * passing in eventKeyName as last argument separately for backwards compat
31058 */
31059function checkKeyCodes (
31060  eventKeyCode,
31061  key,
31062  builtInKeyCode,
31063  eventKeyName,
31064  builtInKeyName
31065) {
31066  var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;
31067  if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {
31068    return isKeyNotMatch(builtInKeyName, eventKeyName)
31069  } else if (mappedKeyCode) {
31070    return isKeyNotMatch(mappedKeyCode, eventKeyCode)
31071  } else if (eventKeyName) {
31072    return hyphenate(eventKeyName) !== key
31073  }
31074  return eventKeyCode === undefined
31075}
31076
31077/*  */
31078
31079/**
31080 * Runtime helper for merging v-bind="object" into a VNode's data.
31081 */
31082function bindObjectProps (
31083  data,
31084  tag,
31085  value,
31086  asProp,
31087  isSync
31088) {
31089  if (value) {
31090    if (!isObject(value)) {
31091       true && warn(
31092        'v-bind without argument expects an Object or Array value',
31093        this
31094      );
31095    } else {
31096      if (Array.isArray(value)) {
31097        value = toObject(value);
31098      }
31099      var hash;
31100      var loop = function ( key ) {
31101        if (
31102          key === 'class' ||
31103          key === 'style' ||
31104          isReservedAttribute(key)
31105        ) {
31106          hash = data;
31107        } else {
31108          var type = data.attrs && data.attrs.type;
31109          hash = asProp || config.mustUseProp(tag, type, key)
31110            ? data.domProps || (data.domProps = {})
31111            : data.attrs || (data.attrs = {});
31112        }
31113        var camelizedKey = camelize(key);
31114        var hyphenatedKey = hyphenate(key);
31115        if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {
31116          hash[key] = value[key];
31117
31118          if (isSync) {
31119            var on = data.on || (data.on = {});
31120            on[("update:" + key)] = function ($event) {
31121              value[key] = $event;
31122            };
31123          }
31124        }
31125      };
31126
31127      for (var key in value) loop( key );
31128    }
31129  }
31130  return data
31131}
31132
31133/*  */
31134
31135/**
31136 * Runtime helper for rendering static trees.
31137 */
31138function renderStatic (
31139  index,
31140  isInFor
31141) {
31142  var cached = this._staticTrees || (this._staticTrees = []);
31143  var tree = cached[index];
31144  // if has already-rendered static tree and not inside v-for,
31145  // we can reuse the same tree.
31146  if (tree && !isInFor) {
31147    return tree
31148  }
31149  // otherwise, render a fresh tree.
31150  tree = cached[index] = this.$options.staticRenderFns[index].call(
31151    this._renderProxy,
31152    null,
31153    this // for render fns generated for functional component templates
31154  );
31155  markStatic(tree, ("__static__" + index), false);
31156  return tree
31157}
31158
31159/**
31160 * Runtime helper for v-once.
31161 * Effectively it means marking the node as static with a unique key.
31162 */
31163function markOnce (
31164  tree,
31165  index,
31166  key
31167) {
31168  markStatic(tree, ("__once__" + index + (key ? ("_" + key) : "")), true);
31169  return tree
31170}
31171
31172function markStatic (
31173  tree,
31174  key,
31175  isOnce
31176) {
31177  if (Array.isArray(tree)) {
31178    for (var i = 0; i < tree.length; i++) {
31179      if (tree[i] && typeof tree[i] !== 'string') {
31180        markStaticNode(tree[i], (key + "_" + i), isOnce);
31181      }
31182    }
31183  } else {
31184    markStaticNode(tree, key, isOnce);
31185  }
31186}
31187
31188function markStaticNode (node, key, isOnce) {
31189  node.isStatic = true;
31190  node.key = key;
31191  node.isOnce = isOnce;
31192}
31193
31194/*  */
31195
31196function bindObjectListeners (data, value) {
31197  if (value) {
31198    if (!isPlainObject(value)) {
31199       true && warn(
31200        'v-on without argument expects an Object value',
31201        this
31202      );
31203    } else {
31204      var on = data.on = data.on ? extend({}, data.on) : {};
31205      for (var key in value) {
31206        var existing = on[key];
31207        var ours = value[key];
31208        on[key] = existing ? [].concat(existing, ours) : ours;
31209      }
31210    }
31211  }
31212  return data
31213}
31214
31215/*  */
31216
31217function resolveScopedSlots (
31218  fns, // see flow/vnode
31219  res,
31220  // the following are added in 2.6
31221  hasDynamicKeys,
31222  contentHashKey
31223) {
31224  res = res || { $stable: !hasDynamicKeys };
31225  for (var i = 0; i < fns.length; i++) {
31226    var slot = fns[i];
31227    if (Array.isArray(slot)) {
31228      resolveScopedSlots(slot, res, hasDynamicKeys);
31229    } else if (slot) {
31230      // marker for reverse proxying v-slot without scope on this.$slots
31231      if (slot.proxy) {
31232        slot.fn.proxy = true;
31233      }
31234      res[slot.key] = slot.fn;
31235    }
31236  }
31237  if (contentHashKey) {
31238    (res).$key = contentHashKey;
31239  }
31240  return res
31241}
31242
31243/*  */
31244
31245function bindDynamicKeys (baseObj, values) {
31246  for (var i = 0; i < values.length; i += 2) {
31247    var key = values[i];
31248    if (typeof key === 'string' && key) {
31249      baseObj[values[i]] = values[i + 1];
31250    } else if ( true && key !== '' && key !== null) {
31251      // null is a special value for explicitly removing a binding
31252      warn(
31253        ("Invalid value for dynamic directive argument (expected string or null): " + key),
31254        this
31255      );
31256    }
31257  }
31258  return baseObj
31259}
31260
31261// helper to dynamically append modifier runtime markers to event names.
31262// ensure only append when value is already string, otherwise it will be cast
31263// to string and cause the type check to miss.
31264function prependModifier (value, symbol) {
31265  return typeof value === 'string' ? symbol + value : value
31266}
31267
31268/*  */
31269
31270function installRenderHelpers (target) {
31271  target._o = markOnce;
31272  target._n = toNumber;
31273  target._s = toString;
31274  target._l = renderList;
31275  target._t = renderSlot;
31276  target._q = looseEqual;
31277  target._i = looseIndexOf;
31278  target._m = renderStatic;
31279  target._f = resolveFilter;
31280  target._k = checkKeyCodes;
31281  target._b = bindObjectProps;
31282  target._v = createTextVNode;
31283  target._e = createEmptyVNode;
31284  target._u = resolveScopedSlots;
31285  target._g = bindObjectListeners;
31286  target._d = bindDynamicKeys;
31287  target._p = prependModifier;
31288}
31289
31290/*  */
31291
31292function FunctionalRenderContext (
31293  data,
31294  props,
31295  children,
31296  parent,
31297  Ctor
31298) {
31299  var this$1 = this;
31300
31301  var options = Ctor.options;
31302  // ensure the createElement function in functional components
31303  // gets a unique context - this is necessary for correct named slot check
31304  var contextVm;
31305  if (hasOwn(parent, '_uid')) {
31306    contextVm = Object.create(parent);
31307    // $flow-disable-line
31308    contextVm._original = parent;
31309  } else {
31310    // the context vm passed in is a functional context as well.
31311    // in this case we want to make sure we are able to get a hold to the
31312    // real context instance.
31313    contextVm = parent;
31314    // $flow-disable-line
31315    parent = parent._original;
31316  }
31317  var isCompiled = isTrue(options._compiled);
31318  var needNormalization = !isCompiled;
31319
31320  this.data = data;
31321  this.props = props;
31322  this.children = children;
31323  this.parent = parent;
31324  this.listeners = data.on || emptyObject;
31325  this.injections = resolveInject(options.inject, parent);
31326  this.slots = function () {
31327    if (!this$1.$slots) {
31328      normalizeScopedSlots(
31329        data.scopedSlots,
31330        this$1.$slots = resolveSlots(children, parent)
31331      );
31332    }
31333    return this$1.$slots
31334  };
31335
31336  Object.defineProperty(this, 'scopedSlots', ({
31337    enumerable: true,
31338    get: function get () {
31339      return normalizeScopedSlots(data.scopedSlots, this.slots())
31340    }
31341  }));
31342
31343  // support for compiled functional template
31344  if (isCompiled) {
31345    // exposing $options for renderStatic()
31346    this.$options = options;
31347    // pre-resolve slots for renderSlot()
31348    this.$slots = this.slots();
31349    this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots);
31350  }
31351
31352  if (options._scopeId) {
31353    this._c = function (a, b, c, d) {
31354      var vnode = createElement(contextVm, a, b, c, d, needNormalization);
31355      if (vnode && !Array.isArray(vnode)) {
31356        vnode.fnScopeId = options._scopeId;
31357        vnode.fnContext = parent;
31358      }
31359      return vnode
31360    };
31361  } else {
31362    this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };
31363  }
31364}
31365
31366installRenderHelpers(FunctionalRenderContext.prototype);
31367
31368function createFunctionalComponent (
31369  Ctor,
31370  propsData,
31371  data,
31372  contextVm,
31373  children
31374) {
31375  var options = Ctor.options;
31376  var props = {};
31377  var propOptions = options.props;
31378  if (isDef(propOptions)) {
31379    for (var key in propOptions) {
31380      props[key] = validateProp(key, propOptions, propsData || emptyObject);
31381    }
31382  } else {
31383    if (isDef(data.attrs)) { mergeProps(props, data.attrs); }
31384    if (isDef(data.props)) { mergeProps(props, data.props); }
31385  }
31386
31387  var renderContext = new FunctionalRenderContext(
31388    data,
31389    props,
31390    children,
31391    contextVm,
31392    Ctor
31393  );
31394
31395  var vnode = options.render.call(null, renderContext._c, renderContext);
31396
31397  if (vnode instanceof VNode) {
31398    return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext)
31399  } else if (Array.isArray(vnode)) {
31400    var vnodes = normalizeChildren(vnode) || [];
31401    var res = new Array(vnodes.length);
31402    for (var i = 0; i < vnodes.length; i++) {
31403      res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);
31404    }
31405    return res
31406  }
31407}
31408
31409function cloneAndMarkFunctionalResult (vnode, data, contextVm, options, renderContext) {
31410  // #7817 clone node before setting fnContext, otherwise if the node is reused
31411  // (e.g. it was from a cached normal slot) the fnContext causes named slots
31412  // that should not be matched to match.
31413  var clone = cloneVNode(vnode);
31414  clone.fnContext = contextVm;
31415  clone.fnOptions = options;
31416  if (true) {
31417    (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext;
31418  }
31419  if (data.slot) {
31420    (clone.data || (clone.data = {})).slot = data.slot;
31421  }
31422  return clone
31423}
31424
31425function mergeProps (to, from) {
31426  for (var key in from) {
31427    to[camelize(key)] = from[key];
31428  }
31429}
31430
31431/*  */
31432
31433/*  */
31434
31435/*  */
31436
31437/*  */
31438
31439// inline hooks to be invoked on component VNodes during patch
31440var componentVNodeHooks = {
31441  init: function init (vnode, hydrating) {
31442    if (
31443      vnode.componentInstance &&
31444      !vnode.componentInstance._isDestroyed &&
31445      vnode.data.keepAlive
31446    ) {
31447      // kept-alive components, treat as a patch
31448      var mountedNode = vnode; // work around flow
31449      componentVNodeHooks.prepatch(mountedNode, mountedNode);
31450    } else {
31451      var child = vnode.componentInstance = createComponentInstanceForVnode(
31452        vnode,
31453        activeInstance
31454      );
31455      child.$mount(hydrating ? vnode.elm : undefined, hydrating);
31456    }
31457  },
31458
31459  prepatch: function prepatch (oldVnode, vnode) {
31460    var options = vnode.componentOptions;
31461    var child = vnode.componentInstance = oldVnode.componentInstance;
31462    updateChildComponent(
31463      child,
31464      options.propsData, // updated props
31465      options.listeners, // updated listeners
31466      vnode, // new parent vnode
31467      options.children // new children
31468    );
31469  },
31470
31471  insert: function insert (vnode) {
31472    var context = vnode.context;
31473    var componentInstance = vnode.componentInstance;
31474    if (!componentInstance._isMounted) {
31475      componentInstance._isMounted = true;
31476      callHook(componentInstance, 'mounted');
31477    }
31478    if (vnode.data.keepAlive) {
31479      if (context._isMounted) {
31480        // vue-router#1212
31481        // During updates, a kept-alive component's child components may
31482        // change, so directly walking the tree here may call activated hooks
31483        // on incorrect children. Instead we push them into a queue which will
31484        // be processed after the whole patch process ended.
31485        queueActivatedComponent(componentInstance);
31486      } else {
31487        activateChildComponent(componentInstance, true /* direct */);
31488      }
31489    }
31490  },
31491
31492  destroy: function destroy (vnode) {
31493    var componentInstance = vnode.componentInstance;
31494    if (!componentInstance._isDestroyed) {
31495      if (!vnode.data.keepAlive) {
31496        componentInstance.$destroy();
31497      } else {
31498        deactivateChildComponent(componentInstance, true /* direct */);
31499      }
31500    }
31501  }
31502};
31503
31504var hooksToMerge = Object.keys(componentVNodeHooks);
31505
31506function createComponent (
31507  Ctor,
31508  data,
31509  context,
31510  children,
31511  tag
31512) {
31513  if (isUndef(Ctor)) {
31514    return
31515  }
31516
31517  var baseCtor = context.$options._base;
31518
31519  // plain options object: turn it into a constructor
31520  if (isObject(Ctor)) {
31521    Ctor = baseCtor.extend(Ctor);
31522  }
31523
31524  // if at this stage it's not a constructor or an async component factory,
31525  // reject.
31526  if (typeof Ctor !== 'function') {
31527    if (true) {
31528      warn(("Invalid Component definition: " + (String(Ctor))), context);
31529    }
31530    return
31531  }
31532
31533  // async component
31534  var asyncFactory;
31535  if (isUndef(Ctor.cid)) {
31536    asyncFactory = Ctor;
31537    Ctor = resolveAsyncComponent(asyncFactory, baseCtor);
31538    if (Ctor === undefined) {
31539      // return a placeholder node for async component, which is rendered
31540      // as a comment node but preserves all the raw information for the node.
31541      // the information will be used for async server-rendering and hydration.
31542      return createAsyncPlaceholder(
31543        asyncFactory,
31544        data,
31545        context,
31546        children,
31547        tag
31548      )
31549    }
31550  }
31551
31552  data = data || {};
31553
31554  // resolve constructor options in case global mixins are applied after
31555  // component constructor creation
31556  resolveConstructorOptions(Ctor);
31557
31558  // transform component v-model data into props & events
31559  if (isDef(data.model)) {
31560    transformModel(Ctor.options, data);
31561  }
31562
31563  // extract props
31564  var propsData = extractPropsFromVNodeData(data, Ctor, tag);
31565
31566  // functional component
31567  if (isTrue(Ctor.options.functional)) {
31568    return createFunctionalComponent(Ctor, propsData, data, context, children)
31569  }
31570
31571  // extract listeners, since these needs to be treated as
31572  // child component listeners instead of DOM listeners
31573  var listeners = data.on;
31574  // replace with listeners with .native modifier
31575  // so it gets processed during parent component patch.
31576  data.on = data.nativeOn;
31577
31578  if (isTrue(Ctor.options.abstract)) {
31579    // abstract components do not keep anything
31580    // other than props & listeners & slot
31581
31582    // work around flow
31583    var slot = data.slot;
31584    data = {};
31585    if (slot) {
31586      data.slot = slot;
31587    }
31588  }
31589
31590  // install component management hooks onto the placeholder node
31591  installComponentHooks(data);
31592
31593  // return a placeholder vnode
31594  var name = Ctor.options.name || tag;
31595  var vnode = new VNode(
31596    ("vue-component-" + (Ctor.cid) + (name ? ("-" + name) : '')),
31597    data, undefined, undefined, undefined, context,
31598    { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },
31599    asyncFactory
31600  );
31601
31602  return vnode
31603}
31604
31605function createComponentInstanceForVnode (
31606  // we know it's MountedComponentVNode but flow doesn't
31607  vnode,
31608  // activeInstance in lifecycle state
31609  parent
31610) {
31611  var options = {
31612    _isComponent: true,
31613    _parentVnode: vnode,
31614    parent: parent
31615  };
31616  // check inline-template render functions
31617  var inlineTemplate = vnode.data.inlineTemplate;
31618  if (isDef(inlineTemplate)) {
31619    options.render = inlineTemplate.render;
31620    options.staticRenderFns = inlineTemplate.staticRenderFns;
31621  }
31622  return new vnode.componentOptions.Ctor(options)
31623}
31624
31625function installComponentHooks (data) {
31626  var hooks = data.hook || (data.hook = {});
31627  for (var i = 0; i < hooksToMerge.length; i++) {
31628    var key = hooksToMerge[i];
31629    var existing = hooks[key];
31630    var toMerge = componentVNodeHooks[key];
31631    if (existing !== toMerge && !(existing && existing._merged)) {
31632      hooks[key] = existing ? mergeHook$1(toMerge, existing) : toMerge;
31633    }
31634  }
31635}
31636
31637function mergeHook$1 (f1, f2) {
31638  var merged = function (a, b) {
31639    // flow complains about extra args which is why we use any
31640    f1(a, b);
31641    f2(a, b);
31642  };
31643  merged._merged = true;
31644  return merged
31645}
31646
31647// transform component v-model info (value and callback) into
31648// prop and event handler respectively.
31649function transformModel (options, data) {
31650  var prop = (options.model && options.model.prop) || 'value';
31651  var event = (options.model && options.model.event) || 'input'
31652  ;(data.attrs || (data.attrs = {}))[prop] = data.model.value;
31653  var on = data.on || (data.on = {});
31654  var existing = on[event];
31655  var callback = data.model.callback;
31656  if (isDef(existing)) {
31657    if (
31658      Array.isArray(existing)
31659        ? existing.indexOf(callback) === -1
31660        : existing !== callback
31661    ) {
31662      on[event] = [callback].concat(existing);
31663    }
31664  } else {
31665    on[event] = callback;
31666  }
31667}
31668
31669/*  */
31670
31671var SIMPLE_NORMALIZE = 1;
31672var ALWAYS_NORMALIZE = 2;
31673
31674// wrapper function for providing a more flexible interface
31675// without getting yelled at by flow
31676function createElement (
31677  context,
31678  tag,
31679  data,
31680  children,
31681  normalizationType,
31682  alwaysNormalize
31683) {
31684  if (Array.isArray(data) || isPrimitive(data)) {
31685    normalizationType = children;
31686    children = data;
31687    data = undefined;
31688  }
31689  if (isTrue(alwaysNormalize)) {
31690    normalizationType = ALWAYS_NORMALIZE;
31691  }
31692  return _createElement(context, tag, data, children, normalizationType)
31693}
31694
31695function _createElement (
31696  context,
31697  tag,
31698  data,
31699  children,
31700  normalizationType
31701) {
31702  if (isDef(data) && isDef((data).__ob__)) {
31703     true && warn(
31704      "Avoid using observed data object as vnode data: " + (JSON.stringify(data)) + "\n" +
31705      'Always create fresh vnode data objects in each render!',
31706      context
31707    );
31708    return createEmptyVNode()
31709  }
31710  // object syntax in v-bind
31711  if (isDef(data) && isDef(data.is)) {
31712    tag = data.is;
31713  }
31714  if (!tag) {
31715    // in case of component :is set to falsy value
31716    return createEmptyVNode()
31717  }
31718  // warn against non-primitive key
31719  if ( true &&
31720    isDef(data) && isDef(data.key) && !isPrimitive(data.key)
31721  ) {
31722    {
31723      warn(
31724        'Avoid using non-primitive value as key, ' +
31725        'use string/number value instead.',
31726        context
31727      );
31728    }
31729  }
31730  // support single function children as default scoped slot
31731  if (Array.isArray(children) &&
31732    typeof children[0] === 'function'
31733  ) {
31734    data = data || {};
31735    data.scopedSlots = { default: children[0] };
31736    children.length = 0;
31737  }
31738  if (normalizationType === ALWAYS_NORMALIZE) {
31739    children = normalizeChildren(children);
31740  } else if (normalizationType === SIMPLE_NORMALIZE) {
31741    children = simpleNormalizeChildren(children);
31742  }
31743  var vnode, ns;
31744  if (typeof tag === 'string') {
31745    var Ctor;
31746    ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);
31747    if (config.isReservedTag(tag)) {
31748      // platform built-in elements
31749      if ( true && isDef(data) && isDef(data.nativeOn) && data.tag !== 'component') {
31750        warn(
31751          ("The .native modifier for v-on is only valid on components but it was used on <" + tag + ">."),
31752          context
31753        );
31754      }
31755      vnode = new VNode(
31756        config.parsePlatformTagName(tag), data, children,
31757        undefined, undefined, context
31758      );
31759    } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {
31760      // component
31761      vnode = createComponent(Ctor, data, context, children, tag);
31762    } else {
31763      // unknown or unlisted namespaced elements
31764      // check at runtime because it may get assigned a namespace when its
31765      // parent normalizes children
31766      vnode = new VNode(
31767        tag, data, children,
31768        undefined, undefined, context
31769      );
31770    }
31771  } else {
31772    // direct component options / constructor
31773    vnode = createComponent(tag, data, context, children);
31774  }
31775  if (Array.isArray(vnode)) {
31776    return vnode
31777  } else if (isDef(vnode)) {
31778    if (isDef(ns)) { applyNS(vnode, ns); }
31779    if (isDef(data)) { registerDeepBindings(data); }
31780    return vnode
31781  } else {
31782    return createEmptyVNode()
31783  }
31784}
31785
31786function applyNS (vnode, ns, force) {
31787  vnode.ns = ns;
31788  if (vnode.tag === 'foreignObject') {
31789    // use default namespace inside foreignObject
31790    ns = undefined;
31791    force = true;
31792  }
31793  if (isDef(vnode.children)) {
31794    for (var i = 0, l = vnode.children.length; i < l; i++) {
31795      var child = vnode.children[i];
31796      if (isDef(child.tag) && (
31797        isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {
31798        applyNS(child, ns, force);
31799      }
31800    }
31801  }
31802}
31803
31804// ref #5318
31805// necessary to ensure parent re-render when deep bindings like :style and
31806// :class are used on slot nodes
31807function registerDeepBindings (data) {
31808  if (isObject(data.style)) {
31809    traverse(data.style);
31810  }
31811  if (isObject(data.class)) {
31812    traverse(data.class);
31813  }
31814}
31815
31816/*  */
31817
31818function initRender (vm) {
31819  vm._vnode = null; // the root of the child tree
31820  vm._staticTrees = null; // v-once cached trees
31821  var options = vm.$options;
31822  var parentVnode = vm.$vnode = options._parentVnode; // the placeholder node in parent tree
31823  var renderContext = parentVnode && parentVnode.context;
31824  vm.$slots = resolveSlots(options._renderChildren, renderContext);
31825  vm.$scopedSlots = emptyObject;
31826  // bind the createElement fn to this instance
31827  // so that we get proper render context inside it.
31828  // args order: tag, data, children, normalizationType, alwaysNormalize
31829  // internal version is used by render functions compiled from templates
31830  vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };
31831  // normalization is always applied for the public version, used in
31832  // user-written render functions.
31833  vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };
31834
31835  // $attrs & $listeners are exposed for easier HOC creation.
31836  // they need to be reactive so that HOCs using them are always updated
31837  var parentData = parentVnode && parentVnode.data;
31838
31839  /* istanbul ignore else */
31840  if (true) {
31841    defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {
31842      !isUpdatingChildComponent && warn("$attrs is readonly.", vm);
31843    }, true);
31844    defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, function () {
31845      !isUpdatingChildComponent && warn("$listeners is readonly.", vm);
31846    }, true);
31847  } else {}
31848}
31849
31850var currentRenderingInstance = null;
31851
31852function renderMixin (Vue) {
31853  // install runtime convenience helpers
31854  installRenderHelpers(Vue.prototype);
31855
31856  Vue.prototype.$nextTick = function (fn) {
31857    return nextTick(fn, this)
31858  };
31859
31860  Vue.prototype._render = function () {
31861    var vm = this;
31862    var ref = vm.$options;
31863    var render = ref.render;
31864    var _parentVnode = ref._parentVnode;
31865
31866    if (_parentVnode) {
31867      vm.$scopedSlots = normalizeScopedSlots(
31868        _parentVnode.data.scopedSlots,
31869        vm.$slots,
31870        vm.$scopedSlots
31871      );
31872    }
31873
31874    // set parent vnode. this allows render functions to have access
31875    // to the data on the placeholder node.
31876    vm.$vnode = _parentVnode;
31877    // render self
31878    var vnode;
31879    try {
31880      // There's no need to maintain a stack because all render fns are called
31881      // separately from one another. Nested component's render fns are called
31882      // when parent component is patched.
31883      currentRenderingInstance = vm;
31884      vnode = render.call(vm._renderProxy, vm.$createElement);
31885    } catch (e) {
31886      handleError(e, vm, "render");
31887      // return error render result,
31888      // or previous vnode to prevent render error causing blank component
31889      /* istanbul ignore else */
31890      if ( true && vm.$options.renderError) {
31891        try {
31892          vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);
31893        } catch (e) {
31894          handleError(e, vm, "renderError");
31895          vnode = vm._vnode;
31896        }
31897      } else {
31898        vnode = vm._vnode;
31899      }
31900    } finally {
31901      currentRenderingInstance = null;
31902    }
31903    // if the returned array contains only a single node, allow it
31904    if (Array.isArray(vnode) && vnode.length === 1) {
31905      vnode = vnode[0];
31906    }
31907    // return empty vnode in case the render function errored out
31908    if (!(vnode instanceof VNode)) {
31909      if ( true && Array.isArray(vnode)) {
31910        warn(
31911          'Multiple root nodes returned from render function. Render function ' +
31912          'should return a single root node.',
31913          vm
31914        );
31915      }
31916      vnode = createEmptyVNode();
31917    }
31918    // set parent
31919    vnode.parent = _parentVnode;
31920    return vnode
31921  };
31922}
31923
31924/*  */
31925
31926function ensureCtor (comp, base) {
31927  if (
31928    comp.__esModule ||
31929    (hasSymbol && comp[Symbol.toStringTag] === 'Module')
31930  ) {
31931    comp = comp.default;
31932  }
31933  return isObject(comp)
31934    ? base.extend(comp)
31935    : comp
31936}
31937
31938function createAsyncPlaceholder (
31939  factory,
31940  data,
31941  context,
31942  children,
31943  tag
31944) {
31945  var node = createEmptyVNode();
31946  node.asyncFactory = factory;
31947  node.asyncMeta = { data: data, context: context, children: children, tag: tag };
31948  return node
31949}
31950
31951function resolveAsyncComponent (
31952  factory,
31953  baseCtor
31954) {
31955  if (isTrue(factory.error) && isDef(factory.errorComp)) {
31956    return factory.errorComp
31957  }
31958
31959  if (isDef(factory.resolved)) {
31960    return factory.resolved
31961  }
31962
31963  var owner = currentRenderingInstance;
31964  if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {
31965    // already pending
31966    factory.owners.push(owner);
31967  }
31968
31969  if (isTrue(factory.loading) && isDef(factory.loadingComp)) {
31970    return factory.loadingComp
31971  }
31972
31973  if (owner && !isDef(factory.owners)) {
31974    var owners = factory.owners = [owner];
31975    var sync = true;
31976    var timerLoading = null;
31977    var timerTimeout = null
31978
31979    ;(owner).$on('hook:destroyed', function () { return remove(owners, owner); });
31980
31981    var forceRender = function (renderCompleted) {
31982      for (var i = 0, l = owners.length; i < l; i++) {
31983        (owners[i]).$forceUpdate();
31984      }
31985
31986      if (renderCompleted) {
31987        owners.length = 0;
31988        if (timerLoading !== null) {
31989          clearTimeout(timerLoading);
31990          timerLoading = null;
31991        }
31992        if (timerTimeout !== null) {
31993          clearTimeout(timerTimeout);
31994          timerTimeout = null;
31995        }
31996      }
31997    };
31998
31999    var resolve = once(function (res) {
32000      // cache resolved
32001      factory.resolved = ensureCtor(res, baseCtor);
32002      // invoke callbacks only if this is not a synchronous resolve
32003      // (async resolves are shimmed as synchronous during SSR)
32004      if (!sync) {
32005        forceRender(true);
32006      } else {
32007        owners.length = 0;
32008      }
32009    });
32010
32011    var reject = once(function (reason) {
32012       true && warn(
32013        "Failed to resolve async component: " + (String(factory)) +
32014        (reason ? ("\nReason: " + reason) : '')
32015      );
32016      if (isDef(factory.errorComp)) {
32017        factory.error = true;
32018        forceRender(true);
32019      }
32020    });
32021
32022    var res = factory(resolve, reject);
32023
32024    if (isObject(res)) {
32025      if (isPromise(res)) {
32026        // () => Promise
32027        if (isUndef(factory.resolved)) {
32028          res.then(resolve, reject);
32029        }
32030      } else if (isPromise(res.component)) {
32031        res.component.then(resolve, reject);
32032
32033        if (isDef(res.error)) {
32034          factory.errorComp = ensureCtor(res.error, baseCtor);
32035        }
32036
32037        if (isDef(res.loading)) {
32038          factory.loadingComp = ensureCtor(res.loading, baseCtor);
32039          if (res.delay === 0) {
32040            factory.loading = true;
32041          } else {
32042            timerLoading = setTimeout(function () {
32043              timerLoading = null;
32044              if (isUndef(factory.resolved) && isUndef(factory.error)) {
32045                factory.loading = true;
32046                forceRender(false);
32047              }
32048            }, res.delay || 200);
32049          }
32050        }
32051
32052        if (isDef(res.timeout)) {
32053          timerTimeout = setTimeout(function () {
32054            timerTimeout = null;
32055            if (isUndef(factory.resolved)) {
32056              reject(
32057                 true
32058                  ? ("timeout (" + (res.timeout) + "ms)")
32059                  : 0
32060              );
32061            }
32062          }, res.timeout);
32063        }
32064      }
32065    }
32066
32067    sync = false;
32068    // return in case resolved synchronously
32069    return factory.loading
32070      ? factory.loadingComp
32071      : factory.resolved
32072  }
32073}
32074
32075/*  */
32076
32077function getFirstComponentChild (children) {
32078  if (Array.isArray(children)) {
32079    for (var i = 0; i < children.length; i++) {
32080      var c = children[i];
32081      if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {
32082        return c
32083      }
32084    }
32085  }
32086}
32087
32088/*  */
32089
32090/*  */
32091
32092function initEvents (vm) {
32093  vm._events = Object.create(null);
32094  vm._hasHookEvent = false;
32095  // init parent attached events
32096  var listeners = vm.$options._parentListeners;
32097  if (listeners) {
32098    updateComponentListeners(vm, listeners);
32099  }
32100}
32101
32102var target;
32103
32104function add (event, fn) {
32105  target.$on(event, fn);
32106}
32107
32108function remove$1 (event, fn) {
32109  target.$off(event, fn);
32110}
32111
32112function createOnceHandler (event, fn) {
32113  var _target = target;
32114  return function onceHandler () {
32115    var res = fn.apply(null, arguments);
32116    if (res !== null) {
32117      _target.$off(event, onceHandler);
32118    }
32119  }
32120}
32121
32122function updateComponentListeners (
32123  vm,
32124  listeners,
32125  oldListeners
32126) {
32127  target = vm;
32128  updateListeners(listeners, oldListeners || {}, add, remove$1, createOnceHandler, vm);
32129  target = undefined;
32130}
32131
32132function eventsMixin (Vue) {
32133  var hookRE = /^hook:/;
32134  Vue.prototype.$on = function (event, fn) {
32135    var vm = this;
32136    if (Array.isArray(event)) {
32137      for (var i = 0, l = event.length; i < l; i++) {
32138        vm.$on(event[i], fn);
32139      }
32140    } else {
32141      (vm._events[event] || (vm._events[event] = [])).push(fn);
32142      // optimize hook:event cost by using a boolean flag marked at registration
32143      // instead of a hash lookup
32144      if (hookRE.test(event)) {
32145        vm._hasHookEvent = true;
32146      }
32147    }
32148    return vm
32149  };
32150
32151  Vue.prototype.$once = function (event, fn) {
32152    var vm = this;
32153    function on () {
32154      vm.$off(event, on);
32155      fn.apply(vm, arguments);
32156    }
32157    on.fn = fn;
32158    vm.$on(event, on);
32159    return vm
32160  };
32161
32162  Vue.prototype.$off = function (event, fn) {
32163    var vm = this;
32164    // all
32165    if (!arguments.length) {
32166      vm._events = Object.create(null);
32167      return vm
32168    }
32169    // array of events
32170    if (Array.isArray(event)) {
32171      for (var i$1 = 0, l = event.length; i$1 < l; i$1++) {
32172        vm.$off(event[i$1], fn);
32173      }
32174      return vm
32175    }
32176    // specific event
32177    var cbs = vm._events[event];
32178    if (!cbs) {
32179      return vm
32180    }
32181    if (!fn) {
32182      vm._events[event] = null;
32183      return vm
32184    }
32185    // specific handler
32186    var cb;
32187    var i = cbs.length;
32188    while (i--) {
32189      cb = cbs[i];
32190      if (cb === fn || cb.fn === fn) {
32191        cbs.splice(i, 1);
32192        break
32193      }
32194    }
32195    return vm
32196  };
32197
32198  Vue.prototype.$emit = function (event) {
32199    var vm = this;
32200    if (true) {
32201      var lowerCaseEvent = event.toLowerCase();
32202      if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {
32203        tip(
32204          "Event \"" + lowerCaseEvent + "\" is emitted in component " +
32205          (formatComponentName(vm)) + " but the handler is registered for \"" + event + "\". " +
32206          "Note that HTML attributes are case-insensitive and you cannot use " +
32207          "v-on to listen to camelCase events when using in-DOM templates. " +
32208          "You should probably use \"" + (hyphenate(event)) + "\" instead of \"" + event + "\"."
32209        );
32210      }
32211    }
32212    var cbs = vm._events[event];
32213    if (cbs) {
32214      cbs = cbs.length > 1 ? toArray(cbs) : cbs;
32215      var args = toArray(arguments, 1);
32216      var info = "event handler for \"" + event + "\"";
32217      for (var i = 0, l = cbs.length; i < l; i++) {
32218        invokeWithErrorHandling(cbs[i], vm, args, vm, info);
32219      }
32220    }
32221    return vm
32222  };
32223}
32224
32225/*  */
32226
32227var activeInstance = null;
32228var isUpdatingChildComponent = false;
32229
32230function setActiveInstance(vm) {
32231  var prevActiveInstance = activeInstance;
32232  activeInstance = vm;
32233  return function () {
32234    activeInstance = prevActiveInstance;
32235  }
32236}
32237
32238function initLifecycle (vm) {
32239  var options = vm.$options;
32240
32241  // locate first non-abstract parent
32242  var parent = options.parent;
32243  if (parent && !options.abstract) {
32244    while (parent.$options.abstract && parent.$parent) {
32245      parent = parent.$parent;
32246    }
32247    parent.$children.push(vm);
32248  }
32249
32250  vm.$parent = parent;
32251  vm.$root = parent ? parent.$root : vm;
32252
32253  vm.$children = [];
32254  vm.$refs = {};
32255
32256  vm._watcher = null;
32257  vm._inactive = null;
32258  vm._directInactive = false;
32259  vm._isMounted = false;
32260  vm._isDestroyed = false;
32261  vm._isBeingDestroyed = false;
32262}
32263
32264function lifecycleMixin (Vue) {
32265  Vue.prototype._update = function (vnode, hydrating) {
32266    var vm = this;
32267    var prevEl = vm.$el;
32268    var prevVnode = vm._vnode;
32269    var restoreActiveInstance = setActiveInstance(vm);
32270    vm._vnode = vnode;
32271    // Vue.prototype.__patch__ is injected in entry points
32272    // based on the rendering backend used.
32273    if (!prevVnode) {
32274      // initial render
32275      vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);
32276    } else {
32277      // updates
32278      vm.$el = vm.__patch__(prevVnode, vnode);
32279    }
32280    restoreActiveInstance();
32281    // update __vue__ reference
32282    if (prevEl) {
32283      prevEl.__vue__ = null;
32284    }
32285    if (vm.$el) {
32286      vm.$el.__vue__ = vm;
32287    }
32288    // if parent is an HOC, update its $el as well
32289    if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {
32290      vm.$parent.$el = vm.$el;
32291    }
32292    // updated hook is called by the scheduler to ensure that children are
32293    // updated in a parent's updated hook.
32294  };
32295
32296  Vue.prototype.$forceUpdate = function () {
32297    var vm = this;
32298    if (vm._watcher) {
32299      vm._watcher.update();
32300    }
32301  };
32302
32303  Vue.prototype.$destroy = function () {
32304    var vm = this;
32305    if (vm._isBeingDestroyed) {
32306      return
32307    }
32308    callHook(vm, 'beforeDestroy');
32309    vm._isBeingDestroyed = true;
32310    // remove self from parent
32311    var parent = vm.$parent;
32312    if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {
32313      remove(parent.$children, vm);
32314    }
32315    // teardown watchers
32316    if (vm._watcher) {
32317      vm._watcher.teardown();
32318    }
32319    var i = vm._watchers.length;
32320    while (i--) {
32321      vm._watchers[i].teardown();
32322    }
32323    // remove reference from data ob
32324    // frozen object may not have observer.
32325    if (vm._data.__ob__) {
32326      vm._data.__ob__.vmCount--;
32327    }
32328    // call the last hook...
32329    vm._isDestroyed = true;
32330    // invoke destroy hooks on current rendered tree
32331    vm.__patch__(vm._vnode, null);
32332    // fire destroyed hook
32333    callHook(vm, 'destroyed');
32334    // turn off all instance listeners.
32335    vm.$off();
32336    // remove __vue__ reference
32337    if (vm.$el) {
32338      vm.$el.__vue__ = null;
32339    }
32340    // release circular reference (#6759)
32341    if (vm.$vnode) {
32342      vm.$vnode.parent = null;
32343    }
32344  };
32345}
32346
32347function mountComponent (
32348  vm,
32349  el,
32350  hydrating
32351) {
32352  vm.$el = el;
32353  if (!vm.$options.render) {
32354    vm.$options.render = createEmptyVNode;
32355    if (true) {
32356      /* istanbul ignore if */
32357      if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||
32358        vm.$options.el || el) {
32359        warn(
32360          'You are using the runtime-only build of Vue where the template ' +
32361          'compiler is not available. Either pre-compile the templates into ' +
32362          'render functions, or use the compiler-included build.',
32363          vm
32364        );
32365      } else {
32366        warn(
32367          'Failed to mount component: template or render function not defined.',
32368          vm
32369        );
32370      }
32371    }
32372  }
32373  callHook(vm, 'beforeMount');
32374
32375  var updateComponent;
32376  /* istanbul ignore if */
32377  if ( true && config.performance && mark) {
32378    updateComponent = function () {
32379      var name = vm._name;
32380      var id = vm._uid;
32381      var startTag = "vue-perf-start:" + id;
32382      var endTag = "vue-perf-end:" + id;
32383
32384      mark(startTag);
32385      var vnode = vm._render();
32386      mark(endTag);
32387      measure(("vue " + name + " render"), startTag, endTag);
32388
32389      mark(startTag);
32390      vm._update(vnode, hydrating);
32391      mark(endTag);
32392      measure(("vue " + name + " patch"), startTag, endTag);
32393    };
32394  } else {
32395    updateComponent = function () {
32396      vm._update(vm._render(), hydrating);
32397    };
32398  }
32399
32400  // we set this to vm._watcher inside the watcher's constructor
32401  // since the watcher's initial patch may call $forceUpdate (e.g. inside child
32402  // component's mounted hook), which relies on vm._watcher being already defined
32403  new Watcher(vm, updateComponent, noop, {
32404    before: function before () {
32405      if (vm._isMounted && !vm._isDestroyed) {
32406        callHook(vm, 'beforeUpdate');
32407      }
32408    }
32409  }, true /* isRenderWatcher */);
32410  hydrating = false;
32411
32412  // manually mounted instance, call mounted on self
32413  // mounted is called for render-created child components in its inserted hook
32414  if (vm.$vnode == null) {
32415    vm._isMounted = true;
32416    callHook(vm, 'mounted');
32417  }
32418  return vm
32419}
32420
32421function updateChildComponent (
32422  vm,
32423  propsData,
32424  listeners,
32425  parentVnode,
32426  renderChildren
32427) {
32428  if (true) {
32429    isUpdatingChildComponent = true;
32430  }
32431
32432  // determine whether component has slot children
32433  // we need to do this before overwriting $options._renderChildren.
32434
32435  // check if there are dynamic scopedSlots (hand-written or compiled but with
32436  // dynamic slot names). Static scoped slots compiled from template has the
32437  // "$stable" marker.
32438  var newScopedSlots = parentVnode.data.scopedSlots;
32439  var oldScopedSlots = vm.$scopedSlots;
32440  var hasDynamicScopedSlot = !!(
32441    (newScopedSlots && !newScopedSlots.$stable) ||
32442    (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||
32443    (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key) ||
32444    (!newScopedSlots && vm.$scopedSlots.$key)
32445  );
32446
32447  // Any static slot children from the parent may have changed during parent's
32448  // update. Dynamic scoped slots may also have changed. In such cases, a forced
32449  // update is necessary to ensure correctness.
32450  var needsForceUpdate = !!(
32451    renderChildren ||               // has new static slots
32452    vm.$options._renderChildren ||  // has old static slots
32453    hasDynamicScopedSlot
32454  );
32455
32456  vm.$options._parentVnode = parentVnode;
32457  vm.$vnode = parentVnode; // update vm's placeholder node without re-render
32458
32459  if (vm._vnode) { // update child tree's parent
32460    vm._vnode.parent = parentVnode;
32461  }
32462  vm.$options._renderChildren = renderChildren;
32463
32464  // update $attrs and $listeners hash
32465  // these are also reactive so they may trigger child update if the child
32466  // used them during render
32467  vm.$attrs = parentVnode.data.attrs || emptyObject;
32468  vm.$listeners = listeners || emptyObject;
32469
32470  // update props
32471  if (propsData && vm.$options.props) {
32472    toggleObserving(false);
32473    var props = vm._props;
32474    var propKeys = vm.$options._propKeys || [];
32475    for (var i = 0; i < propKeys.length; i++) {
32476      var key = propKeys[i];
32477      var propOptions = vm.$options.props; // wtf flow?
32478      props[key] = validateProp(key, propOptions, propsData, vm);
32479    }
32480    toggleObserving(true);
32481    // keep a copy of raw propsData
32482    vm.$options.propsData = propsData;
32483  }
32484
32485  // update listeners
32486  listeners = listeners || emptyObject;
32487  var oldListeners = vm.$options._parentListeners;
32488  vm.$options._parentListeners = listeners;
32489  updateComponentListeners(vm, listeners, oldListeners);
32490
32491  // resolve slots + force update if has children
32492  if (needsForceUpdate) {
32493    vm.$slots = resolveSlots(renderChildren, parentVnode.context);
32494    vm.$forceUpdate();
32495  }
32496
32497  if (true) {
32498    isUpdatingChildComponent = false;
32499  }
32500}
32501
32502function isInInactiveTree (vm) {
32503  while (vm && (vm = vm.$parent)) {
32504    if (vm._inactive) { return true }
32505  }
32506  return false
32507}
32508
32509function activateChildComponent (vm, direct) {
32510  if (direct) {
32511    vm._directInactive = false;
32512    if (isInInactiveTree(vm)) {
32513      return
32514    }
32515  } else if (vm._directInactive) {
32516    return
32517  }
32518  if (vm._inactive || vm._inactive === null) {
32519    vm._inactive = false;
32520    for (var i = 0; i < vm.$children.length; i++) {
32521      activateChildComponent(vm.$children[i]);
32522    }
32523    callHook(vm, 'activated');
32524  }
32525}
32526
32527function deactivateChildComponent (vm, direct) {
32528  if (direct) {
32529    vm._directInactive = true;
32530    if (isInInactiveTree(vm)) {
32531      return
32532    }
32533  }
32534  if (!vm._inactive) {
32535    vm._inactive = true;
32536    for (var i = 0; i < vm.$children.length; i++) {
32537      deactivateChildComponent(vm.$children[i]);
32538    }
32539    callHook(vm, 'deactivated');
32540  }
32541}
32542
32543function callHook (vm, hook) {
32544  // #7573 disable dep collection when invoking lifecycle hooks
32545  pushTarget();
32546  var handlers = vm.$options[hook];
32547  var info = hook + " hook";
32548  if (handlers) {
32549    for (var i = 0, j = handlers.length; i < j; i++) {
32550      invokeWithErrorHandling(handlers[i], vm, null, vm, info);
32551    }
32552  }
32553  if (vm._hasHookEvent) {
32554    vm.$emit('hook:' + hook);
32555  }
32556  popTarget();
32557}
32558
32559/*  */
32560
32561var MAX_UPDATE_COUNT = 100;
32562
32563var queue = [];
32564var activatedChildren = [];
32565var has = {};
32566var circular = {};
32567var waiting = false;
32568var flushing = false;
32569var index = 0;
32570
32571/**
32572 * Reset the scheduler's state.
32573 */
32574function resetSchedulerState () {
32575  index = queue.length = activatedChildren.length = 0;
32576  has = {};
32577  if (true) {
32578    circular = {};
32579  }
32580  waiting = flushing = false;
32581}
32582
32583// Async edge case #6566 requires saving the timestamp when event listeners are
32584// attached. However, calling performance.now() has a perf overhead especially
32585// if the page has thousands of event listeners. Instead, we take a timestamp
32586// every time the scheduler flushes and use that for all event listeners
32587// attached during that flush.
32588var currentFlushTimestamp = 0;
32589
32590// Async edge case fix requires storing an event listener's attach timestamp.
32591var getNow = Date.now;
32592
32593// Determine what event timestamp the browser is using. Annoyingly, the
32594// timestamp can either be hi-res (relative to page load) or low-res
32595// (relative to UNIX epoch), so in order to compare time we have to use the
32596// same timestamp type when saving the flush timestamp.
32597// All IE versions use low-res event timestamps, and have problematic clock
32598// implementations (#9632)
32599if (inBrowser && !isIE) {
32600  var performance = window.performance;
32601  if (
32602    performance &&
32603    typeof performance.now === 'function' &&
32604    getNow() > document.createEvent('Event').timeStamp
32605  ) {
32606    // if the event timestamp, although evaluated AFTER the Date.now(), is
32607    // smaller than it, it means the event is using a hi-res timestamp,
32608    // and we need to use the hi-res version for event listener timestamps as
32609    // well.
32610    getNow = function () { return performance.now(); };
32611  }
32612}
32613
32614/**
32615 * Flush both queues and run the watchers.
32616 */
32617function flushSchedulerQueue () {
32618  currentFlushTimestamp = getNow();
32619  flushing = true;
32620  var watcher, id;
32621
32622  // Sort queue before flush.
32623  // This ensures that:
32624  // 1. Components are updated from parent to child. (because parent is always
32625  //    created before the child)
32626  // 2. A component's user watchers are run before its render watcher (because
32627  //    user watchers are created before the render watcher)
32628  // 3. If a component is destroyed during a parent component's watcher run,
32629  //    its watchers can be skipped.
32630  queue.sort(function (a, b) { return a.id - b.id; });
32631
32632  // do not cache length because more watchers might be pushed
32633  // as we run existing watchers
32634  for (index = 0; index < queue.length; index++) {
32635    watcher = queue[index];
32636    if (watcher.before) {
32637      watcher.before();
32638    }
32639    id = watcher.id;
32640    has[id] = null;
32641    watcher.run();
32642    // in dev build, check and stop circular updates.
32643    if ( true && has[id] != null) {
32644      circular[id] = (circular[id] || 0) + 1;
32645      if (circular[id] > MAX_UPDATE_COUNT) {
32646        warn(
32647          'You may have an infinite update loop ' + (
32648            watcher.user
32649              ? ("in watcher with expression \"" + (watcher.expression) + "\"")
32650              : "in a component render function."
32651          ),
32652          watcher.vm
32653        );
32654        break
32655      }
32656    }
32657  }
32658
32659  // keep copies of post queues before resetting state
32660  var activatedQueue = activatedChildren.slice();
32661  var updatedQueue = queue.slice();
32662
32663  resetSchedulerState();
32664
32665  // call component updated and activated hooks
32666  callActivatedHooks(activatedQueue);
32667  callUpdatedHooks(updatedQueue);
32668
32669  // devtool hook
32670  /* istanbul ignore if */
32671  if (devtools && config.devtools) {
32672    devtools.emit('flush');
32673  }
32674}
32675
32676function callUpdatedHooks (queue) {
32677  var i = queue.length;
32678  while (i--) {
32679    var watcher = queue[i];
32680    var vm = watcher.vm;
32681    if (vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {
32682      callHook(vm, 'updated');
32683    }
32684  }
32685}
32686
32687/**
32688 * Queue a kept-alive component that was activated during patch.
32689 * The queue will be processed after the entire tree has been patched.
32690 */
32691function queueActivatedComponent (vm) {
32692  // setting _inactive to false here so that a render function can
32693  // rely on checking whether it's in an inactive tree (e.g. router-view)
32694  vm._inactive = false;
32695  activatedChildren.push(vm);
32696}
32697
32698function callActivatedHooks (queue) {
32699  for (var i = 0; i < queue.length; i++) {
32700    queue[i]._inactive = true;
32701    activateChildComponent(queue[i], true /* true */);
32702  }
32703}
32704
32705/**
32706 * Push a watcher into the watcher queue.
32707 * Jobs with duplicate IDs will be skipped unless it's
32708 * pushed when the queue is being flushed.
32709 */
32710function queueWatcher (watcher) {
32711  var id = watcher.id;
32712  if (has[id] == null) {
32713    has[id] = true;
32714    if (!flushing) {
32715      queue.push(watcher);
32716    } else {
32717      // if already flushing, splice the watcher based on its id
32718      // if already past its id, it will be run next immediately.
32719      var i = queue.length - 1;
32720      while (i > index && queue[i].id > watcher.id) {
32721        i--;
32722      }
32723      queue.splice(i + 1, 0, watcher);
32724    }
32725    // queue the flush
32726    if (!waiting) {
32727      waiting = true;
32728
32729      if ( true && !config.async) {
32730        flushSchedulerQueue();
32731        return
32732      }
32733      nextTick(flushSchedulerQueue);
32734    }
32735  }
32736}
32737
32738/*  */
32739
32740
32741
32742var uid$2 = 0;
32743
32744/**
32745 * A watcher parses an expression, collects dependencies,
32746 * and fires callback when the expression value changes.
32747 * This is used for both the $watch() api and directives.
32748 */
32749var Watcher = function Watcher (
32750  vm,
32751  expOrFn,
32752  cb,
32753  options,
32754  isRenderWatcher
32755) {
32756  this.vm = vm;
32757  if (isRenderWatcher) {
32758    vm._watcher = this;
32759  }
32760  vm._watchers.push(this);
32761  // options
32762  if (options) {
32763    this.deep = !!options.deep;
32764    this.user = !!options.user;
32765    this.lazy = !!options.lazy;
32766    this.sync = !!options.sync;
32767    this.before = options.before;
32768  } else {
32769    this.deep = this.user = this.lazy = this.sync = false;
32770  }
32771  this.cb = cb;
32772  this.id = ++uid$2; // uid for batching
32773  this.active = true;
32774  this.dirty = this.lazy; // for lazy watchers
32775  this.deps = [];
32776  this.newDeps = [];
32777  this.depIds = new _Set();
32778  this.newDepIds = new _Set();
32779  this.expression =  true
32780    ? expOrFn.toString()
32781    : 0;
32782  // parse expression for getter
32783  if (typeof expOrFn === 'function') {
32784    this.getter = expOrFn;
32785  } else {
32786    this.getter = parsePath(expOrFn);
32787    if (!this.getter) {
32788      this.getter = noop;
32789       true && warn(
32790        "Failed watching path: \"" + expOrFn + "\" " +
32791        'Watcher only accepts simple dot-delimited paths. ' +
32792        'For full control, use a function instead.',
32793        vm
32794      );
32795    }
32796  }
32797  this.value = this.lazy
32798    ? undefined
32799    : this.get();
32800};
32801
32802/**
32803 * Evaluate the getter, and re-collect dependencies.
32804 */
32805Watcher.prototype.get = function get () {
32806  pushTarget(this);
32807  var value;
32808  var vm = this.vm;
32809  try {
32810    value = this.getter.call(vm, vm);
32811  } catch (e) {
32812    if (this.user) {
32813      handleError(e, vm, ("getter for watcher \"" + (this.expression) + "\""));
32814    } else {
32815      throw e
32816    }
32817  } finally {
32818    // "touch" every property so they are all tracked as
32819    // dependencies for deep watching
32820    if (this.deep) {
32821      traverse(value);
32822    }
32823    popTarget();
32824    this.cleanupDeps();
32825  }
32826  return value
32827};
32828
32829/**
32830 * Add a dependency to this directive.
32831 */
32832Watcher.prototype.addDep = function addDep (dep) {
32833  var id = dep.id;
32834  if (!this.newDepIds.has(id)) {
32835    this.newDepIds.add(id);
32836    this.newDeps.push(dep);
32837    if (!this.depIds.has(id)) {
32838      dep.addSub(this);
32839    }
32840  }
32841};
32842
32843/**
32844 * Clean up for dependency collection.
32845 */
32846Watcher.prototype.cleanupDeps = function cleanupDeps () {
32847  var i = this.deps.length;
32848  while (i--) {
32849    var dep = this.deps[i];
32850    if (!this.newDepIds.has(dep.id)) {
32851      dep.removeSub(this);
32852    }
32853  }
32854  var tmp = this.depIds;
32855  this.depIds = this.newDepIds;
32856  this.newDepIds = tmp;
32857  this.newDepIds.clear();
32858  tmp = this.deps;
32859  this.deps = this.newDeps;
32860  this.newDeps = tmp;
32861  this.newDeps.length = 0;
32862};
32863
32864/**
32865 * Subscriber interface.
32866 * Will be called when a dependency changes.
32867 */
32868Watcher.prototype.update = function update () {
32869  /* istanbul ignore else */
32870  if (this.lazy) {
32871    this.dirty = true;
32872  } else if (this.sync) {
32873    this.run();
32874  } else {
32875    queueWatcher(this);
32876  }
32877};
32878
32879/**
32880 * Scheduler job interface.
32881 * Will be called by the scheduler.
32882 */
32883Watcher.prototype.run = function run () {
32884  if (this.active) {
32885    var value = this.get();
32886    if (
32887      value !== this.value ||
32888      // Deep watchers and watchers on Object/Arrays should fire even
32889      // when the value is the same, because the value may
32890      // have mutated.
32891      isObject(value) ||
32892      this.deep
32893    ) {
32894      // set new value
32895      var oldValue = this.value;
32896      this.value = value;
32897      if (this.user) {
32898        var info = "callback for watcher \"" + (this.expression) + "\"";
32899        invokeWithErrorHandling(this.cb, this.vm, [value, oldValue], this.vm, info);
32900      } else {
32901        this.cb.call(this.vm, value, oldValue);
32902      }
32903    }
32904  }
32905};
32906
32907/**
32908 * Evaluate the value of the watcher.
32909 * This only gets called for lazy watchers.
32910 */
32911Watcher.prototype.evaluate = function evaluate () {
32912  this.value = this.get();
32913  this.dirty = false;
32914};
32915
32916/**
32917 * Depend on all deps collected by this watcher.
32918 */
32919Watcher.prototype.depend = function depend () {
32920  var i = this.deps.length;
32921  while (i--) {
32922    this.deps[i].depend();
32923  }
32924};
32925
32926/**
32927 * Remove self from all dependencies' subscriber list.
32928 */
32929Watcher.prototype.teardown = function teardown () {
32930  if (this.active) {
32931    // remove self from vm's watcher list
32932    // this is a somewhat expensive operation so we skip it
32933    // if the vm is being destroyed.
32934    if (!this.vm._isBeingDestroyed) {
32935      remove(this.vm._watchers, this);
32936    }
32937    var i = this.deps.length;
32938    while (i--) {
32939      this.deps[i].removeSub(this);
32940    }
32941    this.active = false;
32942  }
32943};
32944
32945/*  */
32946
32947var sharedPropertyDefinition = {
32948  enumerable: true,
32949  configurable: true,
32950  get: noop,
32951  set: noop
32952};
32953
32954function proxy (target, sourceKey, key) {
32955  sharedPropertyDefinition.get = function proxyGetter () {
32956    return this[sourceKey][key]
32957  };
32958  sharedPropertyDefinition.set = function proxySetter (val) {
32959    this[sourceKey][key] = val;
32960  };
32961  Object.defineProperty(target, key, sharedPropertyDefinition);
32962}
32963
32964function initState (vm) {
32965  vm._watchers = [];
32966  var opts = vm.$options;
32967  if (opts.props) { initProps(vm, opts.props); }
32968  if (opts.methods) { initMethods(vm, opts.methods); }
32969  if (opts.data) {
32970    initData(vm);
32971  } else {
32972    observe(vm._data = {}, true /* asRootData */);
32973  }
32974  if (opts.computed) { initComputed(vm, opts.computed); }
32975  if (opts.watch && opts.watch !== nativeWatch) {
32976    initWatch(vm, opts.watch);
32977  }
32978}
32979
32980function initProps (vm, propsOptions) {
32981  var propsData = vm.$options.propsData || {};
32982  var props = vm._props = {};
32983  // cache prop keys so that future props updates can iterate using Array
32984  // instead of dynamic object key enumeration.
32985  var keys = vm.$options._propKeys = [];
32986  var isRoot = !vm.$parent;
32987  // root instance props should be converted
32988  if (!isRoot) {
32989    toggleObserving(false);
32990  }
32991  var loop = function ( key ) {
32992    keys.push(key);
32993    var value = validateProp(key, propsOptions, propsData, vm);
32994    /* istanbul ignore else */
32995    if (true) {
32996      var hyphenatedKey = hyphenate(key);
32997      if (isReservedAttribute(hyphenatedKey) ||
32998          config.isReservedAttr(hyphenatedKey)) {
32999        warn(
33000          ("\"" + hyphenatedKey + "\" is a reserved attribute and cannot be used as component prop."),
33001          vm
33002        );
33003      }
33004      defineReactive$$1(props, key, value, function () {
33005        if (!isRoot && !isUpdatingChildComponent) {
33006          warn(
33007            "Avoid mutating a prop directly since the value will be " +
33008            "overwritten whenever the parent component re-renders. " +
33009            "Instead, use a data or computed property based on the prop's " +
33010            "value. Prop being mutated: \"" + key + "\"",
33011            vm
33012          );
33013        }
33014      });
33015    } else {}
33016    // static props are already proxied on the component's prototype
33017    // during Vue.extend(). We only need to proxy props defined at
33018    // instantiation here.
33019    if (!(key in vm)) {
33020      proxy(vm, "_props", key);
33021    }
33022  };
33023
33024  for (var key in propsOptions) loop( key );
33025  toggleObserving(true);
33026}
33027
33028function initData (vm) {
33029  var data = vm.$options.data;
33030  data = vm._data = typeof data === 'function'
33031    ? getData(data, vm)
33032    : data || {};
33033  if (!isPlainObject(data)) {
33034    data = {};
33035     true && warn(
33036      'data functions should return an object:\n' +
33037      'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function',
33038      vm
33039    );
33040  }
33041  // proxy data on instance
33042  var keys = Object.keys(data);
33043  var props = vm.$options.props;
33044  var methods = vm.$options.methods;
33045  var i = keys.length;
33046  while (i--) {
33047    var key = keys[i];
33048    if (true) {
33049      if (methods && hasOwn(methods, key)) {
33050        warn(
33051          ("Method \"" + key + "\" has already been defined as a data property."),
33052          vm
33053        );
33054      }
33055    }
33056    if (props && hasOwn(props, key)) {
33057       true && warn(
33058        "The data property \"" + key + "\" is already declared as a prop. " +
33059        "Use prop default value instead.",
33060        vm
33061      );
33062    } else if (!isReserved(key)) {
33063      proxy(vm, "_data", key);
33064    }
33065  }
33066  // observe data
33067  observe(data, true /* asRootData */);
33068}
33069
33070function getData (data, vm) {
33071  // #7573 disable dep collection when invoking data getters
33072  pushTarget();
33073  try {
33074    return data.call(vm, vm)
33075  } catch (e) {
33076    handleError(e, vm, "data()");
33077    return {}
33078  } finally {
33079    popTarget();
33080  }
33081}
33082
33083var computedWatcherOptions = { lazy: true };
33084
33085function initComputed (vm, computed) {
33086  // $flow-disable-line
33087  var watchers = vm._computedWatchers = Object.create(null);
33088  // computed properties are just getters during SSR
33089  var isSSR = isServerRendering();
33090
33091  for (var key in computed) {
33092    var userDef = computed[key];
33093    var getter = typeof userDef === 'function' ? userDef : userDef.get;
33094    if ( true && getter == null) {
33095      warn(
33096        ("Getter is missing for computed property \"" + key + "\"."),
33097        vm
33098      );
33099    }
33100
33101    if (!isSSR) {
33102      // create internal watcher for the computed property.
33103      watchers[key] = new Watcher(
33104        vm,
33105        getter || noop,
33106        noop,
33107        computedWatcherOptions
33108      );
33109    }
33110
33111    // component-defined computed properties are already defined on the
33112    // component prototype. We only need to define computed properties defined
33113    // at instantiation here.
33114    if (!(key in vm)) {
33115      defineComputed(vm, key, userDef);
33116    } else if (true) {
33117      if (key in vm.$data) {
33118        warn(("The computed property \"" + key + "\" is already defined in data."), vm);
33119      } else if (vm.$options.props && key in vm.$options.props) {
33120        warn(("The computed property \"" + key + "\" is already defined as a prop."), vm);
33121      } else if (vm.$options.methods && key in vm.$options.methods) {
33122        warn(("The computed property \"" + key + "\" is already defined as a method."), vm);
33123      }
33124    }
33125  }
33126}
33127
33128function defineComputed (
33129  target,
33130  key,
33131  userDef
33132) {
33133  var shouldCache = !isServerRendering();
33134  if (typeof userDef === 'function') {
33135    sharedPropertyDefinition.get = shouldCache
33136      ? createComputedGetter(key)
33137      : createGetterInvoker(userDef);
33138    sharedPropertyDefinition.set = noop;
33139  } else {
33140    sharedPropertyDefinition.get = userDef.get
33141      ? shouldCache && userDef.cache !== false
33142        ? createComputedGetter(key)
33143        : createGetterInvoker(userDef.get)
33144      : noop;
33145    sharedPropertyDefinition.set = userDef.set || noop;
33146  }
33147  if ( true &&
33148      sharedPropertyDefinition.set === noop) {
33149    sharedPropertyDefinition.set = function () {
33150      warn(
33151        ("Computed property \"" + key + "\" was assigned to but it has no setter."),
33152        this
33153      );
33154    };
33155  }
33156  Object.defineProperty(target, key, sharedPropertyDefinition);
33157}
33158
33159function createComputedGetter (key) {
33160  return function computedGetter () {
33161    var watcher = this._computedWatchers && this._computedWatchers[key];
33162    if (watcher) {
33163      if (watcher.dirty) {
33164        watcher.evaluate();
33165      }
33166      if (Dep.target) {
33167        watcher.depend();
33168      }
33169      return watcher.value
33170    }
33171  }
33172}
33173
33174function createGetterInvoker(fn) {
33175  return function computedGetter () {
33176    return fn.call(this, this)
33177  }
33178}
33179
33180function initMethods (vm, methods) {
33181  var props = vm.$options.props;
33182  for (var key in methods) {
33183    if (true) {
33184      if (typeof methods[key] !== 'function') {
33185        warn(
33186          "Method \"" + key + "\" has type \"" + (typeof methods[key]) + "\" in the component definition. " +
33187          "Did you reference the function correctly?",
33188          vm
33189        );
33190      }
33191      if (props && hasOwn(props, key)) {
33192        warn(
33193          ("Method \"" + key + "\" has already been defined as a prop."),
33194          vm
33195        );
33196      }
33197      if ((key in vm) && isReserved(key)) {
33198        warn(
33199          "Method \"" + key + "\" conflicts with an existing Vue instance method. " +
33200          "Avoid defining component methods that start with _ or $."
33201        );
33202      }
33203    }
33204    vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm);
33205  }
33206}
33207
33208function initWatch (vm, watch) {
33209  for (var key in watch) {
33210    var handler = watch[key];
33211    if (Array.isArray(handler)) {
33212      for (var i = 0; i < handler.length; i++) {
33213        createWatcher(vm, key, handler[i]);
33214      }
33215    } else {
33216      createWatcher(vm, key, handler);
33217    }
33218  }
33219}
33220
33221function createWatcher (
33222  vm,
33223  expOrFn,
33224  handler,
33225  options
33226) {
33227  if (isPlainObject(handler)) {
33228    options = handler;
33229    handler = handler.handler;
33230  }
33231  if (typeof handler === 'string') {
33232    handler = vm[handler];
33233  }
33234  return vm.$watch(expOrFn, handler, options)
33235}
33236
33237function stateMixin (Vue) {
33238  // flow somehow has problems with directly declared definition object
33239  // when using Object.defineProperty, so we have to procedurally build up
33240  // the object here.
33241  var dataDef = {};
33242  dataDef.get = function () { return this._data };
33243  var propsDef = {};
33244  propsDef.get = function () { return this._props };
33245  if (true) {
33246    dataDef.set = function () {
33247      warn(
33248        'Avoid replacing instance root $data. ' +
33249        'Use nested data properties instead.',
33250        this
33251      );
33252    };
33253    propsDef.set = function () {
33254      warn("$props is readonly.", this);
33255    };
33256  }
33257  Object.defineProperty(Vue.prototype, '$data', dataDef);
33258  Object.defineProperty(Vue.prototype, '$props', propsDef);
33259
33260  Vue.prototype.$set = set;
33261  Vue.prototype.$delete = del;
33262
33263  Vue.prototype.$watch = function (
33264    expOrFn,
33265    cb,
33266    options
33267  ) {
33268    var vm = this;
33269    if (isPlainObject(cb)) {
33270      return createWatcher(vm, expOrFn, cb, options)
33271    }
33272    options = options || {};
33273    options.user = true;
33274    var watcher = new Watcher(vm, expOrFn, cb, options);
33275    if (options.immediate) {
33276      var info = "callback for immediate watcher \"" + (watcher.expression) + "\"";
33277      pushTarget();
33278      invokeWithErrorHandling(cb, vm, [watcher.value], vm, info);
33279      popTarget();
33280    }
33281    return function unwatchFn () {
33282      watcher.teardown();
33283    }
33284  };
33285}
33286
33287/*  */
33288
33289var uid$3 = 0;
33290
33291function initMixin (Vue) {
33292  Vue.prototype._init = function (options) {
33293    var vm = this;
33294    // a uid
33295    vm._uid = uid$3++;
33296
33297    var startTag, endTag;
33298    /* istanbul ignore if */
33299    if ( true && config.performance && mark) {
33300      startTag = "vue-perf-start:" + (vm._uid);
33301      endTag = "vue-perf-end:" + (vm._uid);
33302      mark(startTag);
33303    }
33304
33305    // a flag to avoid this being observed
33306    vm._isVue = true;
33307    // merge options
33308    if (options && options._isComponent) {
33309      // optimize internal component instantiation
33310      // since dynamic options merging is pretty slow, and none of the
33311      // internal component options needs special treatment.
33312      initInternalComponent(vm, options);
33313    } else {
33314      vm.$options = mergeOptions(
33315        resolveConstructorOptions(vm.constructor),
33316        options || {},
33317        vm
33318      );
33319    }
33320    /* istanbul ignore else */
33321    if (true) {
33322      initProxy(vm);
33323    } else {}
33324    // expose real self
33325    vm._self = vm;
33326    initLifecycle(vm);
33327    initEvents(vm);
33328    initRender(vm);
33329    callHook(vm, 'beforeCreate');
33330    initInjections(vm); // resolve injections before data/props
33331    initState(vm);
33332    initProvide(vm); // resolve provide after data/props
33333    callHook(vm, 'created');
33334
33335    /* istanbul ignore if */
33336    if ( true && config.performance && mark) {
33337      vm._name = formatComponentName(vm, false);
33338      mark(endTag);
33339      measure(("vue " + (vm._name) + " init"), startTag, endTag);
33340    }
33341
33342    if (vm.$options.el) {
33343      vm.$mount(vm.$options.el);
33344    }
33345  };
33346}
33347
33348function initInternalComponent (vm, options) {
33349  var opts = vm.$options = Object.create(vm.constructor.options);
33350  // doing this because it's faster than dynamic enumeration.
33351  var parentVnode = options._parentVnode;
33352  opts.parent = options.parent;
33353  opts._parentVnode = parentVnode;
33354
33355  var vnodeComponentOptions = parentVnode.componentOptions;
33356  opts.propsData = vnodeComponentOptions.propsData;
33357  opts._parentListeners = vnodeComponentOptions.listeners;
33358  opts._renderChildren = vnodeComponentOptions.children;
33359  opts._componentTag = vnodeComponentOptions.tag;
33360
33361  if (options.render) {
33362    opts.render = options.render;
33363    opts.staticRenderFns = options.staticRenderFns;
33364  }
33365}
33366
33367function resolveConstructorOptions (Ctor) {
33368  var options = Ctor.options;
33369  if (Ctor.super) {
33370    var superOptions = resolveConstructorOptions(Ctor.super);
33371    var cachedSuperOptions = Ctor.superOptions;
33372    if (superOptions !== cachedSuperOptions) {
33373      // super option changed,
33374      // need to resolve new options.
33375      Ctor.superOptions = superOptions;
33376      // check if there are any late-modified/attached options (#4976)
33377      var modifiedOptions = resolveModifiedOptions(Ctor);
33378      // update base extend options
33379      if (modifiedOptions) {
33380        extend(Ctor.extendOptions, modifiedOptions);
33381      }
33382      options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);
33383      if (options.name) {
33384        options.components[options.name] = Ctor;
33385      }
33386    }
33387  }
33388  return options
33389}
33390
33391function resolveModifiedOptions (Ctor) {
33392  var modified;
33393  var latest = Ctor.options;
33394  var sealed = Ctor.sealedOptions;
33395  for (var key in latest) {
33396    if (latest[key] !== sealed[key]) {
33397      if (!modified) { modified = {}; }
33398      modified[key] = latest[key];
33399    }
33400  }
33401  return modified
33402}
33403
33404function Vue (options) {
33405  if ( true &&
33406    !(this instanceof Vue)
33407  ) {
33408    warn('Vue is a constructor and should be called with the `new` keyword');
33409  }
33410  this._init(options);
33411}
33412
33413initMixin(Vue);
33414stateMixin(Vue);
33415eventsMixin(Vue);
33416lifecycleMixin(Vue);
33417renderMixin(Vue);
33418
33419/*  */
33420
33421function initUse (Vue) {
33422  Vue.use = function (plugin) {
33423    var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));
33424    if (installedPlugins.indexOf(plugin) > -1) {
33425      return this
33426    }
33427
33428    // additional parameters
33429    var args = toArray(arguments, 1);
33430    args.unshift(this);
33431    if (typeof plugin.install === 'function') {
33432      plugin.install.apply(plugin, args);
33433    } else if (typeof plugin === 'function') {
33434      plugin.apply(null, args);
33435    }
33436    installedPlugins.push(plugin);
33437    return this
33438  };
33439}
33440
33441/*  */
33442
33443function initMixin$1 (Vue) {
33444  Vue.mixin = function (mixin) {
33445    this.options = mergeOptions(this.options, mixin);
33446    return this
33447  };
33448}
33449
33450/*  */
33451
33452function initExtend (Vue) {
33453  /**
33454   * Each instance constructor, including Vue, has a unique
33455   * cid. This enables us to create wrapped "child
33456   * constructors" for prototypal inheritance and cache them.
33457   */
33458  Vue.cid = 0;
33459  var cid = 1;
33460
33461  /**
33462   * Class inheritance
33463   */
33464  Vue.extend = function (extendOptions) {
33465    extendOptions = extendOptions || {};
33466    var Super = this;
33467    var SuperId = Super.cid;
33468    var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});
33469    if (cachedCtors[SuperId]) {
33470      return cachedCtors[SuperId]
33471    }
33472
33473    var name = extendOptions.name || Super.options.name;
33474    if ( true && name) {
33475      validateComponentName(name);
33476    }
33477
33478    var Sub = function VueComponent (options) {
33479      this._init(options);
33480    };
33481    Sub.prototype = Object.create(Super.prototype);
33482    Sub.prototype.constructor = Sub;
33483    Sub.cid = cid++;
33484    Sub.options = mergeOptions(
33485      Super.options,
33486      extendOptions
33487    );
33488    Sub['super'] = Super;
33489
33490    // For props and computed properties, we define the proxy getters on
33491    // the Vue instances at extension time, on the extended prototype. This
33492    // avoids Object.defineProperty calls for each instance created.
33493    if (Sub.options.props) {
33494      initProps$1(Sub);
33495    }
33496    if (Sub.options.computed) {
33497      initComputed$1(Sub);
33498    }
33499
33500    // allow further extension/mixin/plugin usage
33501    Sub.extend = Super.extend;
33502    Sub.mixin = Super.mixin;
33503    Sub.use = Super.use;
33504
33505    // create asset registers, so extended classes
33506    // can have their private assets too.
33507    ASSET_TYPES.forEach(function (type) {
33508      Sub[type] = Super[type];
33509    });
33510    // enable recursive self-lookup
33511    if (name) {
33512      Sub.options.components[name] = Sub;
33513    }
33514
33515    // keep a reference to the super options at extension time.
33516    // later at instantiation we can check if Super's options have
33517    // been updated.
33518    Sub.superOptions = Super.options;
33519    Sub.extendOptions = extendOptions;
33520    Sub.sealedOptions = extend({}, Sub.options);
33521
33522    // cache constructor
33523    cachedCtors[SuperId] = Sub;
33524    return Sub
33525  };
33526}
33527
33528function initProps$1 (Comp) {
33529  var props = Comp.options.props;
33530  for (var key in props) {
33531    proxy(Comp.prototype, "_props", key);
33532  }
33533}
33534
33535function initComputed$1 (Comp) {
33536  var computed = Comp.options.computed;
33537  for (var key in computed) {
33538    defineComputed(Comp.prototype, key, computed[key]);
33539  }
33540}
33541
33542/*  */
33543
33544function initAssetRegisters (Vue) {
33545  /**
33546   * Create asset registration methods.
33547   */
33548  ASSET_TYPES.forEach(function (type) {
33549    Vue[type] = function (
33550      id,
33551      definition
33552    ) {
33553      if (!definition) {
33554        return this.options[type + 's'][id]
33555      } else {
33556        /* istanbul ignore if */
33557        if ( true && type === 'component') {
33558          validateComponentName(id);
33559        }
33560        if (type === 'component' && isPlainObject(definition)) {
33561          definition.name = definition.name || id;
33562          definition = this.options._base.extend(definition);
33563        }
33564        if (type === 'directive' && typeof definition === 'function') {
33565          definition = { bind: definition, update: definition };
33566        }
33567        this.options[type + 's'][id] = definition;
33568        return definition
33569      }
33570    };
33571  });
33572}
33573
33574/*  */
33575
33576
33577
33578
33579
33580function getComponentName (opts) {
33581  return opts && (opts.Ctor.options.name || opts.tag)
33582}
33583
33584function matches (pattern, name) {
33585  if (Array.isArray(pattern)) {
33586    return pattern.indexOf(name) > -1
33587  } else if (typeof pattern === 'string') {
33588    return pattern.split(',').indexOf(name) > -1
33589  } else if (isRegExp(pattern)) {
33590    return pattern.test(name)
33591  }
33592  /* istanbul ignore next */
33593  return false
33594}
33595
33596function pruneCache (keepAliveInstance, filter) {
33597  var cache = keepAliveInstance.cache;
33598  var keys = keepAliveInstance.keys;
33599  var _vnode = keepAliveInstance._vnode;
33600  for (var key in cache) {
33601    var entry = cache[key];
33602    if (entry) {
33603      var name = entry.name;
33604      if (name && !filter(name)) {
33605        pruneCacheEntry(cache, key, keys, _vnode);
33606      }
33607    }
33608  }
33609}
33610
33611function pruneCacheEntry (
33612  cache,
33613  key,
33614  keys,
33615  current
33616) {
33617  var entry = cache[key];
33618  if (entry && (!current || entry.tag !== current.tag)) {
33619    entry.componentInstance.$destroy();
33620  }
33621  cache[key] = null;
33622  remove(keys, key);
33623}
33624
33625var patternTypes = [String, RegExp, Array];
33626
33627var KeepAlive = {
33628  name: 'keep-alive',
33629  abstract: true,
33630
33631  props: {
33632    include: patternTypes,
33633    exclude: patternTypes,
33634    max: [String, Number]
33635  },
33636
33637  methods: {
33638    cacheVNode: function cacheVNode() {
33639      var ref = this;
33640      var cache = ref.cache;
33641      var keys = ref.keys;
33642      var vnodeToCache = ref.vnodeToCache;
33643      var keyToCache = ref.keyToCache;
33644      if (vnodeToCache) {
33645        var tag = vnodeToCache.tag;
33646        var componentInstance = vnodeToCache.componentInstance;
33647        var componentOptions = vnodeToCache.componentOptions;
33648        cache[keyToCache] = {
33649          name: getComponentName(componentOptions),
33650          tag: tag,
33651          componentInstance: componentInstance,
33652        };
33653        keys.push(keyToCache);
33654        // prune oldest entry
33655        if (this.max && keys.length > parseInt(this.max)) {
33656          pruneCacheEntry(cache, keys[0], keys, this._vnode);
33657        }
33658        this.vnodeToCache = null;
33659      }
33660    }
33661  },
33662
33663  created: function created () {
33664    this.cache = Object.create(null);
33665    this.keys = [];
33666  },
33667
33668  destroyed: function destroyed () {
33669    for (var key in this.cache) {
33670      pruneCacheEntry(this.cache, key, this.keys);
33671    }
33672  },
33673
33674  mounted: function mounted () {
33675    var this$1 = this;
33676
33677    this.cacheVNode();
33678    this.$watch('include', function (val) {
33679      pruneCache(this$1, function (name) { return matches(val, name); });
33680    });
33681    this.$watch('exclude', function (val) {
33682      pruneCache(this$1, function (name) { return !matches(val, name); });
33683    });
33684  },
33685
33686  updated: function updated () {
33687    this.cacheVNode();
33688  },
33689
33690  render: function render () {
33691    var slot = this.$slots.default;
33692    var vnode = getFirstComponentChild(slot);
33693    var componentOptions = vnode && vnode.componentOptions;
33694    if (componentOptions) {
33695      // check pattern
33696      var name = getComponentName(componentOptions);
33697      var ref = this;
33698      var include = ref.include;
33699      var exclude = ref.exclude;
33700      if (
33701        // not included
33702        (include && (!name || !matches(include, name))) ||
33703        // excluded
33704        (exclude && name && matches(exclude, name))
33705      ) {
33706        return vnode
33707      }
33708
33709      var ref$1 = this;
33710      var cache = ref$1.cache;
33711      var keys = ref$1.keys;
33712      var key = vnode.key == null
33713        // same constructor may get registered as different local components
33714        // so cid alone is not enough (#3269)
33715        ? componentOptions.Ctor.cid + (componentOptions.tag ? ("::" + (componentOptions.tag)) : '')
33716        : vnode.key;
33717      if (cache[key]) {
33718        vnode.componentInstance = cache[key].componentInstance;
33719        // make current key freshest
33720        remove(keys, key);
33721        keys.push(key);
33722      } else {
33723        // delay setting the cache until update
33724        this.vnodeToCache = vnode;
33725        this.keyToCache = key;
33726      }
33727
33728      vnode.data.keepAlive = true;
33729    }
33730    return vnode || (slot && slot[0])
33731  }
33732};
33733
33734var builtInComponents = {
33735  KeepAlive: KeepAlive
33736};
33737
33738/*  */
33739
33740function initGlobalAPI (Vue) {
33741  // config
33742  var configDef = {};
33743  configDef.get = function () { return config; };
33744  if (true) {
33745    configDef.set = function () {
33746      warn(
33747        'Do not replace the Vue.config object, set individual fields instead.'
33748      );
33749    };
33750  }
33751  Object.defineProperty(Vue, 'config', configDef);
33752
33753  // exposed util methods.
33754  // NOTE: these are not considered part of the public API - avoid relying on
33755  // them unless you are aware of the risk.
33756  Vue.util = {
33757    warn: warn,
33758    extend: extend,
33759    mergeOptions: mergeOptions,
33760    defineReactive: defineReactive$$1
33761  };
33762
33763  Vue.set = set;
33764  Vue.delete = del;
33765  Vue.nextTick = nextTick;
33766
33767  // 2.6 explicit observable API
33768  Vue.observable = function (obj) {
33769    observe(obj);
33770    return obj
33771  };
33772
33773  Vue.options = Object.create(null);
33774  ASSET_TYPES.forEach(function (type) {
33775    Vue.options[type + 's'] = Object.create(null);
33776  });
33777
33778  // this is used to identify the "base" constructor to extend all plain-object
33779  // components with in Weex's multi-instance scenarios.
33780  Vue.options._base = Vue;
33781
33782  extend(Vue.options.components, builtInComponents);
33783
33784  initUse(Vue);
33785  initMixin$1(Vue);
33786  initExtend(Vue);
33787  initAssetRegisters(Vue);
33788}
33789
33790initGlobalAPI(Vue);
33791
33792Object.defineProperty(Vue.prototype, '$isServer', {
33793  get: isServerRendering
33794});
33795
33796Object.defineProperty(Vue.prototype, '$ssrContext', {
33797  get: function get () {
33798    /* istanbul ignore next */
33799    return this.$vnode && this.$vnode.ssrContext
33800  }
33801});
33802
33803// expose FunctionalRenderContext for ssr runtime helper installation
33804Object.defineProperty(Vue, 'FunctionalRenderContext', {
33805  value: FunctionalRenderContext
33806});
33807
33808Vue.version = '2.6.14';
33809
33810/*  */
33811
33812// these are reserved for web because they are directly compiled away
33813// during template compilation
33814var isReservedAttr = makeMap('style,class');
33815
33816// attributes that should be using props for binding
33817var acceptValue = makeMap('input,textarea,option,select,progress');
33818var mustUseProp = function (tag, type, attr) {
33819  return (
33820    (attr === 'value' && acceptValue(tag)) && type !== 'button' ||
33821    (attr === 'selected' && tag === 'option') ||
33822    (attr === 'checked' && tag === 'input') ||
33823    (attr === 'muted' && tag === 'video')
33824  )
33825};
33826
33827var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');
33828
33829var isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');
33830
33831var convertEnumeratedValue = function (key, value) {
33832  return isFalsyAttrValue(value) || value === 'false'
33833    ? 'false'
33834    // allow arbitrary string value for contenteditable
33835    : key === 'contenteditable' && isValidContentEditableValue(value)
33836      ? value
33837      : 'true'
33838};
33839
33840var isBooleanAttr = makeMap(
33841  'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +
33842  'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +
33843  'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +
33844  'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +
33845  'required,reversed,scoped,seamless,selected,sortable,' +
33846  'truespeed,typemustmatch,visible'
33847);
33848
33849var xlinkNS = 'http://www.w3.org/1999/xlink';
33850
33851var isXlink = function (name) {
33852  return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'
33853};
33854
33855var getXlinkProp = function (name) {
33856  return isXlink(name) ? name.slice(6, name.length) : ''
33857};
33858
33859var isFalsyAttrValue = function (val) {
33860  return val == null || val === false
33861};
33862
33863/*  */
33864
33865function genClassForVnode (vnode) {
33866  var data = vnode.data;
33867  var parentNode = vnode;
33868  var childNode = vnode;
33869  while (isDef(childNode.componentInstance)) {
33870    childNode = childNode.componentInstance._vnode;
33871    if (childNode && childNode.data) {
33872      data = mergeClassData(childNode.data, data);
33873    }
33874  }
33875  while (isDef(parentNode = parentNode.parent)) {
33876    if (parentNode && parentNode.data) {
33877      data = mergeClassData(data, parentNode.data);
33878    }
33879  }
33880  return renderClass(data.staticClass, data.class)
33881}
33882
33883function mergeClassData (child, parent) {
33884  return {
33885    staticClass: concat(child.staticClass, parent.staticClass),
33886    class: isDef(child.class)
33887      ? [child.class, parent.class]
33888      : parent.class
33889  }
33890}
33891
33892function renderClass (
33893  staticClass,
33894  dynamicClass
33895) {
33896  if (isDef(staticClass) || isDef(dynamicClass)) {
33897    return concat(staticClass, stringifyClass(dynamicClass))
33898  }
33899  /* istanbul ignore next */
33900  return ''
33901}
33902
33903function concat (a, b) {
33904  return a ? b ? (a + ' ' + b) : a : (b || '')
33905}
33906
33907function stringifyClass (value) {
33908  if (Array.isArray(value)) {
33909    return stringifyArray(value)
33910  }
33911  if (isObject(value)) {
33912    return stringifyObject(value)
33913  }
33914  if (typeof value === 'string') {
33915    return value
33916  }
33917  /* istanbul ignore next */
33918  return ''
33919}
33920
33921function stringifyArray (value) {
33922  var res = '';
33923  var stringified;
33924  for (var i = 0, l = value.length; i < l; i++) {
33925    if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {
33926      if (res) { res += ' '; }
33927      res += stringified;
33928    }
33929  }
33930  return res
33931}
33932
33933function stringifyObject (value) {
33934  var res = '';
33935  for (var key in value) {
33936    if (value[key]) {
33937      if (res) { res += ' '; }
33938      res += key;
33939    }
33940  }
33941  return res
33942}
33943
33944/*  */
33945
33946var namespaceMap = {
33947  svg: 'http://www.w3.org/2000/svg',
33948  math: 'http://www.w3.org/1998/Math/MathML'
33949};
33950
33951var isHTMLTag = makeMap(
33952  'html,body,base,head,link,meta,style,title,' +
33953  'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +
33954  'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +
33955  'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +
33956  's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +
33957  'embed,object,param,source,canvas,script,noscript,del,ins,' +
33958  'caption,col,colgroup,table,thead,tbody,td,th,tr,' +
33959  'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +
33960  'output,progress,select,textarea,' +
33961  'details,dialog,menu,menuitem,summary,' +
33962  'content,element,shadow,template,blockquote,iframe,tfoot'
33963);
33964
33965// this map is intentionally selective, only covering SVG elements that may
33966// contain child elements.
33967var isSVG = makeMap(
33968  'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +
33969  'foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +
33970  'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',
33971  true
33972);
33973
33974var isPreTag = function (tag) { return tag === 'pre'; };
33975
33976var isReservedTag = function (tag) {
33977  return isHTMLTag(tag) || isSVG(tag)
33978};
33979
33980function getTagNamespace (tag) {
33981  if (isSVG(tag)) {
33982    return 'svg'
33983  }
33984  // basic support for MathML
33985  // note it doesn't support other MathML elements being component roots
33986  if (tag === 'math') {
33987    return 'math'
33988  }
33989}
33990
33991var unknownElementCache = Object.create(null);
33992function isUnknownElement (tag) {
33993  /* istanbul ignore if */
33994  if (!inBrowser) {
33995    return true
33996  }
33997  if (isReservedTag(tag)) {
33998    return false
33999  }
34000  tag = tag.toLowerCase();
34001  /* istanbul ignore if */
34002  if (unknownElementCache[tag] != null) {
34003    return unknownElementCache[tag]
34004  }
34005  var el = document.createElement(tag);
34006  if (tag.indexOf('-') > -1) {
34007    // http://stackoverflow.com/a/28210364/1070244
34008    return (unknownElementCache[tag] = (
34009      el.constructor === window.HTMLUnknownElement ||
34010      el.constructor === window.HTMLElement
34011    ))
34012  } else {
34013    return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()))
34014  }
34015}
34016
34017var isTextInputType = makeMap('text,number,password,search,email,tel,url');
34018
34019/*  */
34020
34021/**
34022 * Query an element selector if it's not an element already.
34023 */
34024function query (el) {
34025  if (typeof el === 'string') {
34026    var selected = document.querySelector(el);
34027    if (!selected) {
34028       true && warn(
34029        'Cannot find element: ' + el
34030      );
34031      return document.createElement('div')
34032    }
34033    return selected
34034  } else {
34035    return el
34036  }
34037}
34038
34039/*  */
34040
34041function createElement$1 (tagName, vnode) {
34042  var elm = document.createElement(tagName);
34043  if (tagName !== 'select') {
34044    return elm
34045  }
34046  // false or null will remove the attribute but undefined will not
34047  if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) {
34048    elm.setAttribute('multiple', 'multiple');
34049  }
34050  return elm
34051}
34052
34053function createElementNS (namespace, tagName) {
34054  return document.createElementNS(namespaceMap[namespace], tagName)
34055}
34056
34057function createTextNode (text) {
34058  return document.createTextNode(text)
34059}
34060
34061function createComment (text) {
34062  return document.createComment(text)
34063}
34064
34065function insertBefore (parentNode, newNode, referenceNode) {
34066  parentNode.insertBefore(newNode, referenceNode);
34067}
34068
34069function removeChild (node, child) {
34070  node.removeChild(child);
34071}
34072
34073function appendChild (node, child) {
34074  node.appendChild(child);
34075}
34076
34077function parentNode (node) {
34078  return node.parentNode
34079}
34080
34081function nextSibling (node) {
34082  return node.nextSibling
34083}
34084
34085function tagName (node) {
34086  return node.tagName
34087}
34088
34089function setTextContent (node, text) {
34090  node.textContent = text;
34091}
34092
34093function setStyleScope (node, scopeId) {
34094  node.setAttribute(scopeId, '');
34095}
34096
34097var nodeOps = /*#__PURE__*/Object.freeze({
34098  createElement: createElement$1,
34099  createElementNS: createElementNS,
34100  createTextNode: createTextNode,
34101  createComment: createComment,
34102  insertBefore: insertBefore,
34103  removeChild: removeChild,
34104  appendChild: appendChild,
34105  parentNode: parentNode,
34106  nextSibling: nextSibling,
34107  tagName: tagName,
34108  setTextContent: setTextContent,
34109  setStyleScope: setStyleScope
34110});
34111
34112/*  */
34113
34114var ref = {
34115  create: function create (_, vnode) {
34116    registerRef(vnode);
34117  },
34118  update: function update (oldVnode, vnode) {
34119    if (oldVnode.data.ref !== vnode.data.ref) {
34120      registerRef(oldVnode, true);
34121      registerRef(vnode);
34122    }
34123  },
34124  destroy: function destroy (vnode) {
34125    registerRef(vnode, true);
34126  }
34127};
34128
34129function registerRef (vnode, isRemoval) {
34130  var key = vnode.data.ref;
34131  if (!isDef(key)) { return }
34132
34133  var vm = vnode.context;
34134  var ref = vnode.componentInstance || vnode.elm;
34135  var refs = vm.$refs;
34136  if (isRemoval) {
34137    if (Array.isArray(refs[key])) {
34138      remove(refs[key], ref);
34139    } else if (refs[key] === ref) {
34140      refs[key] = undefined;
34141    }
34142  } else {
34143    if (vnode.data.refInFor) {
34144      if (!Array.isArray(refs[key])) {
34145        refs[key] = [ref];
34146      } else if (refs[key].indexOf(ref) < 0) {
34147        // $flow-disable-line
34148        refs[key].push(ref);
34149      }
34150    } else {
34151      refs[key] = ref;
34152    }
34153  }
34154}
34155
34156/**
34157 * Virtual DOM patching algorithm based on Snabbdom by
34158 * Simon Friis Vindum (@paldepind)
34159 * Licensed under the MIT License
34160 * https://github.com/paldepind/snabbdom/blob/master/LICENSE
34161 *
34162 * modified by Evan You (@yyx990803)
34163 *
34164 * Not type-checking this because this file is perf-critical and the cost
34165 * of making flow understand it is not worth it.
34166 */
34167
34168var emptyNode = new VNode('', {}, []);
34169
34170var hooks = ['create', 'activate', 'update', 'remove', 'destroy'];
34171
34172function sameVnode (a, b) {
34173  return (
34174    a.key === b.key &&
34175    a.asyncFactory === b.asyncFactory && (
34176      (
34177        a.tag === b.tag &&
34178        a.isComment === b.isComment &&
34179        isDef(a.data) === isDef(b.data) &&
34180        sameInputType(a, b)
34181      ) || (
34182        isTrue(a.isAsyncPlaceholder) &&
34183        isUndef(b.asyncFactory.error)
34184      )
34185    )
34186  )
34187}
34188
34189function sameInputType (a, b) {
34190  if (a.tag !== 'input') { return true }
34191  var i;
34192  var typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type;
34193  var typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type;
34194  return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB)
34195}
34196
34197function createKeyToOldIdx (children, beginIdx, endIdx) {
34198  var i, key;
34199  var map = {};
34200  for (i = beginIdx; i <= endIdx; ++i) {
34201    key = children[i].key;
34202    if (isDef(key)) { map[key] = i; }
34203  }
34204  return map
34205}
34206
34207function createPatchFunction (backend) {
34208  var i, j;
34209  var cbs = {};
34210
34211  var modules = backend.modules;
34212  var nodeOps = backend.nodeOps;
34213
34214  for (i = 0; i < hooks.length; ++i) {
34215    cbs[hooks[i]] = [];
34216    for (j = 0; j < modules.length; ++j) {
34217      if (isDef(modules[j][hooks[i]])) {
34218        cbs[hooks[i]].push(modules[j][hooks[i]]);
34219      }
34220    }
34221  }
34222
34223  function emptyNodeAt (elm) {
34224    return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm)
34225  }
34226
34227  function createRmCb (childElm, listeners) {
34228    function remove$$1 () {
34229      if (--remove$$1.listeners === 0) {
34230        removeNode(childElm);
34231      }
34232    }
34233    remove$$1.listeners = listeners;
34234    return remove$$1
34235  }
34236
34237  function removeNode (el) {
34238    var parent = nodeOps.parentNode(el);
34239    // element may have already been removed due to v-html / v-text
34240    if (isDef(parent)) {
34241      nodeOps.removeChild(parent, el);
34242    }
34243  }
34244
34245  function isUnknownElement$$1 (vnode, inVPre) {
34246    return (
34247      !inVPre &&
34248      !vnode.ns &&
34249      !(
34250        config.ignoredElements.length &&
34251        config.ignoredElements.some(function (ignore) {
34252          return isRegExp(ignore)
34253            ? ignore.test(vnode.tag)
34254            : ignore === vnode.tag
34255        })
34256      ) &&
34257      config.isUnknownElement(vnode.tag)
34258    )
34259  }
34260
34261  var creatingElmInVPre = 0;
34262
34263  function createElm (
34264    vnode,
34265    insertedVnodeQueue,
34266    parentElm,
34267    refElm,
34268    nested,
34269    ownerArray,
34270    index
34271  ) {
34272    if (isDef(vnode.elm) && isDef(ownerArray)) {
34273      // This vnode was used in a previous render!
34274      // now it's used as a new node, overwriting its elm would cause
34275      // potential patch errors down the road when it's used as an insertion
34276      // reference node. Instead, we clone the node on-demand before creating
34277      // associated DOM element for it.
34278      vnode = ownerArray[index] = cloneVNode(vnode);
34279    }
34280
34281    vnode.isRootInsert = !nested; // for transition enter check
34282    if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {
34283      return
34284    }
34285
34286    var data = vnode.data;
34287    var children = vnode.children;
34288    var tag = vnode.tag;
34289    if (isDef(tag)) {
34290      if (true) {
34291        if (data && data.pre) {
34292          creatingElmInVPre++;
34293        }
34294        if (isUnknownElement$$1(vnode, creatingElmInVPre)) {
34295          warn(
34296            'Unknown custom element: <' + tag + '> - did you ' +
34297            'register the component correctly? For recursive components, ' +
34298            'make sure to provide the "name" option.',
34299            vnode.context
34300          );
34301        }
34302      }
34303
34304      vnode.elm = vnode.ns
34305        ? nodeOps.createElementNS(vnode.ns, tag)
34306        : nodeOps.createElement(tag, vnode);
34307      setScope(vnode);
34308
34309      /* istanbul ignore if */
34310      {
34311        createChildren(vnode, children, insertedVnodeQueue);
34312        if (isDef(data)) {
34313          invokeCreateHooks(vnode, insertedVnodeQueue);
34314        }
34315        insert(parentElm, vnode.elm, refElm);
34316      }
34317
34318      if ( true && data && data.pre) {
34319        creatingElmInVPre--;
34320      }
34321    } else if (isTrue(vnode.isComment)) {
34322      vnode.elm = nodeOps.createComment(vnode.text);
34323      insert(parentElm, vnode.elm, refElm);
34324    } else {
34325      vnode.elm = nodeOps.createTextNode(vnode.text);
34326      insert(parentElm, vnode.elm, refElm);
34327    }
34328  }
34329
34330  function createComponent (vnode, insertedVnodeQueue, parentElm, refElm) {
34331    var i = vnode.data;
34332    if (isDef(i)) {
34333      var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;
34334      if (isDef(i = i.hook) && isDef(i = i.init)) {
34335        i(vnode, false /* hydrating */);
34336      }
34337      // after calling the init hook, if the vnode is a child component
34338      // it should've created a child instance and mounted it. the child
34339      // component also has set the placeholder vnode's elm.
34340      // in that case we can just return the element and be done.
34341      if (isDef(vnode.componentInstance)) {
34342        initComponent(vnode, insertedVnodeQueue);
34343        insert(parentElm, vnode.elm, refElm);
34344        if (isTrue(isReactivated)) {
34345          reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);
34346        }
34347        return true
34348      }
34349    }
34350  }
34351
34352  function initComponent (vnode, insertedVnodeQueue) {
34353    if (isDef(vnode.data.pendingInsert)) {
34354      insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);
34355      vnode.data.pendingInsert = null;
34356    }
34357    vnode.elm = vnode.componentInstance.$el;
34358    if (isPatchable(vnode)) {
34359      invokeCreateHooks(vnode, insertedVnodeQueue);
34360      setScope(vnode);
34361    } else {
34362      // empty component root.
34363      // skip all element-related modules except for ref (#3455)
34364      registerRef(vnode);
34365      // make sure to invoke the insert hook
34366      insertedVnodeQueue.push(vnode);
34367    }
34368  }
34369
34370  function reactivateComponent (vnode, insertedVnodeQueue, parentElm, refElm) {
34371    var i;
34372    // hack for #4339: a reactivated component with inner transition
34373    // does not trigger because the inner node's created hooks are not called
34374    // again. It's not ideal to involve module-specific logic in here but
34375    // there doesn't seem to be a better way to do it.
34376    var innerNode = vnode;
34377    while (innerNode.componentInstance) {
34378      innerNode = innerNode.componentInstance._vnode;
34379      if (isDef(i = innerNode.data) && isDef(i = i.transition)) {
34380        for (i = 0; i < cbs.activate.length; ++i) {
34381          cbs.activate[i](emptyNode, innerNode);
34382        }
34383        insertedVnodeQueue.push(innerNode);
34384        break
34385      }
34386    }
34387    // unlike a newly created component,
34388    // a reactivated keep-alive component doesn't insert itself
34389    insert(parentElm, vnode.elm, refElm);
34390  }
34391
34392  function insert (parent, elm, ref$$1) {
34393    if (isDef(parent)) {
34394      if (isDef(ref$$1)) {
34395        if (nodeOps.parentNode(ref$$1) === parent) {
34396          nodeOps.insertBefore(parent, elm, ref$$1);
34397        }
34398      } else {
34399        nodeOps.appendChild(parent, elm);
34400      }
34401    }
34402  }
34403
34404  function createChildren (vnode, children, insertedVnodeQueue) {
34405    if (Array.isArray(children)) {
34406      if (true) {
34407        checkDuplicateKeys(children);
34408      }
34409      for (var i = 0; i < children.length; ++i) {
34410        createElm(children[i], insertedVnodeQueue, vnode.elm, null, true, children, i);
34411      }
34412    } else if (isPrimitive(vnode.text)) {
34413      nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));
34414    }
34415  }
34416
34417  function isPatchable (vnode) {
34418    while (vnode.componentInstance) {
34419      vnode = vnode.componentInstance._vnode;
34420    }
34421    return isDef(vnode.tag)
34422  }
34423
34424  function invokeCreateHooks (vnode, insertedVnodeQueue) {
34425    for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {
34426      cbs.create[i$1](emptyNode, vnode);
34427    }
34428    i = vnode.data.hook; // Reuse variable
34429    if (isDef(i)) {
34430      if (isDef(i.create)) { i.create(emptyNode, vnode); }
34431      if (isDef(i.insert)) { insertedVnodeQueue.push(vnode); }
34432    }
34433  }
34434
34435  // set scope id attribute for scoped CSS.
34436  // this is implemented as a special case to avoid the overhead
34437  // of going through the normal attribute patching process.
34438  function setScope (vnode) {
34439    var i;
34440    if (isDef(i = vnode.fnScopeId)) {
34441      nodeOps.setStyleScope(vnode.elm, i);
34442    } else {
34443      var ancestor = vnode;
34444      while (ancestor) {
34445        if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) {
34446          nodeOps.setStyleScope(vnode.elm, i);
34447        }
34448        ancestor = ancestor.parent;
34449      }
34450    }
34451    // for slot content they should also get the scopeId from the host instance.
34452    if (isDef(i = activeInstance) &&
34453      i !== vnode.context &&
34454      i !== vnode.fnContext &&
34455      isDef(i = i.$options._scopeId)
34456    ) {
34457      nodeOps.setStyleScope(vnode.elm, i);
34458    }
34459  }
34460
34461  function addVnodes (parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {
34462    for (; startIdx <= endIdx; ++startIdx) {
34463      createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);
34464    }
34465  }
34466
34467  function invokeDestroyHook (vnode) {
34468    var i, j;
34469    var data = vnode.data;
34470    if (isDef(data)) {
34471      if (isDef(i = data.hook) && isDef(i = i.destroy)) { i(vnode); }
34472      for (i = 0; i < cbs.destroy.length; ++i) { cbs.destroy[i](vnode); }
34473    }
34474    if (isDef(i = vnode.children)) {
34475      for (j = 0; j < vnode.children.length; ++j) {
34476        invokeDestroyHook(vnode.children[j]);
34477      }
34478    }
34479  }
34480
34481  function removeVnodes (vnodes, startIdx, endIdx) {
34482    for (; startIdx <= endIdx; ++startIdx) {
34483      var ch = vnodes[startIdx];
34484      if (isDef(ch)) {
34485        if (isDef(ch.tag)) {
34486          removeAndInvokeRemoveHook(ch);
34487          invokeDestroyHook(ch);
34488        } else { // Text node
34489          removeNode(ch.elm);
34490        }
34491      }
34492    }
34493  }
34494
34495  function removeAndInvokeRemoveHook (vnode, rm) {
34496    if (isDef(rm) || isDef(vnode.data)) {
34497      var i;
34498      var listeners = cbs.remove.length + 1;
34499      if (isDef(rm)) {
34500        // we have a recursively passed down rm callback
34501        // increase the listeners count
34502        rm.listeners += listeners;
34503      } else {
34504        // directly removing
34505        rm = createRmCb(vnode.elm, listeners);
34506      }
34507      // recursively invoke hooks on child component root node
34508      if (isDef(i = vnode.componentInstance) && isDef(i = i._vnode) && isDef(i.data)) {
34509        removeAndInvokeRemoveHook(i, rm);
34510      }
34511      for (i = 0; i < cbs.remove.length; ++i) {
34512        cbs.remove[i](vnode, rm);
34513      }
34514      if (isDef(i = vnode.data.hook) && isDef(i = i.remove)) {
34515        i(vnode, rm);
34516      } else {
34517        rm();
34518      }
34519    } else {
34520      removeNode(vnode.elm);
34521    }
34522  }
34523
34524  function updateChildren (parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {
34525    var oldStartIdx = 0;
34526    var newStartIdx = 0;
34527    var oldEndIdx = oldCh.length - 1;
34528    var oldStartVnode = oldCh[0];
34529    var oldEndVnode = oldCh[oldEndIdx];
34530    var newEndIdx = newCh.length - 1;
34531    var newStartVnode = newCh[0];
34532    var newEndVnode = newCh[newEndIdx];
34533    var oldKeyToIdx, idxInOld, vnodeToMove, refElm;
34534
34535    // removeOnly is a special flag used only by <transition-group>
34536    // to ensure removed elements stay in correct relative positions
34537    // during leaving transitions
34538    var canMove = !removeOnly;
34539
34540    if (true) {
34541      checkDuplicateKeys(newCh);
34542    }
34543
34544    while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {
34545      if (isUndef(oldStartVnode)) {
34546        oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left
34547      } else if (isUndef(oldEndVnode)) {
34548        oldEndVnode = oldCh[--oldEndIdx];
34549      } else if (sameVnode(oldStartVnode, newStartVnode)) {
34550        patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
34551        oldStartVnode = oldCh[++oldStartIdx];
34552        newStartVnode = newCh[++newStartIdx];
34553      } else if (sameVnode(oldEndVnode, newEndVnode)) {
34554        patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);
34555        oldEndVnode = oldCh[--oldEndIdx];
34556        newEndVnode = newCh[--newEndIdx];
34557      } else if (sameVnode(oldStartVnode, newEndVnode)) { // Vnode moved right
34558        patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);
34559        canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));
34560        oldStartVnode = oldCh[++oldStartIdx];
34561        newEndVnode = newCh[--newEndIdx];
34562      } else if (sameVnode(oldEndVnode, newStartVnode)) { // Vnode moved left
34563        patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
34564        canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);
34565        oldEndVnode = oldCh[--oldEndIdx];
34566        newStartVnode = newCh[++newStartIdx];
34567      } else {
34568        if (isUndef(oldKeyToIdx)) { oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); }
34569        idxInOld = isDef(newStartVnode.key)
34570          ? oldKeyToIdx[newStartVnode.key]
34571          : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);
34572        if (isUndef(idxInOld)) { // New element
34573          createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
34574        } else {
34575          vnodeToMove = oldCh[idxInOld];
34576          if (sameVnode(vnodeToMove, newStartVnode)) {
34577            patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
34578            oldCh[idxInOld] = undefined;
34579            canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);
34580          } else {
34581            // same key but different element. treat as new element
34582            createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
34583          }
34584        }
34585        newStartVnode = newCh[++newStartIdx];
34586      }
34587    }
34588    if (oldStartIdx > oldEndIdx) {
34589      refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;
34590      addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);
34591    } else if (newStartIdx > newEndIdx) {
34592      removeVnodes(oldCh, oldStartIdx, oldEndIdx);
34593    }
34594  }
34595
34596  function checkDuplicateKeys (children) {
34597    var seenKeys = {};
34598    for (var i = 0; i < children.length; i++) {
34599      var vnode = children[i];
34600      var key = vnode.key;
34601      if (isDef(key)) {
34602        if (seenKeys[key]) {
34603          warn(
34604            ("Duplicate keys detected: '" + key + "'. This may cause an update error."),
34605            vnode.context
34606          );
34607        } else {
34608          seenKeys[key] = true;
34609        }
34610      }
34611    }
34612  }
34613
34614  function findIdxInOld (node, oldCh, start, end) {
34615    for (var i = start; i < end; i++) {
34616      var c = oldCh[i];
34617      if (isDef(c) && sameVnode(node, c)) { return i }
34618    }
34619  }
34620
34621  function patchVnode (
34622    oldVnode,
34623    vnode,
34624    insertedVnodeQueue,
34625    ownerArray,
34626    index,
34627    removeOnly
34628  ) {
34629    if (oldVnode === vnode) {
34630      return
34631    }
34632
34633    if (isDef(vnode.elm) && isDef(ownerArray)) {
34634      // clone reused vnode
34635      vnode = ownerArray[index] = cloneVNode(vnode);
34636    }
34637
34638    var elm = vnode.elm = oldVnode.elm;
34639
34640    if (isTrue(oldVnode.isAsyncPlaceholder)) {
34641      if (isDef(vnode.asyncFactory.resolved)) {
34642        hydrate(oldVnode.elm, vnode, insertedVnodeQueue);
34643      } else {
34644        vnode.isAsyncPlaceholder = true;
34645      }
34646      return
34647    }
34648
34649    // reuse element for static trees.
34650    // note we only do this if the vnode is cloned -
34651    // if the new node is not cloned it means the render functions have been
34652    // reset by the hot-reload-api and we need to do a proper re-render.
34653    if (isTrue(vnode.isStatic) &&
34654      isTrue(oldVnode.isStatic) &&
34655      vnode.key === oldVnode.key &&
34656      (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))
34657    ) {
34658      vnode.componentInstance = oldVnode.componentInstance;
34659      return
34660    }
34661
34662    var i;
34663    var data = vnode.data;
34664    if (isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch)) {
34665      i(oldVnode, vnode);
34666    }
34667
34668    var oldCh = oldVnode.children;
34669    var ch = vnode.children;
34670    if (isDef(data) && isPatchable(vnode)) {
34671      for (i = 0; i < cbs.update.length; ++i) { cbs.update[i](oldVnode, vnode); }
34672      if (isDef(i = data.hook) && isDef(i = i.update)) { i(oldVnode, vnode); }
34673    }
34674    if (isUndef(vnode.text)) {
34675      if (isDef(oldCh) && isDef(ch)) {
34676        if (oldCh !== ch) { updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); }
34677      } else if (isDef(ch)) {
34678        if (true) {
34679          checkDuplicateKeys(ch);
34680        }
34681        if (isDef(oldVnode.text)) { nodeOps.setTextContent(elm, ''); }
34682        addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);
34683      } else if (isDef(oldCh)) {
34684        removeVnodes(oldCh, 0, oldCh.length - 1);
34685      } else if (isDef(oldVnode.text)) {
34686        nodeOps.setTextContent(elm, '');
34687      }
34688    } else if (oldVnode.text !== vnode.text) {
34689      nodeOps.setTextContent(elm, vnode.text);
34690    }
34691    if (isDef(data)) {
34692      if (isDef(i = data.hook) && isDef(i = i.postpatch)) { i(oldVnode, vnode); }
34693    }
34694  }
34695
34696  function invokeInsertHook (vnode, queue, initial) {
34697    // delay insert hooks for component root nodes, invoke them after the
34698    // element is really inserted
34699    if (isTrue(initial) && isDef(vnode.parent)) {
34700      vnode.parent.data.pendingInsert = queue;
34701    } else {
34702      for (var i = 0; i < queue.length; ++i) {
34703        queue[i].data.hook.insert(queue[i]);
34704      }
34705    }
34706  }
34707
34708  var hydrationBailed = false;
34709  // list of modules that can skip create hook during hydration because they
34710  // are already rendered on the client or has no need for initialization
34711  // Note: style is excluded because it relies on initial clone for future
34712  // deep updates (#7063).
34713  var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');
34714
34715  // Note: this is a browser-only function so we can assume elms are DOM nodes.
34716  function hydrate (elm, vnode, insertedVnodeQueue, inVPre) {
34717    var i;
34718    var tag = vnode.tag;
34719    var data = vnode.data;
34720    var children = vnode.children;
34721    inVPre = inVPre || (data && data.pre);
34722    vnode.elm = elm;
34723
34724    if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {
34725      vnode.isAsyncPlaceholder = true;
34726      return true
34727    }
34728    // assert node match
34729    if (true) {
34730      if (!assertNodeMatch(elm, vnode, inVPre)) {
34731        return false
34732      }
34733    }
34734    if (isDef(data)) {
34735      if (isDef(i = data.hook) && isDef(i = i.init)) { i(vnode, true /* hydrating */); }
34736      if (isDef(i = vnode.componentInstance)) {
34737        // child component. it should have hydrated its own tree.
34738        initComponent(vnode, insertedVnodeQueue);
34739        return true
34740      }
34741    }
34742    if (isDef(tag)) {
34743      if (isDef(children)) {
34744        // empty element, allow client to pick up and populate children
34745        if (!elm.hasChildNodes()) {
34746          createChildren(vnode, children, insertedVnodeQueue);
34747        } else {
34748          // v-html and domProps: innerHTML
34749          if (isDef(i = data) && isDef(i = i.domProps) && isDef(i = i.innerHTML)) {
34750            if (i !== elm.innerHTML) {
34751              /* istanbul ignore if */
34752              if ( true &&
34753                typeof console !== 'undefined' &&
34754                !hydrationBailed
34755              ) {
34756                hydrationBailed = true;
34757                console.warn('Parent: ', elm);
34758                console.warn('server innerHTML: ', i);
34759                console.warn('client innerHTML: ', elm.innerHTML);
34760              }
34761              return false
34762            }
34763          } else {
34764            // iterate and compare children lists
34765            var childrenMatch = true;
34766            var childNode = elm.firstChild;
34767            for (var i$1 = 0; i$1 < children.length; i$1++) {
34768              if (!childNode || !hydrate(childNode, children[i$1], insertedVnodeQueue, inVPre)) {
34769                childrenMatch = false;
34770                break
34771              }
34772              childNode = childNode.nextSibling;
34773            }
34774            // if childNode is not null, it means the actual childNodes list is
34775            // longer than the virtual children list.
34776            if (!childrenMatch || childNode) {
34777              /* istanbul ignore if */
34778              if ( true &&
34779                typeof console !== 'undefined' &&
34780                !hydrationBailed
34781              ) {
34782                hydrationBailed = true;
34783                console.warn('Parent: ', elm);
34784                console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);
34785              }
34786              return false
34787            }
34788          }
34789        }
34790      }
34791      if (isDef(data)) {
34792        var fullInvoke = false;
34793        for (var key in data) {
34794          if (!isRenderedModule(key)) {
34795            fullInvoke = true;
34796            invokeCreateHooks(vnode, insertedVnodeQueue);
34797            break
34798          }
34799        }
34800        if (!fullInvoke && data['class']) {
34801          // ensure collecting deps for deep class bindings for future updates
34802          traverse(data['class']);
34803        }
34804      }
34805    } else if (elm.data !== vnode.text) {
34806      elm.data = vnode.text;
34807    }
34808    return true
34809  }
34810
34811  function assertNodeMatch (node, vnode, inVPre) {
34812    if (isDef(vnode.tag)) {
34813      return vnode.tag.indexOf('vue-component') === 0 || (
34814        !isUnknownElement$$1(vnode, inVPre) &&
34815        vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase())
34816      )
34817    } else {
34818      return node.nodeType === (vnode.isComment ? 8 : 3)
34819    }
34820  }
34821
34822  return function patch (oldVnode, vnode, hydrating, removeOnly) {
34823    if (isUndef(vnode)) {
34824      if (isDef(oldVnode)) { invokeDestroyHook(oldVnode); }
34825      return
34826    }
34827
34828    var isInitialPatch = false;
34829    var insertedVnodeQueue = [];
34830
34831    if (isUndef(oldVnode)) {
34832      // empty mount (likely as component), create new root element
34833      isInitialPatch = true;
34834      createElm(vnode, insertedVnodeQueue);
34835    } else {
34836      var isRealElement = isDef(oldVnode.nodeType);
34837      if (!isRealElement && sameVnode(oldVnode, vnode)) {
34838        // patch existing root node
34839        patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);
34840      } else {
34841        if (isRealElement) {
34842          // mounting to a real element
34843          // check if this is server-rendered content and if we can perform
34844          // a successful hydration.
34845          if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {
34846            oldVnode.removeAttribute(SSR_ATTR);
34847            hydrating = true;
34848          }
34849          if (isTrue(hydrating)) {
34850            if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {
34851              invokeInsertHook(vnode, insertedVnodeQueue, true);
34852              return oldVnode
34853            } else if (true) {
34854              warn(
34855                'The client-side rendered virtual DOM tree is not matching ' +
34856                'server-rendered content. This is likely caused by incorrect ' +
34857                'HTML markup, for example nesting block-level elements inside ' +
34858                '<p>, or missing <tbody>. Bailing hydration and performing ' +
34859                'full client-side render.'
34860              );
34861            }
34862          }
34863          // either not server-rendered, or hydration failed.
34864          // create an empty node and replace it
34865          oldVnode = emptyNodeAt(oldVnode);
34866        }
34867
34868        // replacing existing element
34869        var oldElm = oldVnode.elm;
34870        var parentElm = nodeOps.parentNode(oldElm);
34871
34872        // create new node
34873        createElm(
34874          vnode,
34875          insertedVnodeQueue,
34876          // extremely rare edge case: do not insert if old element is in a
34877          // leaving transition. Only happens when combining transition +
34878          // keep-alive + HOCs. (#4590)
34879          oldElm._leaveCb ? null : parentElm,
34880          nodeOps.nextSibling(oldElm)
34881        );
34882
34883        // update parent placeholder node element, recursively
34884        if (isDef(vnode.parent)) {
34885          var ancestor = vnode.parent;
34886          var patchable = isPatchable(vnode);
34887          while (ancestor) {
34888            for (var i = 0; i < cbs.destroy.length; ++i) {
34889              cbs.destroy[i](ancestor);
34890            }
34891            ancestor.elm = vnode.elm;
34892            if (patchable) {
34893              for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {
34894                cbs.create[i$1](emptyNode, ancestor);
34895              }
34896              // #6513
34897              // invoke insert hooks that may have been merged by create hooks.
34898              // e.g. for directives that uses the "inserted" hook.
34899              var insert = ancestor.data.hook.insert;
34900              if (insert.merged) {
34901                // start at index 1 to avoid re-invoking component mounted hook
34902                for (var i$2 = 1; i$2 < insert.fns.length; i$2++) {
34903                  insert.fns[i$2]();
34904                }
34905              }
34906            } else {
34907              registerRef(ancestor);
34908            }
34909            ancestor = ancestor.parent;
34910          }
34911        }
34912
34913        // destroy old node
34914        if (isDef(parentElm)) {
34915          removeVnodes([oldVnode], 0, 0);
34916        } else if (isDef(oldVnode.tag)) {
34917          invokeDestroyHook(oldVnode);
34918        }
34919      }
34920    }
34921
34922    invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);
34923    return vnode.elm
34924  }
34925}
34926
34927/*  */
34928
34929var directives = {
34930  create: updateDirectives,
34931  update: updateDirectives,
34932  destroy: function unbindDirectives (vnode) {
34933    updateDirectives(vnode, emptyNode);
34934  }
34935};
34936
34937function updateDirectives (oldVnode, vnode) {
34938  if (oldVnode.data.directives || vnode.data.directives) {
34939    _update(oldVnode, vnode);
34940  }
34941}
34942
34943function _update (oldVnode, vnode) {
34944  var isCreate = oldVnode === emptyNode;
34945  var isDestroy = vnode === emptyNode;
34946  var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);
34947  var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);
34948
34949  var dirsWithInsert = [];
34950  var dirsWithPostpatch = [];
34951
34952  var key, oldDir, dir;
34953  for (key in newDirs) {
34954    oldDir = oldDirs[key];
34955    dir = newDirs[key];
34956    if (!oldDir) {
34957      // new directive, bind
34958      callHook$1(dir, 'bind', vnode, oldVnode);
34959      if (dir.def && dir.def.inserted) {
34960        dirsWithInsert.push(dir);
34961      }
34962    } else {
34963      // existing directive, update
34964      dir.oldValue = oldDir.value;
34965      dir.oldArg = oldDir.arg;
34966      callHook$1(dir, 'update', vnode, oldVnode);
34967      if (dir.def && dir.def.componentUpdated) {
34968        dirsWithPostpatch.push(dir);
34969      }
34970    }
34971  }
34972
34973  if (dirsWithInsert.length) {
34974    var callInsert = function () {
34975      for (var i = 0; i < dirsWithInsert.length; i++) {
34976        callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode);
34977      }
34978    };
34979    if (isCreate) {
34980      mergeVNodeHook(vnode, 'insert', callInsert);
34981    } else {
34982      callInsert();
34983    }
34984  }
34985
34986  if (dirsWithPostpatch.length) {
34987    mergeVNodeHook(vnode, 'postpatch', function () {
34988      for (var i = 0; i < dirsWithPostpatch.length; i++) {
34989        callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);
34990      }
34991    });
34992  }
34993
34994  if (!isCreate) {
34995    for (key in oldDirs) {
34996      if (!newDirs[key]) {
34997        // no longer present, unbind
34998        callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);
34999      }
35000    }
35001  }
35002}
35003
35004var emptyModifiers = Object.create(null);
35005
35006function normalizeDirectives$1 (
35007  dirs,
35008  vm
35009) {
35010  var res = Object.create(null);
35011  if (!dirs) {
35012    // $flow-disable-line
35013    return res
35014  }
35015  var i, dir;
35016  for (i = 0; i < dirs.length; i++) {
35017    dir = dirs[i];
35018    if (!dir.modifiers) {
35019      // $flow-disable-line
35020      dir.modifiers = emptyModifiers;
35021    }
35022    res[getRawDirName(dir)] = dir;
35023    dir.def = resolveAsset(vm.$options, 'directives', dir.name, true);
35024  }
35025  // $flow-disable-line
35026  return res
35027}
35028
35029function getRawDirName (dir) {
35030  return dir.rawName || ((dir.name) + "." + (Object.keys(dir.modifiers || {}).join('.')))
35031}
35032
35033function callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {
35034  var fn = dir.def && dir.def[hook];
35035  if (fn) {
35036    try {
35037      fn(vnode.elm, dir, vnode, oldVnode, isDestroy);
35038    } catch (e) {
35039      handleError(e, vnode.context, ("directive " + (dir.name) + " " + hook + " hook"));
35040    }
35041  }
35042}
35043
35044var baseModules = [
35045  ref,
35046  directives
35047];
35048
35049/*  */
35050
35051function updateAttrs (oldVnode, vnode) {
35052  var opts = vnode.componentOptions;
35053  if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {
35054    return
35055  }
35056  if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {
35057    return
35058  }
35059  var key, cur, old;
35060  var elm = vnode.elm;
35061  var oldAttrs = oldVnode.data.attrs || {};
35062  var attrs = vnode.data.attrs || {};
35063  // clone observed objects, as the user probably wants to mutate it
35064  if (isDef(attrs.__ob__)) {
35065    attrs = vnode.data.attrs = extend({}, attrs);
35066  }
35067
35068  for (key in attrs) {
35069    cur = attrs[key];
35070    old = oldAttrs[key];
35071    if (old !== cur) {
35072      setAttr(elm, key, cur, vnode.data.pre);
35073    }
35074  }
35075  // #4391: in IE9, setting type can reset value for input[type=radio]
35076  // #6666: IE/Edge forces progress value down to 1 before setting a max
35077  /* istanbul ignore if */
35078  if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {
35079    setAttr(elm, 'value', attrs.value);
35080  }
35081  for (key in oldAttrs) {
35082    if (isUndef(attrs[key])) {
35083      if (isXlink(key)) {
35084        elm.removeAttributeNS(xlinkNS, getXlinkProp(key));
35085      } else if (!isEnumeratedAttr(key)) {
35086        elm.removeAttribute(key);
35087      }
35088    }
35089  }
35090}
35091
35092function setAttr (el, key, value, isInPre) {
35093  if (isInPre || el.tagName.indexOf('-') > -1) {
35094    baseSetAttr(el, key, value);
35095  } else if (isBooleanAttr(key)) {
35096    // set attribute for blank value
35097    // e.g. <option disabled>Select one</option>
35098    if (isFalsyAttrValue(value)) {
35099      el.removeAttribute(key);
35100    } else {
35101      // technically allowfullscreen is a boolean attribute for <iframe>,
35102      // but Flash expects a value of "true" when used on <embed> tag
35103      value = key === 'allowfullscreen' && el.tagName === 'EMBED'
35104        ? 'true'
35105        : key;
35106      el.setAttribute(key, value);
35107    }
35108  } else if (isEnumeratedAttr(key)) {
35109    el.setAttribute(key, convertEnumeratedValue(key, value));
35110  } else if (isXlink(key)) {
35111    if (isFalsyAttrValue(value)) {
35112      el.removeAttributeNS(xlinkNS, getXlinkProp(key));
35113    } else {
35114      el.setAttributeNS(xlinkNS, key, value);
35115    }
35116  } else {
35117    baseSetAttr(el, key, value);
35118  }
35119}
35120
35121function baseSetAttr (el, key, value) {
35122  if (isFalsyAttrValue(value)) {
35123    el.removeAttribute(key);
35124  } else {
35125    // #7138: IE10 & 11 fires input event when setting placeholder on
35126    // <textarea>... block the first input event and remove the blocker
35127    // immediately.
35128    /* istanbul ignore if */
35129    if (
35130      isIE && !isIE9 &&
35131      el.tagName === 'TEXTAREA' &&
35132      key === 'placeholder' && value !== '' && !el.__ieph
35133    ) {
35134      var blocker = function (e) {
35135        e.stopImmediatePropagation();
35136        el.removeEventListener('input', blocker);
35137      };
35138      el.addEventListener('input', blocker);
35139      // $flow-disable-line
35140      el.__ieph = true; /* IE placeholder patched */
35141    }
35142    el.setAttribute(key, value);
35143  }
35144}
35145
35146var attrs = {
35147  create: updateAttrs,
35148  update: updateAttrs
35149};
35150
35151/*  */
35152
35153function updateClass (oldVnode, vnode) {
35154  var el = vnode.elm;
35155  var data = vnode.data;
35156  var oldData = oldVnode.data;
35157  if (
35158    isUndef(data.staticClass) &&
35159    isUndef(data.class) && (
35160      isUndef(oldData) || (
35161        isUndef(oldData.staticClass) &&
35162        isUndef(oldData.class)
35163      )
35164    )
35165  ) {
35166    return
35167  }
35168
35169  var cls = genClassForVnode(vnode);
35170
35171  // handle transition classes
35172  var transitionClass = el._transitionClasses;
35173  if (isDef(transitionClass)) {
35174    cls = concat(cls, stringifyClass(transitionClass));
35175  }
35176
35177  // set the class
35178  if (cls !== el._prevClass) {
35179    el.setAttribute('class', cls);
35180    el._prevClass = cls;
35181  }
35182}
35183
35184var klass = {
35185  create: updateClass,
35186  update: updateClass
35187};
35188
35189/*  */
35190
35191var validDivisionCharRE = /[\w).+\-_$\]]/;
35192
35193function parseFilters (exp) {
35194  var inSingle = false;
35195  var inDouble = false;
35196  var inTemplateString = false;
35197  var inRegex = false;
35198  var curly = 0;
35199  var square = 0;
35200  var paren = 0;
35201  var lastFilterIndex = 0;
35202  var c, prev, i, expression, filters;
35203
35204  for (i = 0; i < exp.length; i++) {
35205    prev = c;
35206    c = exp.charCodeAt(i);
35207    if (inSingle) {
35208      if (c === 0x27 && prev !== 0x5C) { inSingle = false; }
35209    } else if (inDouble) {
35210      if (c === 0x22 && prev !== 0x5C) { inDouble = false; }
35211    } else if (inTemplateString) {
35212      if (c === 0x60 && prev !== 0x5C) { inTemplateString = false; }
35213    } else if (inRegex) {
35214      if (c === 0x2f && prev !== 0x5C) { inRegex = false; }
35215    } else if (
35216      c === 0x7C && // pipe
35217      exp.charCodeAt(i + 1) !== 0x7C &&
35218      exp.charCodeAt(i - 1) !== 0x7C &&
35219      !curly && !square && !paren
35220    ) {
35221      if (expression === undefined) {
35222        // first filter, end of expression
35223        lastFilterIndex = i + 1;
35224        expression = exp.slice(0, i).trim();
35225      } else {
35226        pushFilter();
35227      }
35228    } else {
35229      switch (c) {
35230        case 0x22: inDouble = true; break         // "
35231        case 0x27: inSingle = true; break         // '
35232        case 0x60: inTemplateString = true; break // `
35233        case 0x28: paren++; break                 // (
35234        case 0x29: paren--; break                 // )
35235        case 0x5B: square++; break                // [
35236        case 0x5D: square--; break                // ]
35237        case 0x7B: curly++; break                 // {
35238        case 0x7D: curly--; break                 // }
35239      }
35240      if (c === 0x2f) { // /
35241        var j = i - 1;
35242        var p = (void 0);
35243        // find first non-whitespace prev char
35244        for (; j >= 0; j--) {
35245          p = exp.charAt(j);
35246          if (p !== ' ') { break }
35247        }
35248        if (!p || !validDivisionCharRE.test(p)) {
35249          inRegex = true;
35250        }
35251      }
35252    }
35253  }
35254
35255  if (expression === undefined) {
35256    expression = exp.slice(0, i).trim();
35257  } else if (lastFilterIndex !== 0) {
35258    pushFilter();
35259  }
35260
35261  function pushFilter () {
35262    (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());
35263    lastFilterIndex = i + 1;
35264  }
35265
35266  if (filters) {
35267    for (i = 0; i < filters.length; i++) {
35268      expression = wrapFilter(expression, filters[i]);
35269    }
35270  }
35271
35272  return expression
35273}
35274
35275function wrapFilter (exp, filter) {
35276  var i = filter.indexOf('(');
35277  if (i < 0) {
35278    // _f: resolveFilter
35279    return ("_f(\"" + filter + "\")(" + exp + ")")
35280  } else {
35281    var name = filter.slice(0, i);
35282    var args = filter.slice(i + 1);
35283    return ("_f(\"" + name + "\")(" + exp + (args !== ')' ? ',' + args : args))
35284  }
35285}
35286
35287/*  */
35288
35289
35290
35291/* eslint-disable no-unused-vars */
35292function baseWarn (msg, range) {
35293  console.error(("[Vue compiler]: " + msg));
35294}
35295/* eslint-enable no-unused-vars */
35296
35297function pluckModuleFunction (
35298  modules,
35299  key
35300) {
35301  return modules
35302    ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; })
35303    : []
35304}
35305
35306function addProp (el, name, value, range, dynamic) {
35307  (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));
35308  el.plain = false;
35309}
35310
35311function addAttr (el, name, value, range, dynamic) {
35312  var attrs = dynamic
35313    ? (el.dynamicAttrs || (el.dynamicAttrs = []))
35314    : (el.attrs || (el.attrs = []));
35315  attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));
35316  el.plain = false;
35317}
35318
35319// add a raw attr (use this in preTransforms)
35320function addRawAttr (el, name, value, range) {
35321  el.attrsMap[name] = value;
35322  el.attrsList.push(rangeSetItem({ name: name, value: value }, range));
35323}
35324
35325function addDirective (
35326  el,
35327  name,
35328  rawName,
35329  value,
35330  arg,
35331  isDynamicArg,
35332  modifiers,
35333  range
35334) {
35335  (el.directives || (el.directives = [])).push(rangeSetItem({
35336    name: name,
35337    rawName: rawName,
35338    value: value,
35339    arg: arg,
35340    isDynamicArg: isDynamicArg,
35341    modifiers: modifiers
35342  }, range));
35343  el.plain = false;
35344}
35345
35346function prependModifierMarker (symbol, name, dynamic) {
35347  return dynamic
35348    ? ("_p(" + name + ",\"" + symbol + "\")")
35349    : symbol + name // mark the event as captured
35350}
35351
35352function addHandler (
35353  el,
35354  name,
35355  value,
35356  modifiers,
35357  important,
35358  warn,
35359  range,
35360  dynamic
35361) {
35362  modifiers = modifiers || emptyObject;
35363  // warn prevent and passive modifier
35364  /* istanbul ignore if */
35365  if (
35366     true && warn &&
35367    modifiers.prevent && modifiers.passive
35368  ) {
35369    warn(
35370      'passive and prevent can\'t be used together. ' +
35371      'Passive handler can\'t prevent default event.',
35372      range
35373    );
35374  }
35375
35376  // normalize click.right and click.middle since they don't actually fire
35377  // this is technically browser-specific, but at least for now browsers are
35378  // the only target envs that have right/middle clicks.
35379  if (modifiers.right) {
35380    if (dynamic) {
35381      name = "(" + name + ")==='click'?'contextmenu':(" + name + ")";
35382    } else if (name === 'click') {
35383      name = 'contextmenu';
35384      delete modifiers.right;
35385    }
35386  } else if (modifiers.middle) {
35387    if (dynamic) {
35388      name = "(" + name + ")==='click'?'mouseup':(" + name + ")";
35389    } else if (name === 'click') {
35390      name = 'mouseup';
35391    }
35392  }
35393
35394  // check capture modifier
35395  if (modifiers.capture) {
35396    delete modifiers.capture;
35397    name = prependModifierMarker('!', name, dynamic);
35398  }
35399  if (modifiers.once) {
35400    delete modifiers.once;
35401    name = prependModifierMarker('~', name, dynamic);
35402  }
35403  /* istanbul ignore if */
35404  if (modifiers.passive) {
35405    delete modifiers.passive;
35406    name = prependModifierMarker('&', name, dynamic);
35407  }
35408
35409  var events;
35410  if (modifiers.native) {
35411    delete modifiers.native;
35412    events = el.nativeEvents || (el.nativeEvents = {});
35413  } else {
35414    events = el.events || (el.events = {});
35415  }
35416
35417  var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range);
35418  if (modifiers !== emptyObject) {
35419    newHandler.modifiers = modifiers;
35420  }
35421
35422  var handlers = events[name];
35423  /* istanbul ignore if */
35424  if (Array.isArray(handlers)) {
35425    important ? handlers.unshift(newHandler) : handlers.push(newHandler);
35426  } else if (handlers) {
35427    events[name] = important ? [newHandler, handlers] : [handlers, newHandler];
35428  } else {
35429    events[name] = newHandler;
35430  }
35431
35432  el.plain = false;
35433}
35434
35435function getRawBindingAttr (
35436  el,
35437  name
35438) {
35439  return el.rawAttrsMap[':' + name] ||
35440    el.rawAttrsMap['v-bind:' + name] ||
35441    el.rawAttrsMap[name]
35442}
35443
35444function getBindingAttr (
35445  el,
35446  name,
35447  getStatic
35448) {
35449  var dynamicValue =
35450    getAndRemoveAttr(el, ':' + name) ||
35451    getAndRemoveAttr(el, 'v-bind:' + name);
35452  if (dynamicValue != null) {
35453    return parseFilters(dynamicValue)
35454  } else if (getStatic !== false) {
35455    var staticValue = getAndRemoveAttr(el, name);
35456    if (staticValue != null) {
35457      return JSON.stringify(staticValue)
35458    }
35459  }
35460}
35461
35462// note: this only removes the attr from the Array (attrsList) so that it
35463// doesn't get processed by processAttrs.
35464// By default it does NOT remove it from the map (attrsMap) because the map is
35465// needed during codegen.
35466function getAndRemoveAttr (
35467  el,
35468  name,
35469  removeFromMap
35470) {
35471  var val;
35472  if ((val = el.attrsMap[name]) != null) {
35473    var list = el.attrsList;
35474    for (var i = 0, l = list.length; i < l; i++) {
35475      if (list[i].name === name) {
35476        list.splice(i, 1);
35477        break
35478      }
35479    }
35480  }
35481  if (removeFromMap) {
35482    delete el.attrsMap[name];
35483  }
35484  return val
35485}
35486
35487function getAndRemoveAttrByRegex (
35488  el,
35489  name
35490) {
35491  var list = el.attrsList;
35492  for (var i = 0, l = list.length; i < l; i++) {
35493    var attr = list[i];
35494    if (name.test(attr.name)) {
35495      list.splice(i, 1);
35496      return attr
35497    }
35498  }
35499}
35500
35501function rangeSetItem (
35502  item,
35503  range
35504) {
35505  if (range) {
35506    if (range.start != null) {
35507      item.start = range.start;
35508    }
35509    if (range.end != null) {
35510      item.end = range.end;
35511    }
35512  }
35513  return item
35514}
35515
35516/*  */
35517
35518/**
35519 * Cross-platform code generation for component v-model
35520 */
35521function genComponentModel (
35522  el,
35523  value,
35524  modifiers
35525) {
35526  var ref = modifiers || {};
35527  var number = ref.number;
35528  var trim = ref.trim;
35529
35530  var baseValueExpression = '$$v';
35531  var valueExpression = baseValueExpression;
35532  if (trim) {
35533    valueExpression =
35534      "(typeof " + baseValueExpression + " === 'string'" +
35535      "? " + baseValueExpression + ".trim()" +
35536      ": " + baseValueExpression + ")";
35537  }
35538  if (number) {
35539    valueExpression = "_n(" + valueExpression + ")";
35540  }
35541  var assignment = genAssignmentCode(value, valueExpression);
35542
35543  el.model = {
35544    value: ("(" + value + ")"),
35545    expression: JSON.stringify(value),
35546    callback: ("function (" + baseValueExpression + ") {" + assignment + "}")
35547  };
35548}
35549
35550/**
35551 * Cross-platform codegen helper for generating v-model value assignment code.
35552 */
35553function genAssignmentCode (
35554  value,
35555  assignment
35556) {
35557  var res = parseModel(value);
35558  if (res.key === null) {
35559    return (value + "=" + assignment)
35560  } else {
35561    return ("$set(" + (res.exp) + ", " + (res.key) + ", " + assignment + ")")
35562  }
35563}
35564
35565/**
35566 * Parse a v-model expression into a base path and a final key segment.
35567 * Handles both dot-path and possible square brackets.
35568 *
35569 * Possible cases:
35570 *
35571 * - test
35572 * - test[key]
35573 * - test[test1[key]]
35574 * - test["a"][key]
35575 * - xxx.test[a[a].test1[key]]
35576 * - test.xxx.a["asa"][test1[key]]
35577 *
35578 */
35579
35580var len, str, chr, index$1, expressionPos, expressionEndPos;
35581
35582
35583
35584function parseModel (val) {
35585  // Fix https://github.com/vuejs/vue/pull/7730
35586  // allow v-model="obj.val " (trailing whitespace)
35587  val = val.trim();
35588  len = val.length;
35589
35590  if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) {
35591    index$1 = val.lastIndexOf('.');
35592    if (index$1 > -1) {
35593      return {
35594        exp: val.slice(0, index$1),
35595        key: '"' + val.slice(index$1 + 1) + '"'
35596      }
35597    } else {
35598      return {
35599        exp: val,
35600        key: null
35601      }
35602    }
35603  }
35604
35605  str = val;
35606  index$1 = expressionPos = expressionEndPos = 0;
35607
35608  while (!eof()) {
35609    chr = next();
35610    /* istanbul ignore if */
35611    if (isStringStart(chr)) {
35612      parseString(chr);
35613    } else if (chr === 0x5B) {
35614      parseBracket(chr);
35615    }
35616  }
35617
35618  return {
35619    exp: val.slice(0, expressionPos),
35620    key: val.slice(expressionPos + 1, expressionEndPos)
35621  }
35622}
35623
35624function next () {
35625  return str.charCodeAt(++index$1)
35626}
35627
35628function eof () {
35629  return index$1 >= len
35630}
35631
35632function isStringStart (chr) {
35633  return chr === 0x22 || chr === 0x27
35634}
35635
35636function parseBracket (chr) {
35637  var inBracket = 1;
35638  expressionPos = index$1;
35639  while (!eof()) {
35640    chr = next();
35641    if (isStringStart(chr)) {
35642      parseString(chr);
35643      continue
35644    }
35645    if (chr === 0x5B) { inBracket++; }
35646    if (chr === 0x5D) { inBracket--; }
35647    if (inBracket === 0) {
35648      expressionEndPos = index$1;
35649      break
35650    }
35651  }
35652}
35653
35654function parseString (chr) {
35655  var stringQuote = chr;
35656  while (!eof()) {
35657    chr = next();
35658    if (chr === stringQuote) {
35659      break
35660    }
35661  }
35662}
35663
35664/*  */
35665
35666var warn$1;
35667
35668// in some cases, the event used has to be determined at runtime
35669// so we used some reserved tokens during compile.
35670var RANGE_TOKEN = '__r';
35671var CHECKBOX_RADIO_TOKEN = '__c';
35672
35673function model (
35674  el,
35675  dir,
35676  _warn
35677) {
35678  warn$1 = _warn;
35679  var value = dir.value;
35680  var modifiers = dir.modifiers;
35681  var tag = el.tag;
35682  var type = el.attrsMap.type;
35683
35684  if (true) {
35685    // inputs with type="file" are read only and setting the input's
35686    // value will throw an error.
35687    if (tag === 'input' && type === 'file') {
35688      warn$1(
35689        "<" + (el.tag) + " v-model=\"" + value + "\" type=\"file\">:\n" +
35690        "File inputs are read only. Use a v-on:change listener instead.",
35691        el.rawAttrsMap['v-model']
35692      );
35693    }
35694  }
35695
35696  if (el.component) {
35697    genComponentModel(el, value, modifiers);
35698    // component v-model doesn't need extra runtime
35699    return false
35700  } else if (tag === 'select') {
35701    genSelect(el, value, modifiers);
35702  } else if (tag === 'input' && type === 'checkbox') {
35703    genCheckboxModel(el, value, modifiers);
35704  } else if (tag === 'input' && type === 'radio') {
35705    genRadioModel(el, value, modifiers);
35706  } else if (tag === 'input' || tag === 'textarea') {
35707    genDefaultModel(el, value, modifiers);
35708  } else if (!config.isReservedTag(tag)) {
35709    genComponentModel(el, value, modifiers);
35710    // component v-model doesn't need extra runtime
35711    return false
35712  } else if (true) {
35713    warn$1(
35714      "<" + (el.tag) + " v-model=\"" + value + "\">: " +
35715      "v-model is not supported on this element type. " +
35716      'If you are working with contenteditable, it\'s recommended to ' +
35717      'wrap a library dedicated for that purpose inside a custom component.',
35718      el.rawAttrsMap['v-model']
35719    );
35720  }
35721
35722  // ensure runtime directive metadata
35723  return true
35724}
35725
35726function genCheckboxModel (
35727  el,
35728  value,
35729  modifiers
35730) {
35731  var number = modifiers && modifiers.number;
35732  var valueBinding = getBindingAttr(el, 'value') || 'null';
35733  var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';
35734  var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';
35735  addProp(el, 'checked',
35736    "Array.isArray(" + value + ")" +
35737    "?_i(" + value + "," + valueBinding + ")>-1" + (
35738      trueValueBinding === 'true'
35739        ? (":(" + value + ")")
35740        : (":_q(" + value + "," + trueValueBinding + ")")
35741    )
35742  );
35743  addHandler(el, 'change',
35744    "var $$a=" + value + "," +
35745        '$$el=$event.target,' +
35746        "$$c=$$el.checked?(" + trueValueBinding + "):(" + falseValueBinding + ");" +
35747    'if(Array.isArray($$a)){' +
35748      "var $$v=" + (number ? '_n(' + valueBinding + ')' : valueBinding) + "," +
35749          '$$i=_i($$a,$$v);' +
35750      "if($$el.checked){$$i<0&&(" + (genAssignmentCode(value, '$$a.concat([$$v])')) + ")}" +
35751      "else{$$i>-1&&(" + (genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))')) + ")}" +
35752    "}else{" + (genAssignmentCode(value, '$$c')) + "}",
35753    null, true
35754  );
35755}
35756
35757function genRadioModel (
35758  el,
35759  value,
35760  modifiers
35761) {
35762  var number = modifiers && modifiers.number;
35763  var valueBinding = getBindingAttr(el, 'value') || 'null';
35764  valueBinding = number ? ("_n(" + valueBinding + ")") : valueBinding;
35765  addProp(el, 'checked', ("_q(" + value + "," + valueBinding + ")"));
35766  addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);
35767}
35768
35769function genSelect (
35770  el,
35771  value,
35772  modifiers
35773) {
35774  var number = modifiers && modifiers.number;
35775  var selectedVal = "Array.prototype.filter" +
35776    ".call($event.target.options,function(o){return o.selected})" +
35777    ".map(function(o){var val = \"_value\" in o ? o._value : o.value;" +
35778    "return " + (number ? '_n(val)' : 'val') + "})";
35779
35780  var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';
35781  var code = "var $$selectedVal = " + selectedVal + ";";
35782  code = code + " " + (genAssignmentCode(value, assignment));
35783  addHandler(el, 'change', code, null, true);
35784}
35785
35786function genDefaultModel (
35787  el,
35788  value,
35789  modifiers
35790) {
35791  var type = el.attrsMap.type;
35792
35793  // warn if v-bind:value conflicts with v-model
35794  // except for inputs with v-bind:type
35795  if (true) {
35796    var value$1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];
35797    var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];
35798    if (value$1 && !typeBinding) {
35799      var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';
35800      warn$1(
35801        binding + "=\"" + value$1 + "\" conflicts with v-model on the same element " +
35802        'because the latter already expands to a value binding internally',
35803        el.rawAttrsMap[binding]
35804      );
35805    }
35806  }
35807
35808  var ref = modifiers || {};
35809  var lazy = ref.lazy;
35810  var number = ref.number;
35811  var trim = ref.trim;
35812  var needCompositionGuard = !lazy && type !== 'range';
35813  var event = lazy
35814    ? 'change'
35815    : type === 'range'
35816      ? RANGE_TOKEN
35817      : 'input';
35818
35819  var valueExpression = '$event.target.value';
35820  if (trim) {
35821    valueExpression = "$event.target.value.trim()";
35822  }
35823  if (number) {
35824    valueExpression = "_n(" + valueExpression + ")";
35825  }
35826
35827  var code = genAssignmentCode(value, valueExpression);
35828  if (needCompositionGuard) {
35829    code = "if($event.target.composing)return;" + code;
35830  }
35831
35832  addProp(el, 'value', ("(" + value + ")"));
35833  addHandler(el, event, code, null, true);
35834  if (trim || number) {
35835    addHandler(el, 'blur', '$forceUpdate()');
35836  }
35837}
35838
35839/*  */
35840
35841// normalize v-model event tokens that can only be determined at runtime.
35842// it's important to place the event as the first in the array because
35843// the whole point is ensuring the v-model callback gets called before
35844// user-attached handlers.
35845function normalizeEvents (on) {
35846  /* istanbul ignore if */
35847  if (isDef(on[RANGE_TOKEN])) {
35848    // IE input[type=range] only supports `change` event
35849    var event = isIE ? 'change' : 'input';
35850    on[event] = [].concat(on[RANGE_TOKEN], on[event] || []);
35851    delete on[RANGE_TOKEN];
35852  }
35853  // This was originally intended to fix #4521 but no longer necessary
35854  // after 2.5. Keeping it for backwards compat with generated code from < 2.4
35855  /* istanbul ignore if */
35856  if (isDef(on[CHECKBOX_RADIO_TOKEN])) {
35857    on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);
35858    delete on[CHECKBOX_RADIO_TOKEN];
35859  }
35860}
35861
35862var target$1;
35863
35864function createOnceHandler$1 (event, handler, capture) {
35865  var _target = target$1; // save current target element in closure
35866  return function onceHandler () {
35867    var res = handler.apply(null, arguments);
35868    if (res !== null) {
35869      remove$2(event, onceHandler, capture, _target);
35870    }
35871  }
35872}
35873
35874// #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp
35875// implementation and does not fire microtasks in between event propagation, so
35876// safe to exclude.
35877var useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53);
35878
35879function add$1 (
35880  name,
35881  handler,
35882  capture,
35883  passive
35884) {
35885  // async edge case #6566: inner click event triggers patch, event handler
35886  // attached to outer element during patch, and triggered again. This
35887  // happens because browsers fire microtask ticks between event propagation.
35888  // the solution is simple: we save the timestamp when a handler is attached,
35889  // and the handler would only fire if the event passed to it was fired
35890  // AFTER it was attached.
35891  if (useMicrotaskFix) {
35892    var attachedTimestamp = currentFlushTimestamp;
35893    var original = handler;
35894    handler = original._wrapper = function (e) {
35895      if (
35896        // no bubbling, should always fire.
35897        // this is just a safety net in case event.timeStamp is unreliable in
35898        // certain weird environments...
35899        e.target === e.currentTarget ||
35900        // event is fired after handler attachment
35901        e.timeStamp >= attachedTimestamp ||
35902        // bail for environments that have buggy event.timeStamp implementations
35903        // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState
35904        // #9681 QtWebEngine event.timeStamp is negative value
35905        e.timeStamp <= 0 ||
35906        // #9448 bail if event is fired in another document in a multi-page
35907        // electron/nw.js app, since event.timeStamp will be using a different
35908        // starting reference
35909        e.target.ownerDocument !== document
35910      ) {
35911        return original.apply(this, arguments)
35912      }
35913    };
35914  }
35915  target$1.addEventListener(
35916    name,
35917    handler,
35918    supportsPassive
35919      ? { capture: capture, passive: passive }
35920      : capture
35921  );
35922}
35923
35924function remove$2 (
35925  name,
35926  handler,
35927  capture,
35928  _target
35929) {
35930  (_target || target$1).removeEventListener(
35931    name,
35932    handler._wrapper || handler,
35933    capture
35934  );
35935}
35936
35937function updateDOMListeners (oldVnode, vnode) {
35938  if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {
35939    return
35940  }
35941  var on = vnode.data.on || {};
35942  var oldOn = oldVnode.data.on || {};
35943  target$1 = vnode.elm;
35944  normalizeEvents(on);
35945  updateListeners(on, oldOn, add$1, remove$2, createOnceHandler$1, vnode.context);
35946  target$1 = undefined;
35947}
35948
35949var events = {
35950  create: updateDOMListeners,
35951  update: updateDOMListeners
35952};
35953
35954/*  */
35955
35956var svgContainer;
35957
35958function updateDOMProps (oldVnode, vnode) {
35959  if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {
35960    return
35961  }
35962  var key, cur;
35963  var elm = vnode.elm;
35964  var oldProps = oldVnode.data.domProps || {};
35965  var props = vnode.data.domProps || {};
35966  // clone observed objects, as the user probably wants to mutate it
35967  if (isDef(props.__ob__)) {
35968    props = vnode.data.domProps = extend({}, props);
35969  }
35970
35971  for (key in oldProps) {
35972    if (!(key in props)) {
35973      elm[key] = '';
35974    }
35975  }
35976
35977  for (key in props) {
35978    cur = props[key];
35979    // ignore children if the node has textContent or innerHTML,
35980    // as these will throw away existing DOM nodes and cause removal errors
35981    // on subsequent patches (#3360)
35982    if (key === 'textContent' || key === 'innerHTML') {
35983      if (vnode.children) { vnode.children.length = 0; }
35984      if (cur === oldProps[key]) { continue }
35985      // #6601 work around Chrome version <= 55 bug where single textNode
35986      // replaced by innerHTML/textContent retains its parentNode property
35987      if (elm.childNodes.length === 1) {
35988        elm.removeChild(elm.childNodes[0]);
35989      }
35990    }
35991
35992    if (key === 'value' && elm.tagName !== 'PROGRESS') {
35993      // store value as _value as well since
35994      // non-string values will be stringified
35995      elm._value = cur;
35996      // avoid resetting cursor position when value is the same
35997      var strCur = isUndef(cur) ? '' : String(cur);
35998      if (shouldUpdateValue(elm, strCur)) {
35999        elm.value = strCur;
36000      }
36001    } else if (key === 'innerHTML' && isSVG(elm.tagName) && isUndef(elm.innerHTML)) {
36002      // IE doesn't support innerHTML for SVG elements
36003      svgContainer = svgContainer || document.createElement('div');
36004      svgContainer.innerHTML = "<svg>" + cur + "</svg>";
36005      var svg = svgContainer.firstChild;
36006      while (elm.firstChild) {
36007        elm.removeChild(elm.firstChild);
36008      }
36009      while (svg.firstChild) {
36010        elm.appendChild(svg.firstChild);
36011      }
36012    } else if (
36013      // skip the update if old and new VDOM state is the same.
36014      // `value` is handled separately because the DOM value may be temporarily
36015      // out of sync with VDOM state due to focus, composition and modifiers.
36016      // This  #4521 by skipping the unnecessary `checked` update.
36017      cur !== oldProps[key]
36018    ) {
36019      // some property updates can throw
36020      // e.g. `value` on <progress> w/ non-finite value
36021      try {
36022        elm[key] = cur;
36023      } catch (e) {}
36024    }
36025  }
36026}
36027
36028// check platforms/web/util/attrs.js acceptValue
36029
36030
36031function shouldUpdateValue (elm, checkVal) {
36032  return (!elm.composing && (
36033    elm.tagName === 'OPTION' ||
36034    isNotInFocusAndDirty(elm, checkVal) ||
36035    isDirtyWithModifiers(elm, checkVal)
36036  ))
36037}
36038
36039function isNotInFocusAndDirty (elm, checkVal) {
36040  // return true when textbox (.number and .trim) loses focus and its value is
36041  // not equal to the updated value
36042  var notInFocus = true;
36043  // #6157
36044  // work around IE bug when accessing document.activeElement in an iframe
36045  try { notInFocus = document.activeElement !== elm; } catch (e) {}
36046  return notInFocus && elm.value !== checkVal
36047}
36048
36049function isDirtyWithModifiers (elm, newVal) {
36050  var value = elm.value;
36051  var modifiers = elm._vModifiers; // injected by v-model runtime
36052  if (isDef(modifiers)) {
36053    if (modifiers.number) {
36054      return toNumber(value) !== toNumber(newVal)
36055    }
36056    if (modifiers.trim) {
36057      return value.trim() !== newVal.trim()
36058    }
36059  }
36060  return value !== newVal
36061}
36062
36063var domProps = {
36064  create: updateDOMProps,
36065  update: updateDOMProps
36066};
36067
36068/*  */
36069
36070var parseStyleText = cached(function (cssText) {
36071  var res = {};
36072  var listDelimiter = /;(?![^(]*\))/g;
36073  var propertyDelimiter = /:(.+)/;
36074  cssText.split(listDelimiter).forEach(function (item) {
36075    if (item) {
36076      var tmp = item.split(propertyDelimiter);
36077      tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());
36078    }
36079  });
36080  return res
36081});
36082
36083// merge static and dynamic style data on the same vnode
36084function normalizeStyleData (data) {
36085  var style = normalizeStyleBinding(data.style);
36086  // static style is pre-processed into an object during compilation
36087  // and is always a fresh object, so it's safe to merge into it
36088  return data.staticStyle
36089    ? extend(data.staticStyle, style)
36090    : style
36091}
36092
36093// normalize possible array / string values into Object
36094function normalizeStyleBinding (bindingStyle) {
36095  if (Array.isArray(bindingStyle)) {
36096    return toObject(bindingStyle)
36097  }
36098  if (typeof bindingStyle === 'string') {
36099    return parseStyleText(bindingStyle)
36100  }
36101  return bindingStyle
36102}
36103
36104/**
36105 * parent component style should be after child's
36106 * so that parent component's style could override it
36107 */
36108function getStyle (vnode, checkChild) {
36109  var res = {};
36110  var styleData;
36111
36112  if (checkChild) {
36113    var childNode = vnode;
36114    while (childNode.componentInstance) {
36115      childNode = childNode.componentInstance._vnode;
36116      if (
36117        childNode && childNode.data &&
36118        (styleData = normalizeStyleData(childNode.data))
36119      ) {
36120        extend(res, styleData);
36121      }
36122    }
36123  }
36124
36125  if ((styleData = normalizeStyleData(vnode.data))) {
36126    extend(res, styleData);
36127  }
36128
36129  var parentNode = vnode;
36130  while ((parentNode = parentNode.parent)) {
36131    if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {
36132      extend(res, styleData);
36133    }
36134  }
36135  return res
36136}
36137
36138/*  */
36139
36140var cssVarRE = /^--/;
36141var importantRE = /\s*!important$/;
36142var setProp = function (el, name, val) {
36143  /* istanbul ignore if */
36144  if (cssVarRE.test(name)) {
36145    el.style.setProperty(name, val);
36146  } else if (importantRE.test(val)) {
36147    el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');
36148  } else {
36149    var normalizedName = normalize(name);
36150    if (Array.isArray(val)) {
36151      // Support values array created by autoprefixer, e.g.
36152      // {display: ["-webkit-box", "-ms-flexbox", "flex"]}
36153      // Set them one by one, and the browser will only set those it can recognize
36154      for (var i = 0, len = val.length; i < len; i++) {
36155        el.style[normalizedName] = val[i];
36156      }
36157    } else {
36158      el.style[normalizedName] = val;
36159    }
36160  }
36161};
36162
36163var vendorNames = ['Webkit', 'Moz', 'ms'];
36164
36165var emptyStyle;
36166var normalize = cached(function (prop) {
36167  emptyStyle = emptyStyle || document.createElement('div').style;
36168  prop = camelize(prop);
36169  if (prop !== 'filter' && (prop in emptyStyle)) {
36170    return prop
36171  }
36172  var capName = prop.charAt(0).toUpperCase() + prop.slice(1);
36173  for (var i = 0; i < vendorNames.length; i++) {
36174    var name = vendorNames[i] + capName;
36175    if (name in emptyStyle) {
36176      return name
36177    }
36178  }
36179});
36180
36181function updateStyle (oldVnode, vnode) {
36182  var data = vnode.data;
36183  var oldData = oldVnode.data;
36184
36185  if (isUndef(data.staticStyle) && isUndef(data.style) &&
36186    isUndef(oldData.staticStyle) && isUndef(oldData.style)
36187  ) {
36188    return
36189  }
36190
36191  var cur, name;
36192  var el = vnode.elm;
36193  var oldStaticStyle = oldData.staticStyle;
36194  var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};
36195
36196  // if static style exists, stylebinding already merged into it when doing normalizeStyleData
36197  var oldStyle = oldStaticStyle || oldStyleBinding;
36198
36199  var style = normalizeStyleBinding(vnode.data.style) || {};
36200
36201  // store normalized style under a different key for next diff
36202  // make sure to clone it if it's reactive, since the user likely wants
36203  // to mutate it.
36204  vnode.data.normalizedStyle = isDef(style.__ob__)
36205    ? extend({}, style)
36206    : style;
36207
36208  var newStyle = getStyle(vnode, true);
36209
36210  for (name in oldStyle) {
36211    if (isUndef(newStyle[name])) {
36212      setProp(el, name, '');
36213    }
36214  }
36215  for (name in newStyle) {
36216    cur = newStyle[name];
36217    if (cur !== oldStyle[name]) {
36218      // ie9 setting to null has no effect, must use empty string
36219      setProp(el, name, cur == null ? '' : cur);
36220    }
36221  }
36222}
36223
36224var style = {
36225  create: updateStyle,
36226  update: updateStyle
36227};
36228
36229/*  */
36230
36231var whitespaceRE = /\s+/;
36232
36233/**
36234 * Add class with compatibility for SVG since classList is not supported on
36235 * SVG elements in IE
36236 */
36237function addClass (el, cls) {
36238  /* istanbul ignore if */
36239  if (!cls || !(cls = cls.trim())) {
36240    return
36241  }
36242
36243  /* istanbul ignore else */
36244  if (el.classList) {
36245    if (cls.indexOf(' ') > -1) {
36246      cls.split(whitespaceRE).forEach(function (c) { return el.classList.add(c); });
36247    } else {
36248      el.classList.add(cls);
36249    }
36250  } else {
36251    var cur = " " + (el.getAttribute('class') || '') + " ";
36252    if (cur.indexOf(' ' + cls + ' ') < 0) {
36253      el.setAttribute('class', (cur + cls).trim());
36254    }
36255  }
36256}
36257
36258/**
36259 * Remove class with compatibility for SVG since classList is not supported on
36260 * SVG elements in IE
36261 */
36262function removeClass (el, cls) {
36263  /* istanbul ignore if */
36264  if (!cls || !(cls = cls.trim())) {
36265    return
36266  }
36267
36268  /* istanbul ignore else */
36269  if (el.classList) {
36270    if (cls.indexOf(' ') > -1) {
36271      cls.split(whitespaceRE).forEach(function (c) { return el.classList.remove(c); });
36272    } else {
36273      el.classList.remove(cls);
36274    }
36275    if (!el.classList.length) {
36276      el.removeAttribute('class');
36277    }
36278  } else {
36279    var cur = " " + (el.getAttribute('class') || '') + " ";
36280    var tar = ' ' + cls + ' ';
36281    while (cur.indexOf(tar) >= 0) {
36282      cur = cur.replace(tar, ' ');
36283    }
36284    cur = cur.trim();
36285    if (cur) {
36286      el.setAttribute('class', cur);
36287    } else {
36288      el.removeAttribute('class');
36289    }
36290  }
36291}
36292
36293/*  */
36294
36295function resolveTransition (def$$1) {
36296  if (!def$$1) {
36297    return
36298  }
36299  /* istanbul ignore else */
36300  if (typeof def$$1 === 'object') {
36301    var res = {};
36302    if (def$$1.css !== false) {
36303      extend(res, autoCssTransition(def$$1.name || 'v'));
36304    }
36305    extend(res, def$$1);
36306    return res
36307  } else if (typeof def$$1 === 'string') {
36308    return autoCssTransition(def$$1)
36309  }
36310}
36311
36312var autoCssTransition = cached(function (name) {
36313  return {
36314    enterClass: (name + "-enter"),
36315    enterToClass: (name + "-enter-to"),
36316    enterActiveClass: (name + "-enter-active"),
36317    leaveClass: (name + "-leave"),
36318    leaveToClass: (name + "-leave-to"),
36319    leaveActiveClass: (name + "-leave-active")
36320  }
36321});
36322
36323var hasTransition = inBrowser && !isIE9;
36324var TRANSITION = 'transition';
36325var ANIMATION = 'animation';
36326
36327// Transition property/event sniffing
36328var transitionProp = 'transition';
36329var transitionEndEvent = 'transitionend';
36330var animationProp = 'animation';
36331var animationEndEvent = 'animationend';
36332if (hasTransition) {
36333  /* istanbul ignore if */
36334  if (window.ontransitionend === undefined &&
36335    window.onwebkittransitionend !== undefined
36336  ) {
36337    transitionProp = 'WebkitTransition';
36338    transitionEndEvent = 'webkitTransitionEnd';
36339  }
36340  if (window.onanimationend === undefined &&
36341    window.onwebkitanimationend !== undefined
36342  ) {
36343    animationProp = 'WebkitAnimation';
36344    animationEndEvent = 'webkitAnimationEnd';
36345  }
36346}
36347
36348// binding to window is necessary to make hot reload work in IE in strict mode
36349var raf = inBrowser
36350  ? window.requestAnimationFrame
36351    ? window.requestAnimationFrame.bind(window)
36352    : setTimeout
36353  : /* istanbul ignore next */ function (fn) { return fn(); };
36354
36355function nextFrame (fn) {
36356  raf(function () {
36357    raf(fn);
36358  });
36359}
36360
36361function addTransitionClass (el, cls) {
36362  var transitionClasses = el._transitionClasses || (el._transitionClasses = []);
36363  if (transitionClasses.indexOf(cls) < 0) {
36364    transitionClasses.push(cls);
36365    addClass(el, cls);
36366  }
36367}
36368
36369function removeTransitionClass (el, cls) {
36370  if (el._transitionClasses) {
36371    remove(el._transitionClasses, cls);
36372  }
36373  removeClass(el, cls);
36374}
36375
36376function whenTransitionEnds (
36377  el,
36378  expectedType,
36379  cb
36380) {
36381  var ref = getTransitionInfo(el, expectedType);
36382  var type = ref.type;
36383  var timeout = ref.timeout;
36384  var propCount = ref.propCount;
36385  if (!type) { return cb() }
36386  var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;
36387  var ended = 0;
36388  var end = function () {
36389    el.removeEventListener(event, onEnd);
36390    cb();
36391  };
36392  var onEnd = function (e) {
36393    if (e.target === el) {
36394      if (++ended >= propCount) {
36395        end();
36396      }
36397    }
36398  };
36399  setTimeout(function () {
36400    if (ended < propCount) {
36401      end();
36402    }
36403  }, timeout + 1);
36404  el.addEventListener(event, onEnd);
36405}
36406
36407var transformRE = /\b(transform|all)(,|$)/;
36408
36409function getTransitionInfo (el, expectedType) {
36410  var styles = window.getComputedStyle(el);
36411  // JSDOM may return undefined for transition properties
36412  var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');
36413  var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');
36414  var transitionTimeout = getTimeout(transitionDelays, transitionDurations);
36415  var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');
36416  var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');
36417  var animationTimeout = getTimeout(animationDelays, animationDurations);
36418
36419  var type;
36420  var timeout = 0;
36421  var propCount = 0;
36422  /* istanbul ignore if */
36423  if (expectedType === TRANSITION) {
36424    if (transitionTimeout > 0) {
36425      type = TRANSITION;
36426      timeout = transitionTimeout;
36427      propCount = transitionDurations.length;
36428    }
36429  } else if (expectedType === ANIMATION) {
36430    if (animationTimeout > 0) {
36431      type = ANIMATION;
36432      timeout = animationTimeout;
36433      propCount = animationDurations.length;
36434    }
36435  } else {
36436    timeout = Math.max(transitionTimeout, animationTimeout);
36437    type = timeout > 0
36438      ? transitionTimeout > animationTimeout
36439        ? TRANSITION
36440        : ANIMATION
36441      : null;
36442    propCount = type
36443      ? type === TRANSITION
36444        ? transitionDurations.length
36445        : animationDurations.length
36446      : 0;
36447  }
36448  var hasTransform =
36449    type === TRANSITION &&
36450    transformRE.test(styles[transitionProp + 'Property']);
36451  return {
36452    type: type,
36453    timeout: timeout,
36454    propCount: propCount,
36455    hasTransform: hasTransform
36456  }
36457}
36458
36459function getTimeout (delays, durations) {
36460  /* istanbul ignore next */
36461  while (delays.length < durations.length) {
36462    delays = delays.concat(delays);
36463  }
36464
36465  return Math.max.apply(null, durations.map(function (d, i) {
36466    return toMs(d) + toMs(delays[i])
36467  }))
36468}
36469
36470// Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers
36471// in a locale-dependent way, using a comma instead of a dot.
36472// If comma is not replaced with a dot, the input will be rounded down (i.e. acting
36473// as a floor function) causing unexpected behaviors
36474function toMs (s) {
36475  return Number(s.slice(0, -1).replace(',', '.')) * 1000
36476}
36477
36478/*  */
36479
36480function enter (vnode, toggleDisplay) {
36481  var el = vnode.elm;
36482
36483  // call leave callback now
36484  if (isDef(el._leaveCb)) {
36485    el._leaveCb.cancelled = true;
36486    el._leaveCb();
36487  }
36488
36489  var data = resolveTransition(vnode.data.transition);
36490  if (isUndef(data)) {
36491    return
36492  }
36493
36494  /* istanbul ignore if */
36495  if (isDef(el._enterCb) || el.nodeType !== 1) {
36496    return
36497  }
36498
36499  var css = data.css;
36500  var type = data.type;
36501  var enterClass = data.enterClass;
36502  var enterToClass = data.enterToClass;
36503  var enterActiveClass = data.enterActiveClass;
36504  var appearClass = data.appearClass;
36505  var appearToClass = data.appearToClass;
36506  var appearActiveClass = data.appearActiveClass;
36507  var beforeEnter = data.beforeEnter;
36508  var enter = data.enter;
36509  var afterEnter = data.afterEnter;
36510  var enterCancelled = data.enterCancelled;
36511  var beforeAppear = data.beforeAppear;
36512  var appear = data.appear;
36513  var afterAppear = data.afterAppear;
36514  var appearCancelled = data.appearCancelled;
36515  var duration = data.duration;
36516
36517  // activeInstance will always be the <transition> component managing this
36518  // transition. One edge case to check is when the <transition> is placed
36519  // as the root node of a child component. In that case we need to check
36520  // <transition>'s parent for appear check.
36521  var context = activeInstance;
36522  var transitionNode = activeInstance.$vnode;
36523  while (transitionNode && transitionNode.parent) {
36524    context = transitionNode.context;
36525    transitionNode = transitionNode.parent;
36526  }
36527
36528  var isAppear = !context._isMounted || !vnode.isRootInsert;
36529
36530  if (isAppear && !appear && appear !== '') {
36531    return
36532  }
36533
36534  var startClass = isAppear && appearClass
36535    ? appearClass
36536    : enterClass;
36537  var activeClass = isAppear && appearActiveClass
36538    ? appearActiveClass
36539    : enterActiveClass;
36540  var toClass = isAppear && appearToClass
36541    ? appearToClass
36542    : enterToClass;
36543
36544  var beforeEnterHook = isAppear
36545    ? (beforeAppear || beforeEnter)
36546    : beforeEnter;
36547  var enterHook = isAppear
36548    ? (typeof appear === 'function' ? appear : enter)
36549    : enter;
36550  var afterEnterHook = isAppear
36551    ? (afterAppear || afterEnter)
36552    : afterEnter;
36553  var enterCancelledHook = isAppear
36554    ? (appearCancelled || enterCancelled)
36555    : enterCancelled;
36556
36557  var explicitEnterDuration = toNumber(
36558    isObject(duration)
36559      ? duration.enter
36560      : duration
36561  );
36562
36563  if ( true && explicitEnterDuration != null) {
36564    checkDuration(explicitEnterDuration, 'enter', vnode);
36565  }
36566
36567  var expectsCSS = css !== false && !isIE9;
36568  var userWantsControl = getHookArgumentsLength(enterHook);
36569
36570  var cb = el._enterCb = once(function () {
36571    if (expectsCSS) {
36572      removeTransitionClass(el, toClass);
36573      removeTransitionClass(el, activeClass);
36574    }
36575    if (cb.cancelled) {
36576      if (expectsCSS) {
36577        removeTransitionClass(el, startClass);
36578      }
36579      enterCancelledHook && enterCancelledHook(el);
36580    } else {
36581      afterEnterHook && afterEnterHook(el);
36582    }
36583    el._enterCb = null;
36584  });
36585
36586  if (!vnode.data.show) {
36587    // remove pending leave element on enter by injecting an insert hook
36588    mergeVNodeHook(vnode, 'insert', function () {
36589      var parent = el.parentNode;
36590      var pendingNode = parent && parent._pending && parent._pending[vnode.key];
36591      if (pendingNode &&
36592        pendingNode.tag === vnode.tag &&
36593        pendingNode.elm._leaveCb
36594      ) {
36595        pendingNode.elm._leaveCb();
36596      }
36597      enterHook && enterHook(el, cb);
36598    });
36599  }
36600
36601  // start enter transition
36602  beforeEnterHook && beforeEnterHook(el);
36603  if (expectsCSS) {
36604    addTransitionClass(el, startClass);
36605    addTransitionClass(el, activeClass);
36606    nextFrame(function () {
36607      removeTransitionClass(el, startClass);
36608      if (!cb.cancelled) {
36609        addTransitionClass(el, toClass);
36610        if (!userWantsControl) {
36611          if (isValidDuration(explicitEnterDuration)) {
36612            setTimeout(cb, explicitEnterDuration);
36613          } else {
36614            whenTransitionEnds(el, type, cb);
36615          }
36616        }
36617      }
36618    });
36619  }
36620
36621  if (vnode.data.show) {
36622    toggleDisplay && toggleDisplay();
36623    enterHook && enterHook(el, cb);
36624  }
36625
36626  if (!expectsCSS && !userWantsControl) {
36627    cb();
36628  }
36629}
36630
36631function leave (vnode, rm) {
36632  var el = vnode.elm;
36633
36634  // call enter callback now
36635  if (isDef(el._enterCb)) {
36636    el._enterCb.cancelled = true;
36637    el._enterCb();
36638  }
36639
36640  var data = resolveTransition(vnode.data.transition);
36641  if (isUndef(data) || el.nodeType !== 1) {
36642    return rm()
36643  }
36644
36645  /* istanbul ignore if */
36646  if (isDef(el._leaveCb)) {
36647    return
36648  }
36649
36650  var css = data.css;
36651  var type = data.type;
36652  var leaveClass = data.leaveClass;
36653  var leaveToClass = data.leaveToClass;
36654  var leaveActiveClass = data.leaveActiveClass;
36655  var beforeLeave = data.beforeLeave;
36656  var leave = data.leave;
36657  var afterLeave = data.afterLeave;
36658  var leaveCancelled = data.leaveCancelled;
36659  var delayLeave = data.delayLeave;
36660  var duration = data.duration;
36661
36662  var expectsCSS = css !== false && !isIE9;
36663  var userWantsControl = getHookArgumentsLength(leave);
36664
36665  var explicitLeaveDuration = toNumber(
36666    isObject(duration)
36667      ? duration.leave
36668      : duration
36669  );
36670
36671  if ( true && isDef(explicitLeaveDuration)) {
36672    checkDuration(explicitLeaveDuration, 'leave', vnode);
36673  }
36674
36675  var cb = el._leaveCb = once(function () {
36676    if (el.parentNode && el.parentNode._pending) {
36677      el.parentNode._pending[vnode.key] = null;
36678    }
36679    if (expectsCSS) {
36680      removeTransitionClass(el, leaveToClass);
36681      removeTransitionClass(el, leaveActiveClass);
36682    }
36683    if (cb.cancelled) {
36684      if (expectsCSS) {
36685        removeTransitionClass(el, leaveClass);
36686      }
36687      leaveCancelled && leaveCancelled(el);
36688    } else {
36689      rm();
36690      afterLeave && afterLeave(el);
36691    }
36692    el._leaveCb = null;
36693  });
36694
36695  if (delayLeave) {
36696    delayLeave(performLeave);
36697  } else {
36698    performLeave();
36699  }
36700
36701  function performLeave () {
36702    // the delayed leave may have already been cancelled
36703    if (cb.cancelled) {
36704      return
36705    }
36706    // record leaving element
36707    if (!vnode.data.show && el.parentNode) {
36708      (el.parentNode._pending || (el.parentNode._pending = {}))[(vnode.key)] = vnode;
36709    }
36710    beforeLeave && beforeLeave(el);
36711    if (expectsCSS) {
36712      addTransitionClass(el, leaveClass);
36713      addTransitionClass(el, leaveActiveClass);
36714      nextFrame(function () {
36715        removeTransitionClass(el, leaveClass);
36716        if (!cb.cancelled) {
36717          addTransitionClass(el, leaveToClass);
36718          if (!userWantsControl) {
36719            if (isValidDuration(explicitLeaveDuration)) {
36720              setTimeout(cb, explicitLeaveDuration);
36721            } else {
36722              whenTransitionEnds(el, type, cb);
36723            }
36724          }
36725        }
36726      });
36727    }
36728    leave && leave(el, cb);
36729    if (!expectsCSS && !userWantsControl) {
36730      cb();
36731    }
36732  }
36733}
36734
36735// only used in dev mode
36736function checkDuration (val, name, vnode) {
36737  if (typeof val !== 'number') {
36738    warn(
36739      "<transition> explicit " + name + " duration is not a valid number - " +
36740      "got " + (JSON.stringify(val)) + ".",
36741      vnode.context
36742    );
36743  } else if (isNaN(val)) {
36744    warn(
36745      "<transition> explicit " + name + " duration is NaN - " +
36746      'the duration expression might be incorrect.',
36747      vnode.context
36748    );
36749  }
36750}
36751
36752function isValidDuration (val) {
36753  return typeof val === 'number' && !isNaN(val)
36754}
36755
36756/**
36757 * Normalize a transition hook's argument length. The hook may be:
36758 * - a merged hook (invoker) with the original in .fns
36759 * - a wrapped component method (check ._length)
36760 * - a plain function (.length)
36761 */
36762function getHookArgumentsLength (fn) {
36763  if (isUndef(fn)) {
36764    return false
36765  }
36766  var invokerFns = fn.fns;
36767  if (isDef(invokerFns)) {
36768    // invoker
36769    return getHookArgumentsLength(
36770      Array.isArray(invokerFns)
36771        ? invokerFns[0]
36772        : invokerFns
36773    )
36774  } else {
36775    return (fn._length || fn.length) > 1
36776  }
36777}
36778
36779function _enter (_, vnode) {
36780  if (vnode.data.show !== true) {
36781    enter(vnode);
36782  }
36783}
36784
36785var transition = inBrowser ? {
36786  create: _enter,
36787  activate: _enter,
36788  remove: function remove$$1 (vnode, rm) {
36789    /* istanbul ignore else */
36790    if (vnode.data.show !== true) {
36791      leave(vnode, rm);
36792    } else {
36793      rm();
36794    }
36795  }
36796} : {};
36797
36798var platformModules = [
36799  attrs,
36800  klass,
36801  events,
36802  domProps,
36803  style,
36804  transition
36805];
36806
36807/*  */
36808
36809// the directive module should be applied last, after all
36810// built-in modules have been applied.
36811var modules = platformModules.concat(baseModules);
36812
36813var patch = createPatchFunction({ nodeOps: nodeOps, modules: modules });
36814
36815/**
36816 * Not type checking this file because flow doesn't like attaching
36817 * properties to Elements.
36818 */
36819
36820/* istanbul ignore if */
36821if (isIE9) {
36822  // http://www.matts411.com/post/internet-explorer-9-oninput/
36823  document.addEventListener('selectionchange', function () {
36824    var el = document.activeElement;
36825    if (el && el.vmodel) {
36826      trigger(el, 'input');
36827    }
36828  });
36829}
36830
36831var directive = {
36832  inserted: function inserted (el, binding, vnode, oldVnode) {
36833    if (vnode.tag === 'select') {
36834      // #6903
36835      if (oldVnode.elm && !oldVnode.elm._vOptions) {
36836        mergeVNodeHook(vnode, 'postpatch', function () {
36837          directive.componentUpdated(el, binding, vnode);
36838        });
36839      } else {
36840        setSelected(el, binding, vnode.context);
36841      }
36842      el._vOptions = [].map.call(el.options, getValue);
36843    } else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {
36844      el._vModifiers = binding.modifiers;
36845      if (!binding.modifiers.lazy) {
36846        el.addEventListener('compositionstart', onCompositionStart);
36847        el.addEventListener('compositionend', onCompositionEnd);
36848        // Safari < 10.2 & UIWebView doesn't fire compositionend when
36849        // switching focus before confirming composition choice
36850        // this also fixes the issue where some browsers e.g. iOS Chrome
36851        // fires "change" instead of "input" on autocomplete.
36852        el.addEventListener('change', onCompositionEnd);
36853        /* istanbul ignore if */
36854        if (isIE9) {
36855          el.vmodel = true;
36856        }
36857      }
36858    }
36859  },
36860
36861  componentUpdated: function componentUpdated (el, binding, vnode) {
36862    if (vnode.tag === 'select') {
36863      setSelected(el, binding, vnode.context);
36864      // in case the options rendered by v-for have changed,
36865      // it's possible that the value is out-of-sync with the rendered options.
36866      // detect such cases and filter out values that no longer has a matching
36867      // option in the DOM.
36868      var prevOptions = el._vOptions;
36869      var curOptions = el._vOptions = [].map.call(el.options, getValue);
36870      if (curOptions.some(function (o, i) { return !looseEqual(o, prevOptions[i]); })) {
36871        // trigger change event if
36872        // no matching option found for at least one value
36873        var needReset = el.multiple
36874          ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions); })
36875          : binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, curOptions);
36876        if (needReset) {
36877          trigger(el, 'change');
36878        }
36879      }
36880    }
36881  }
36882};
36883
36884function setSelected (el, binding, vm) {
36885  actuallySetSelected(el, binding, vm);
36886  /* istanbul ignore if */
36887  if (isIE || isEdge) {
36888    setTimeout(function () {
36889      actuallySetSelected(el, binding, vm);
36890    }, 0);
36891  }
36892}
36893
36894function actuallySetSelected (el, binding, vm) {
36895  var value = binding.value;
36896  var isMultiple = el.multiple;
36897  if (isMultiple && !Array.isArray(value)) {
36898     true && warn(
36899      "<select multiple v-model=\"" + (binding.expression) + "\"> " +
36900      "expects an Array value for its binding, but got " + (Object.prototype.toString.call(value).slice(8, -1)),
36901      vm
36902    );
36903    return
36904  }
36905  var selected, option;
36906  for (var i = 0, l = el.options.length; i < l; i++) {
36907    option = el.options[i];
36908    if (isMultiple) {
36909      selected = looseIndexOf(value, getValue(option)) > -1;
36910      if (option.selected !== selected) {
36911        option.selected = selected;
36912      }
36913    } else {
36914      if (looseEqual(getValue(option), value)) {
36915        if (el.selectedIndex !== i) {
36916          el.selectedIndex = i;
36917        }
36918        return
36919      }
36920    }
36921  }
36922  if (!isMultiple) {
36923    el.selectedIndex = -1;
36924  }
36925}
36926
36927function hasNoMatchingOption (value, options) {
36928  return options.every(function (o) { return !looseEqual(o, value); })
36929}
36930
36931function getValue (option) {
36932  return '_value' in option
36933    ? option._value
36934    : option.value
36935}
36936
36937function onCompositionStart (e) {
36938  e.target.composing = true;
36939}
36940
36941function onCompositionEnd (e) {
36942  // prevent triggering an input event for no reason
36943  if (!e.target.composing) { return }
36944  e.target.composing = false;
36945  trigger(e.target, 'input');
36946}
36947
36948function trigger (el, type) {
36949  var e = document.createEvent('HTMLEvents');
36950  e.initEvent(type, true, true);
36951  el.dispatchEvent(e);
36952}
36953
36954/*  */
36955
36956// recursively search for possible transition defined inside the component root
36957function locateNode (vnode) {
36958  return vnode.componentInstance && (!vnode.data || !vnode.data.transition)
36959    ? locateNode(vnode.componentInstance._vnode)
36960    : vnode
36961}
36962
36963var show = {
36964  bind: function bind (el, ref, vnode) {
36965    var value = ref.value;
36966
36967    vnode = locateNode(vnode);
36968    var transition$$1 = vnode.data && vnode.data.transition;
36969    var originalDisplay = el.__vOriginalDisplay =
36970      el.style.display === 'none' ? '' : el.style.display;
36971    if (value && transition$$1) {
36972      vnode.data.show = true;
36973      enter(vnode, function () {
36974        el.style.display = originalDisplay;
36975      });
36976    } else {
36977      el.style.display = value ? originalDisplay : 'none';
36978    }
36979  },
36980
36981  update: function update (el, ref, vnode) {
36982    var value = ref.value;
36983    var oldValue = ref.oldValue;
36984
36985    /* istanbul ignore if */
36986    if (!value === !oldValue) { return }
36987    vnode = locateNode(vnode);
36988    var transition$$1 = vnode.data && vnode.data.transition;
36989    if (transition$$1) {
36990      vnode.data.show = true;
36991      if (value) {
36992        enter(vnode, function () {
36993          el.style.display = el.__vOriginalDisplay;
36994        });
36995      } else {
36996        leave(vnode, function () {
36997          el.style.display = 'none';
36998        });
36999      }
37000    } else {
37001      el.style.display = value ? el.__vOriginalDisplay : 'none';
37002    }
37003  },
37004
37005  unbind: function unbind (
37006    el,
37007    binding,
37008    vnode,
37009    oldVnode,
37010    isDestroy
37011  ) {
37012    if (!isDestroy) {
37013      el.style.display = el.__vOriginalDisplay;
37014    }
37015  }
37016};
37017
37018var platformDirectives = {
37019  model: directive,
37020  show: show
37021};
37022
37023/*  */
37024
37025var transitionProps = {
37026  name: String,
37027  appear: Boolean,
37028  css: Boolean,
37029  mode: String,
37030  type: String,
37031  enterClass: String,
37032  leaveClass: String,
37033  enterToClass: String,
37034  leaveToClass: String,
37035  enterActiveClass: String,
37036  leaveActiveClass: String,
37037  appearClass: String,
37038  appearActiveClass: String,
37039  appearToClass: String,
37040  duration: [Number, String, Object]
37041};
37042
37043// in case the child is also an abstract component, e.g. <keep-alive>
37044// we want to recursively retrieve the real component to be rendered
37045function getRealChild (vnode) {
37046  var compOptions = vnode && vnode.componentOptions;
37047  if (compOptions && compOptions.Ctor.options.abstract) {
37048    return getRealChild(getFirstComponentChild(compOptions.children))
37049  } else {
37050    return vnode
37051  }
37052}
37053
37054function extractTransitionData (comp) {
37055  var data = {};
37056  var options = comp.$options;
37057  // props
37058  for (var key in options.propsData) {
37059    data[key] = comp[key];
37060  }
37061  // events.
37062  // extract listeners and pass them directly to the transition methods
37063  var listeners = options._parentListeners;
37064  for (var key$1 in listeners) {
37065    data[camelize(key$1)] = listeners[key$1];
37066  }
37067  return data
37068}
37069
37070function placeholder (h, rawChild) {
37071  if (/\d-keep-alive$/.test(rawChild.tag)) {
37072    return h('keep-alive', {
37073      props: rawChild.componentOptions.propsData
37074    })
37075  }
37076}
37077
37078function hasParentTransition (vnode) {
37079  while ((vnode = vnode.parent)) {
37080    if (vnode.data.transition) {
37081      return true
37082    }
37083  }
37084}
37085
37086function isSameChild (child, oldChild) {
37087  return oldChild.key === child.key && oldChild.tag === child.tag
37088}
37089
37090var isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); };
37091
37092var isVShowDirective = function (d) { return d.name === 'show'; };
37093
37094var Transition = {
37095  name: 'transition',
37096  props: transitionProps,
37097  abstract: true,
37098
37099  render: function render (h) {
37100    var this$1 = this;
37101
37102    var children = this.$slots.default;
37103    if (!children) {
37104      return
37105    }
37106
37107    // filter out text nodes (possible whitespaces)
37108    children = children.filter(isNotTextNode);
37109    /* istanbul ignore if */
37110    if (!children.length) {
37111      return
37112    }
37113
37114    // warn multiple elements
37115    if ( true && children.length > 1) {
37116      warn(
37117        '<transition> can only be used on a single element. Use ' +
37118        '<transition-group> for lists.',
37119        this.$parent
37120      );
37121    }
37122
37123    var mode = this.mode;
37124
37125    // warn invalid mode
37126    if ( true &&
37127      mode && mode !== 'in-out' && mode !== 'out-in'
37128    ) {
37129      warn(
37130        'invalid <transition> mode: ' + mode,
37131        this.$parent
37132      );
37133    }
37134
37135    var rawChild = children[0];
37136
37137    // if this is a component root node and the component's
37138    // parent container node also has transition, skip.
37139    if (hasParentTransition(this.$vnode)) {
37140      return rawChild
37141    }
37142
37143    // apply transition data to child
37144    // use getRealChild() to ignore abstract components e.g. keep-alive
37145    var child = getRealChild(rawChild);
37146    /* istanbul ignore if */
37147    if (!child) {
37148      return rawChild
37149    }
37150
37151    if (this._leaving) {
37152      return placeholder(h, rawChild)
37153    }
37154
37155    // ensure a key that is unique to the vnode type and to this transition
37156    // component instance. This key will be used to remove pending leaving nodes
37157    // during entering.
37158    var id = "__transition-" + (this._uid) + "-";
37159    child.key = child.key == null
37160      ? child.isComment
37161        ? id + 'comment'
37162        : id + child.tag
37163      : isPrimitive(child.key)
37164        ? (String(child.key).indexOf(id) === 0 ? child.key : id + child.key)
37165        : child.key;
37166
37167    var data = (child.data || (child.data = {})).transition = extractTransitionData(this);
37168    var oldRawChild = this._vnode;
37169    var oldChild = getRealChild(oldRawChild);
37170
37171    // mark v-show
37172    // so that the transition module can hand over the control to the directive
37173    if (child.data.directives && child.data.directives.some(isVShowDirective)) {
37174      child.data.show = true;
37175    }
37176
37177    if (
37178      oldChild &&
37179      oldChild.data &&
37180      !isSameChild(child, oldChild) &&
37181      !isAsyncPlaceholder(oldChild) &&
37182      // #6687 component root is a comment node
37183      !(oldChild.componentInstance && oldChild.componentInstance._vnode.isComment)
37184    ) {
37185      // replace old child transition data with fresh one
37186      // important for dynamic transitions!
37187      var oldData = oldChild.data.transition = extend({}, data);
37188      // handle transition mode
37189      if (mode === 'out-in') {
37190        // return placeholder node and queue update when leave finishes
37191        this._leaving = true;
37192        mergeVNodeHook(oldData, 'afterLeave', function () {
37193          this$1._leaving = false;
37194          this$1.$forceUpdate();
37195        });
37196        return placeholder(h, rawChild)
37197      } else if (mode === 'in-out') {
37198        if (isAsyncPlaceholder(child)) {
37199          return oldRawChild
37200        }
37201        var delayedLeave;
37202        var performLeave = function () { delayedLeave(); };
37203        mergeVNodeHook(data, 'afterEnter', performLeave);
37204        mergeVNodeHook(data, 'enterCancelled', performLeave);
37205        mergeVNodeHook(oldData, 'delayLeave', function (leave) { delayedLeave = leave; });
37206      }
37207    }
37208
37209    return rawChild
37210  }
37211};
37212
37213/*  */
37214
37215var props = extend({
37216  tag: String,
37217  moveClass: String
37218}, transitionProps);
37219
37220delete props.mode;
37221
37222var TransitionGroup = {
37223  props: props,
37224
37225  beforeMount: function beforeMount () {
37226    var this$1 = this;
37227
37228    var update = this._update;
37229    this._update = function (vnode, hydrating) {
37230      var restoreActiveInstance = setActiveInstance(this$1);
37231      // force removing pass
37232      this$1.__patch__(
37233        this$1._vnode,
37234        this$1.kept,
37235        false, // hydrating
37236        true // removeOnly (!important, avoids unnecessary moves)
37237      );
37238      this$1._vnode = this$1.kept;
37239      restoreActiveInstance();
37240      update.call(this$1, vnode, hydrating);
37241    };
37242  },
37243
37244  render: function render (h) {
37245    var tag = this.tag || this.$vnode.data.tag || 'span';
37246    var map = Object.create(null);
37247    var prevChildren = this.prevChildren = this.children;
37248    var rawChildren = this.$slots.default || [];
37249    var children = this.children = [];
37250    var transitionData = extractTransitionData(this);
37251
37252    for (var i = 0; i < rawChildren.length; i++) {
37253      var c = rawChildren[i];
37254      if (c.tag) {
37255        if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {
37256          children.push(c);
37257          map[c.key] = c
37258          ;(c.data || (c.data = {})).transition = transitionData;
37259        } else if (true) {
37260          var opts = c.componentOptions;
37261          var name = opts ? (opts.Ctor.options.name || opts.tag || '') : c.tag;
37262          warn(("<transition-group> children must be keyed: <" + name + ">"));
37263        }
37264      }
37265    }
37266
37267    if (prevChildren) {
37268      var kept = [];
37269      var removed = [];
37270      for (var i$1 = 0; i$1 < prevChildren.length; i$1++) {
37271        var c$1 = prevChildren[i$1];
37272        c$1.data.transition = transitionData;
37273        c$1.data.pos = c$1.elm.getBoundingClientRect();
37274        if (map[c$1.key]) {
37275          kept.push(c$1);
37276        } else {
37277          removed.push(c$1);
37278        }
37279      }
37280      this.kept = h(tag, null, kept);
37281      this.removed = removed;
37282    }
37283
37284    return h(tag, null, children)
37285  },
37286
37287  updated: function updated () {
37288    var children = this.prevChildren;
37289    var moveClass = this.moveClass || ((this.name || 'v') + '-move');
37290    if (!children.length || !this.hasMove(children[0].elm, moveClass)) {
37291      return
37292    }
37293
37294    // we divide the work into three loops to avoid mixing DOM reads and writes
37295    // in each iteration - which helps prevent layout thrashing.
37296    children.forEach(callPendingCbs);
37297    children.forEach(recordPosition);
37298    children.forEach(applyTranslation);
37299
37300    // force reflow to put everything in position
37301    // assign to this to avoid being removed in tree-shaking
37302    // $flow-disable-line
37303    this._reflow = document.body.offsetHeight;
37304
37305    children.forEach(function (c) {
37306      if (c.data.moved) {
37307        var el = c.elm;
37308        var s = el.style;
37309        addTransitionClass(el, moveClass);
37310        s.transform = s.WebkitTransform = s.transitionDuration = '';
37311        el.addEventListener(transitionEndEvent, el._moveCb = function cb (e) {
37312          if (e && e.target !== el) {
37313            return
37314          }
37315          if (!e || /transform$/.test(e.propertyName)) {
37316            el.removeEventListener(transitionEndEvent, cb);
37317            el._moveCb = null;
37318            removeTransitionClass(el, moveClass);
37319          }
37320        });
37321      }
37322    });
37323  },
37324
37325  methods: {
37326    hasMove: function hasMove (el, moveClass) {
37327      /* istanbul ignore if */
37328      if (!hasTransition) {
37329        return false
37330      }
37331      /* istanbul ignore if */
37332      if (this._hasMove) {
37333        return this._hasMove
37334      }
37335      // Detect whether an element with the move class applied has
37336      // CSS transitions. Since the element may be inside an entering
37337      // transition at this very moment, we make a clone of it and remove
37338      // all other transition classes applied to ensure only the move class
37339      // is applied.
37340      var clone = el.cloneNode();
37341      if (el._transitionClasses) {
37342        el._transitionClasses.forEach(function (cls) { removeClass(clone, cls); });
37343      }
37344      addClass(clone, moveClass);
37345      clone.style.display = 'none';
37346      this.$el.appendChild(clone);
37347      var info = getTransitionInfo(clone);
37348      this.$el.removeChild(clone);
37349      return (this._hasMove = info.hasTransform)
37350    }
37351  }
37352};
37353
37354function callPendingCbs (c) {
37355  /* istanbul ignore if */
37356  if (c.elm._moveCb) {
37357    c.elm._moveCb();
37358  }
37359  /* istanbul ignore if */
37360  if (c.elm._enterCb) {
37361    c.elm._enterCb();
37362  }
37363}
37364
37365function recordPosition (c) {
37366  c.data.newPos = c.elm.getBoundingClientRect();
37367}
37368
37369function applyTranslation (c) {
37370  var oldPos = c.data.pos;
37371  var newPos = c.data.newPos;
37372  var dx = oldPos.left - newPos.left;
37373  var dy = oldPos.top - newPos.top;
37374  if (dx || dy) {
37375    c.data.moved = true;
37376    var s = c.elm.style;
37377    s.transform = s.WebkitTransform = "translate(" + dx + "px," + dy + "px)";
37378    s.transitionDuration = '0s';
37379  }
37380}
37381
37382var platformComponents = {
37383  Transition: Transition,
37384  TransitionGroup: TransitionGroup
37385};
37386
37387/*  */
37388
37389// install platform specific utils
37390Vue.config.mustUseProp = mustUseProp;
37391Vue.config.isReservedTag = isReservedTag;
37392Vue.config.isReservedAttr = isReservedAttr;
37393Vue.config.getTagNamespace = getTagNamespace;
37394Vue.config.isUnknownElement = isUnknownElement;
37395
37396// install platform runtime directives & components
37397extend(Vue.options.directives, platformDirectives);
37398extend(Vue.options.components, platformComponents);
37399
37400// install platform patch function
37401Vue.prototype.__patch__ = inBrowser ? patch : noop;
37402
37403// public mount method
37404Vue.prototype.$mount = function (
37405  el,
37406  hydrating
37407) {
37408  el = el && inBrowser ? query(el) : undefined;
37409  return mountComponent(this, el, hydrating)
37410};
37411
37412// devtools global hook
37413/* istanbul ignore next */
37414if (inBrowser) {
37415  setTimeout(function () {
37416    if (config.devtools) {
37417      if (devtools) {
37418        devtools.emit('init', Vue);
37419      } else if (
37420        true
37421      ) {
37422        console[console.info ? 'info' : 'log'](
37423          'Download the Vue Devtools extension for a better development experience:\n' +
37424          'https://github.com/vuejs/vue-devtools'
37425        );
37426      }
37427    }
37428    if ( true &&
37429      config.productionTip !== false &&
37430      typeof console !== 'undefined'
37431    ) {
37432      console[console.info ? 'info' : 'log'](
37433        "You are running Vue in development mode.\n" +
37434        "Make sure to turn on production mode when deploying for production.\n" +
37435        "See more tips at https://vuejs.org/guide/deployment.html"
37436      );
37437    }
37438  }, 0);
37439}
37440
37441/*  */
37442
37443var defaultTagRE = /\{\{((?:.|\r?\n)+?)\}\}/g;
37444var regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g;
37445
37446var buildRegex = cached(function (delimiters) {
37447  var open = delimiters[0].replace(regexEscapeRE, '\\$&');
37448  var close = delimiters[1].replace(regexEscapeRE, '\\$&');
37449  return new RegExp(open + '((?:.|\\n)+?)' + close, 'g')
37450});
37451
37452
37453
37454function parseText (
37455  text,
37456  delimiters
37457) {
37458  var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;
37459  if (!tagRE.test(text)) {
37460    return
37461  }
37462  var tokens = [];
37463  var rawTokens = [];
37464  var lastIndex = tagRE.lastIndex = 0;
37465  var match, index, tokenValue;
37466  while ((match = tagRE.exec(text))) {
37467    index = match.index;
37468    // push text token
37469    if (index > lastIndex) {
37470      rawTokens.push(tokenValue = text.slice(lastIndex, index));
37471      tokens.push(JSON.stringify(tokenValue));
37472    }
37473    // tag token
37474    var exp = parseFilters(match[1].trim());
37475    tokens.push(("_s(" + exp + ")"));
37476    rawTokens.push({ '@binding': exp });
37477    lastIndex = index + match[0].length;
37478  }
37479  if (lastIndex < text.length) {
37480    rawTokens.push(tokenValue = text.slice(lastIndex));
37481    tokens.push(JSON.stringify(tokenValue));
37482  }
37483  return {
37484    expression: tokens.join('+'),
37485    tokens: rawTokens
37486  }
37487}
37488
37489/*  */
37490
37491function transformNode (el, options) {
37492  var warn = options.warn || baseWarn;
37493  var staticClass = getAndRemoveAttr(el, 'class');
37494  if ( true && staticClass) {
37495    var res = parseText(staticClass, options.delimiters);
37496    if (res) {
37497      warn(
37498        "class=\"" + staticClass + "\": " +
37499        'Interpolation inside attributes has been removed. ' +
37500        'Use v-bind or the colon shorthand instead. For example, ' +
37501        'instead of <div class="{{ val }}">, use <div :class="val">.',
37502        el.rawAttrsMap['class']
37503      );
37504    }
37505  }
37506  if (staticClass) {
37507    el.staticClass = JSON.stringify(staticClass);
37508  }
37509  var classBinding = getBindingAttr(el, 'class', false /* getStatic */);
37510  if (classBinding) {
37511    el.classBinding = classBinding;
37512  }
37513}
37514
37515function genData (el) {
37516  var data = '';
37517  if (el.staticClass) {
37518    data += "staticClass:" + (el.staticClass) + ",";
37519  }
37520  if (el.classBinding) {
37521    data += "class:" + (el.classBinding) + ",";
37522  }
37523  return data
37524}
37525
37526var klass$1 = {
37527  staticKeys: ['staticClass'],
37528  transformNode: transformNode,
37529  genData: genData
37530};
37531
37532/*  */
37533
37534function transformNode$1 (el, options) {
37535  var warn = options.warn || baseWarn;
37536  var staticStyle = getAndRemoveAttr(el, 'style');
37537  if (staticStyle) {
37538    /* istanbul ignore if */
37539    if (true) {
37540      var res = parseText(staticStyle, options.delimiters);
37541      if (res) {
37542        warn(
37543          "style=\"" + staticStyle + "\": " +
37544          'Interpolation inside attributes has been removed. ' +
37545          'Use v-bind or the colon shorthand instead. For example, ' +
37546          'instead of <div style="{{ val }}">, use <div :style="val">.',
37547          el.rawAttrsMap['style']
37548        );
37549      }
37550    }
37551    el.staticStyle = JSON.stringify(parseStyleText(staticStyle));
37552  }
37553
37554  var styleBinding = getBindingAttr(el, 'style', false /* getStatic */);
37555  if (styleBinding) {
37556    el.styleBinding = styleBinding;
37557  }
37558}
37559
37560function genData$1 (el) {
37561  var data = '';
37562  if (el.staticStyle) {
37563    data += "staticStyle:" + (el.staticStyle) + ",";
37564  }
37565  if (el.styleBinding) {
37566    data += "style:(" + (el.styleBinding) + "),";
37567  }
37568  return data
37569}
37570
37571var style$1 = {
37572  staticKeys: ['staticStyle'],
37573  transformNode: transformNode$1,
37574  genData: genData$1
37575};
37576
37577/*  */
37578
37579var decoder;
37580
37581var he = {
37582  decode: function decode (html) {
37583    decoder = decoder || document.createElement('div');
37584    decoder.innerHTML = html;
37585    return decoder.textContent
37586  }
37587};
37588
37589/*  */
37590
37591var isUnaryTag = makeMap(
37592  'area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +
37593  'link,meta,param,source,track,wbr'
37594);
37595
37596// Elements that you can, intentionally, leave open
37597// (and which close themselves)
37598var canBeLeftOpenTag = makeMap(
37599  'colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source'
37600);
37601
37602// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3
37603// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content
37604var isNonPhrasingTag = makeMap(
37605  'address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +
37606  'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +
37607  'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +
37608  'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +
37609  'title,tr,track'
37610);
37611
37612/**
37613 * Not type-checking this file because it's mostly vendor code.
37614 */
37615
37616// Regular Expressions for parsing tags and attributes
37617var attribute = /^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/;
37618var dynamicArgAttribute = /^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/;
37619var ncname = "[a-zA-Z_][\\-\\.0-9_a-zA-Z" + (unicodeRegExp.source) + "]*";
37620var qnameCapture = "((?:" + ncname + "\\:)?" + ncname + ")";
37621var startTagOpen = new RegExp(("^<" + qnameCapture));
37622var startTagClose = /^\s*(\/?)>/;
37623var endTag = new RegExp(("^<\\/" + qnameCapture + "[^>]*>"));
37624var doctype = /^<!DOCTYPE [^>]+>/i;
37625// #7298: escape - to avoid being passed as HTML comment when inlined in page
37626var comment = /^<!\--/;
37627var conditionalComment = /^<!\[/;
37628
37629// Special Elements (can contain anything)
37630var isPlainTextElement = makeMap('script,style,textarea', true);
37631var reCache = {};
37632
37633var decodingMap = {
37634  '&lt;': '<',
37635  '&gt;': '>',
37636  '&quot;': '"',
37637  '&amp;': '&',
37638  '&#10;': '\n',
37639  '&#9;': '\t',
37640  '&#39;': "'"
37641};
37642var encodedAttr = /&(?:lt|gt|quot|amp|#39);/g;
37643var encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g;
37644
37645// #5992
37646var isIgnoreNewlineTag = makeMap('pre,textarea', true);
37647var shouldIgnoreFirstNewline = function (tag, html) { return tag && isIgnoreNewlineTag(tag) && html[0] === '\n'; };
37648
37649function decodeAttr (value, shouldDecodeNewlines) {
37650  var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;
37651  return value.replace(re, function (match) { return decodingMap[match]; })
37652}
37653
37654function parseHTML (html, options) {
37655  var stack = [];
37656  var expectHTML = options.expectHTML;
37657  var isUnaryTag$$1 = options.isUnaryTag || no;
37658  var canBeLeftOpenTag$$1 = options.canBeLeftOpenTag || no;
37659  var index = 0;
37660  var last, lastTag;
37661  while (html) {
37662    last = html;
37663    // Make sure we're not in a plaintext content element like script/style
37664    if (!lastTag || !isPlainTextElement(lastTag)) {
37665      var textEnd = html.indexOf('<');
37666      if (textEnd === 0) {
37667        // Comment:
37668        if (comment.test(html)) {
37669          var commentEnd = html.indexOf('-->');
37670
37671          if (commentEnd >= 0) {
37672            if (options.shouldKeepComment) {
37673              options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3);
37674            }
37675            advance(commentEnd + 3);
37676            continue
37677          }
37678        }
37679
37680        // http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment
37681        if (conditionalComment.test(html)) {
37682          var conditionalEnd = html.indexOf(']>');
37683
37684          if (conditionalEnd >= 0) {
37685            advance(conditionalEnd + 2);
37686            continue
37687          }
37688        }
37689
37690        // Doctype:
37691        var doctypeMatch = html.match(doctype);
37692        if (doctypeMatch) {
37693          advance(doctypeMatch[0].length);
37694          continue
37695        }
37696
37697        // End tag:
37698        var endTagMatch = html.match(endTag);
37699        if (endTagMatch) {
37700          var curIndex = index;
37701          advance(endTagMatch[0].length);
37702          parseEndTag(endTagMatch[1], curIndex, index);
37703          continue
37704        }
37705
37706        // Start tag:
37707        var startTagMatch = parseStartTag();
37708        if (startTagMatch) {
37709          handleStartTag(startTagMatch);
37710          if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {
37711            advance(1);
37712          }
37713          continue
37714        }
37715      }
37716
37717      var text = (void 0), rest = (void 0), next = (void 0);
37718      if (textEnd >= 0) {
37719        rest = html.slice(textEnd);
37720        while (
37721          !endTag.test(rest) &&
37722          !startTagOpen.test(rest) &&
37723          !comment.test(rest) &&
37724          !conditionalComment.test(rest)
37725        ) {
37726          // < in plain text, be forgiving and treat it as text
37727          next = rest.indexOf('<', 1);
37728          if (next < 0) { break }
37729          textEnd += next;
37730          rest = html.slice(textEnd);
37731        }
37732        text = html.substring(0, textEnd);
37733      }
37734
37735      if (textEnd < 0) {
37736        text = html;
37737      }
37738
37739      if (text) {
37740        advance(text.length);
37741      }
37742
37743      if (options.chars && text) {
37744        options.chars(text, index - text.length, index);
37745      }
37746    } else {
37747      var endTagLength = 0;
37748      var stackedTag = lastTag.toLowerCase();
37749      var reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp('([\\s\\S]*?)(</' + stackedTag + '[^>]*>)', 'i'));
37750      var rest$1 = html.replace(reStackedTag, function (all, text, endTag) {
37751        endTagLength = endTag.length;
37752        if (!isPlainTextElement(stackedTag) && stackedTag !== 'noscript') {
37753          text = text
37754            .replace(/<!\--([\s\S]*?)-->/g, '$1') // #7298
37755            .replace(/<!\[CDATA\[([\s\S]*?)]]>/g, '$1');
37756        }
37757        if (shouldIgnoreFirstNewline(stackedTag, text)) {
37758          text = text.slice(1);
37759        }
37760        if (options.chars) {
37761          options.chars(text);
37762        }
37763        return ''
37764      });
37765      index += html.length - rest$1.length;
37766      html = rest$1;
37767      parseEndTag(stackedTag, index - endTagLength, index);
37768    }
37769
37770    if (html === last) {
37771      options.chars && options.chars(html);
37772      if ( true && !stack.length && options.warn) {
37773        options.warn(("Mal-formatted tag at end of template: \"" + html + "\""), { start: index + html.length });
37774      }
37775      break
37776    }
37777  }
37778
37779  // Clean up any remaining tags
37780  parseEndTag();
37781
37782  function advance (n) {
37783    index += n;
37784    html = html.substring(n);
37785  }
37786
37787  function parseStartTag () {
37788    var start = html.match(startTagOpen);
37789    if (start) {
37790      var match = {
37791        tagName: start[1],
37792        attrs: [],
37793        start: index
37794      };
37795      advance(start[0].length);
37796      var end, attr;
37797      while (!(end = html.match(startTagClose)) && (attr = html.match(dynamicArgAttribute) || html.match(attribute))) {
37798        attr.start = index;
37799        advance(attr[0].length);
37800        attr.end = index;
37801        match.attrs.push(attr);
37802      }
37803      if (end) {
37804        match.unarySlash = end[1];
37805        advance(end[0].length);
37806        match.end = index;
37807        return match
37808      }
37809    }
37810  }
37811
37812  function handleStartTag (match) {
37813    var tagName = match.tagName;
37814    var unarySlash = match.unarySlash;
37815
37816    if (expectHTML) {
37817      if (lastTag === 'p' && isNonPhrasingTag(tagName)) {
37818        parseEndTag(lastTag);
37819      }
37820      if (canBeLeftOpenTag$$1(tagName) && lastTag === tagName) {
37821        parseEndTag(tagName);
37822      }
37823    }
37824
37825    var unary = isUnaryTag$$1(tagName) || !!unarySlash;
37826
37827    var l = match.attrs.length;
37828    var attrs = new Array(l);
37829    for (var i = 0; i < l; i++) {
37830      var args = match.attrs[i];
37831      var value = args[3] || args[4] || args[5] || '';
37832      var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'
37833        ? options.shouldDecodeNewlinesForHref
37834        : options.shouldDecodeNewlines;
37835      attrs[i] = {
37836        name: args[1],
37837        value: decodeAttr(value, shouldDecodeNewlines)
37838      };
37839      if ( true && options.outputSourceRange) {
37840        attrs[i].start = args.start + args[0].match(/^\s*/).length;
37841        attrs[i].end = args.end;
37842      }
37843    }
37844
37845    if (!unary) {
37846      stack.push({ tag: tagName, lowerCasedTag: tagName.toLowerCase(), attrs: attrs, start: match.start, end: match.end });
37847      lastTag = tagName;
37848    }
37849
37850    if (options.start) {
37851      options.start(tagName, attrs, unary, match.start, match.end);
37852    }
37853  }
37854
37855  function parseEndTag (tagName, start, end) {
37856    var pos, lowerCasedTagName;
37857    if (start == null) { start = index; }
37858    if (end == null) { end = index; }
37859
37860    // Find the closest opened tag of the same type
37861    if (tagName) {
37862      lowerCasedTagName = tagName.toLowerCase();
37863      for (pos = stack.length - 1; pos >= 0; pos--) {
37864        if (stack[pos].lowerCasedTag === lowerCasedTagName) {
37865          break
37866        }
37867      }
37868    } else {
37869      // If no tag name is provided, clean shop
37870      pos = 0;
37871    }
37872
37873    if (pos >= 0) {
37874      // Close all the open elements, up the stack
37875      for (var i = stack.length - 1; i >= pos; i--) {
37876        if ( true &&
37877          (i > pos || !tagName) &&
37878          options.warn
37879        ) {
37880          options.warn(
37881            ("tag <" + (stack[i].tag) + "> has no matching end tag."),
37882            { start: stack[i].start, end: stack[i].end }
37883          );
37884        }
37885        if (options.end) {
37886          options.end(stack[i].tag, start, end);
37887        }
37888      }
37889
37890      // Remove the open elements from the stack
37891      stack.length = pos;
37892      lastTag = pos && stack[pos - 1].tag;
37893    } else if (lowerCasedTagName === 'br') {
37894      if (options.start) {
37895        options.start(tagName, [], true, start, end);
37896      }
37897    } else if (lowerCasedTagName === 'p') {
37898      if (options.start) {
37899        options.start(tagName, [], false, start, end);
37900      }
37901      if (options.end) {
37902        options.end(tagName, start, end);
37903      }
37904    }
37905  }
37906}
37907
37908/*  */
37909
37910var onRE = /^@|^v-on:/;
37911var dirRE = /^v-|^@|^:|^#/;
37912var forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/;
37913var forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/;
37914var stripParensRE = /^\(|\)$/g;
37915var dynamicArgRE = /^\[.*\]$/;
37916
37917var argRE = /:(.*)$/;
37918var bindRE = /^:|^\.|^v-bind:/;
37919var modifierRE = /\.[^.\]]+(?=[^\]]*$)/g;
37920
37921var slotRE = /^v-slot(:|$)|^#/;
37922
37923var lineBreakRE = /[\r\n]/;
37924var whitespaceRE$1 = /[ \f\t\r\n]+/g;
37925
37926var invalidAttributeRE = /[\s"'<>\/=]/;
37927
37928var decodeHTMLCached = cached(he.decode);
37929
37930var emptySlotScopeToken = "_empty_";
37931
37932// configurable state
37933var warn$2;
37934var delimiters;
37935var transforms;
37936var preTransforms;
37937var postTransforms;
37938var platformIsPreTag;
37939var platformMustUseProp;
37940var platformGetTagNamespace;
37941var maybeComponent;
37942
37943function createASTElement (
37944  tag,
37945  attrs,
37946  parent
37947) {
37948  return {
37949    type: 1,
37950    tag: tag,
37951    attrsList: attrs,
37952    attrsMap: makeAttrsMap(attrs),
37953    rawAttrsMap: {},
37954    parent: parent,
37955    children: []
37956  }
37957}
37958
37959/**
37960 * Convert HTML string to AST.
37961 */
37962function parse (
37963  template,
37964  options
37965) {
37966  warn$2 = options.warn || baseWarn;
37967
37968  platformIsPreTag = options.isPreTag || no;
37969  platformMustUseProp = options.mustUseProp || no;
37970  platformGetTagNamespace = options.getTagNamespace || no;
37971  var isReservedTag = options.isReservedTag || no;
37972  maybeComponent = function (el) { return !!(
37973    el.component ||
37974    el.attrsMap[':is'] ||
37975    el.attrsMap['v-bind:is'] ||
37976    !(el.attrsMap.is ? isReservedTag(el.attrsMap.is) : isReservedTag(el.tag))
37977  ); };
37978  transforms = pluckModuleFunction(options.modules, 'transformNode');
37979  preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');
37980  postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');
37981
37982  delimiters = options.delimiters;
37983
37984  var stack = [];
37985  var preserveWhitespace = options.preserveWhitespace !== false;
37986  var whitespaceOption = options.whitespace;
37987  var root;
37988  var currentParent;
37989  var inVPre = false;
37990  var inPre = false;
37991  var warned = false;
37992
37993  function warnOnce (msg, range) {
37994    if (!warned) {
37995      warned = true;
37996      warn$2(msg, range);
37997    }
37998  }
37999
38000  function closeElement (element) {
38001    trimEndingWhitespace(element);
38002    if (!inVPre && !element.processed) {
38003      element = processElement(element, options);
38004    }
38005    // tree management
38006    if (!stack.length && element !== root) {
38007      // allow root elements with v-if, v-else-if and v-else
38008      if (root.if && (element.elseif || element.else)) {
38009        if (true) {
38010          checkRootConstraints(element);
38011        }
38012        addIfCondition(root, {
38013          exp: element.elseif,
38014          block: element
38015        });
38016      } else if (true) {
38017        warnOnce(
38018          "Component template should contain exactly one root element. " +
38019          "If you are using v-if on multiple elements, " +
38020          "use v-else-if to chain them instead.",
38021          { start: element.start }
38022        );
38023      }
38024    }
38025    if (currentParent && !element.forbidden) {
38026      if (element.elseif || element.else) {
38027        processIfConditions(element, currentParent);
38028      } else {
38029        if (element.slotScope) {
38030          // scoped slot
38031          // keep it in the children list so that v-else(-if) conditions can
38032          // find it as the prev node.
38033          var name = element.slotTarget || '"default"'
38034          ;(currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element;
38035        }
38036        currentParent.children.push(element);
38037        element.parent = currentParent;
38038      }
38039    }
38040
38041    // final children cleanup
38042    // filter out scoped slots
38043    element.children = element.children.filter(function (c) { return !(c).slotScope; });
38044    // remove trailing whitespace node again
38045    trimEndingWhitespace(element);
38046
38047    // check pre state
38048    if (element.pre) {
38049      inVPre = false;
38050    }
38051    if (platformIsPreTag(element.tag)) {
38052      inPre = false;
38053    }
38054    // apply post-transforms
38055    for (var i = 0; i < postTransforms.length; i++) {
38056      postTransforms[i](element, options);
38057    }
38058  }
38059
38060  function trimEndingWhitespace (el) {
38061    // remove trailing whitespace node
38062    if (!inPre) {
38063      var lastNode;
38064      while (
38065        (lastNode = el.children[el.children.length - 1]) &&
38066        lastNode.type === 3 &&
38067        lastNode.text === ' '
38068      ) {
38069        el.children.pop();
38070      }
38071    }
38072  }
38073
38074  function checkRootConstraints (el) {
38075    if (el.tag === 'slot' || el.tag === 'template') {
38076      warnOnce(
38077        "Cannot use <" + (el.tag) + "> as component root element because it may " +
38078        'contain multiple nodes.',
38079        { start: el.start }
38080      );
38081    }
38082    if (el.attrsMap.hasOwnProperty('v-for')) {
38083      warnOnce(
38084        'Cannot use v-for on stateful component root element because ' +
38085        'it renders multiple elements.',
38086        el.rawAttrsMap['v-for']
38087      );
38088    }
38089  }
38090
38091  parseHTML(template, {
38092    warn: warn$2,
38093    expectHTML: options.expectHTML,
38094    isUnaryTag: options.isUnaryTag,
38095    canBeLeftOpenTag: options.canBeLeftOpenTag,
38096    shouldDecodeNewlines: options.shouldDecodeNewlines,
38097    shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,
38098    shouldKeepComment: options.comments,
38099    outputSourceRange: options.outputSourceRange,
38100    start: function start (tag, attrs, unary, start$1, end) {
38101      // check namespace.
38102      // inherit parent ns if there is one
38103      var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);
38104
38105      // handle IE svg bug
38106      /* istanbul ignore if */
38107      if (isIE && ns === 'svg') {
38108        attrs = guardIESVGBug(attrs);
38109      }
38110
38111      var element = createASTElement(tag, attrs, currentParent);
38112      if (ns) {
38113        element.ns = ns;
38114      }
38115
38116      if (true) {
38117        if (options.outputSourceRange) {
38118          element.start = start$1;
38119          element.end = end;
38120          element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) {
38121            cumulated[attr.name] = attr;
38122            return cumulated
38123          }, {});
38124        }
38125        attrs.forEach(function (attr) {
38126          if (invalidAttributeRE.test(attr.name)) {
38127            warn$2(
38128              "Invalid dynamic argument expression: attribute names cannot contain " +
38129              "spaces, quotes, <, >, / or =.",
38130              {
38131                start: attr.start + attr.name.indexOf("["),
38132                end: attr.start + attr.name.length
38133              }
38134            );
38135          }
38136        });
38137      }
38138
38139      if (isForbiddenTag(element) && !isServerRendering()) {
38140        element.forbidden = true;
38141         true && warn$2(
38142          'Templates should only be responsible for mapping the state to the ' +
38143          'UI. Avoid placing tags with side-effects in your templates, such as ' +
38144          "<" + tag + ">" + ', as they will not be parsed.',
38145          { start: element.start }
38146        );
38147      }
38148
38149      // apply pre-transforms
38150      for (var i = 0; i < preTransforms.length; i++) {
38151        element = preTransforms[i](element, options) || element;
38152      }
38153
38154      if (!inVPre) {
38155        processPre(element);
38156        if (element.pre) {
38157          inVPre = true;
38158        }
38159      }
38160      if (platformIsPreTag(element.tag)) {
38161        inPre = true;
38162      }
38163      if (inVPre) {
38164        processRawAttrs(element);
38165      } else if (!element.processed) {
38166        // structural directives
38167        processFor(element);
38168        processIf(element);
38169        processOnce(element);
38170      }
38171
38172      if (!root) {
38173        root = element;
38174        if (true) {
38175          checkRootConstraints(root);
38176        }
38177      }
38178
38179      if (!unary) {
38180        currentParent = element;
38181        stack.push(element);
38182      } else {
38183        closeElement(element);
38184      }
38185    },
38186
38187    end: function end (tag, start, end$1) {
38188      var element = stack[stack.length - 1];
38189      // pop stack
38190      stack.length -= 1;
38191      currentParent = stack[stack.length - 1];
38192      if ( true && options.outputSourceRange) {
38193        element.end = end$1;
38194      }
38195      closeElement(element);
38196    },
38197
38198    chars: function chars (text, start, end) {
38199      if (!currentParent) {
38200        if (true) {
38201          if (text === template) {
38202            warnOnce(
38203              'Component template requires a root element, rather than just text.',
38204              { start: start }
38205            );
38206          } else if ((text = text.trim())) {
38207            warnOnce(
38208              ("text \"" + text + "\" outside root element will be ignored."),
38209              { start: start }
38210            );
38211          }
38212        }
38213        return
38214      }
38215      // IE textarea placeholder bug
38216      /* istanbul ignore if */
38217      if (isIE &&
38218        currentParent.tag === 'textarea' &&
38219        currentParent.attrsMap.placeholder === text
38220      ) {
38221        return
38222      }
38223      var children = currentParent.children;
38224      if (inPre || text.trim()) {
38225        text = isTextTag(currentParent) ? text : decodeHTMLCached(text);
38226      } else if (!children.length) {
38227        // remove the whitespace-only node right after an opening tag
38228        text = '';
38229      } else if (whitespaceOption) {
38230        if (whitespaceOption === 'condense') {
38231          // in condense mode, remove the whitespace node if it contains
38232          // line break, otherwise condense to a single space
38233          text = lineBreakRE.test(text) ? '' : ' ';
38234        } else {
38235          text = ' ';
38236        }
38237      } else {
38238        text = preserveWhitespace ? ' ' : '';
38239      }
38240      if (text) {
38241        if (!inPre && whitespaceOption === 'condense') {
38242          // condense consecutive whitespaces into single space
38243          text = text.replace(whitespaceRE$1, ' ');
38244        }
38245        var res;
38246        var child;
38247        if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {
38248          child = {
38249            type: 2,
38250            expression: res.expression,
38251            tokens: res.tokens,
38252            text: text
38253          };
38254        } else if (text !== ' ' || !children.length || children[children.length - 1].text !== ' ') {
38255          child = {
38256            type: 3,
38257            text: text
38258          };
38259        }
38260        if (child) {
38261          if ( true && options.outputSourceRange) {
38262            child.start = start;
38263            child.end = end;
38264          }
38265          children.push(child);
38266        }
38267      }
38268    },
38269    comment: function comment (text, start, end) {
38270      // adding anything as a sibling to the root node is forbidden
38271      // comments should still be allowed, but ignored
38272      if (currentParent) {
38273        var child = {
38274          type: 3,
38275          text: text,
38276          isComment: true
38277        };
38278        if ( true && options.outputSourceRange) {
38279          child.start = start;
38280          child.end = end;
38281        }
38282        currentParent.children.push(child);
38283      }
38284    }
38285  });
38286  return root
38287}
38288
38289function processPre (el) {
38290  if (getAndRemoveAttr(el, 'v-pre') != null) {
38291    el.pre = true;
38292  }
38293}
38294
38295function processRawAttrs (el) {
38296  var list = el.attrsList;
38297  var len = list.length;
38298  if (len) {
38299    var attrs = el.attrs = new Array(len);
38300    for (var i = 0; i < len; i++) {
38301      attrs[i] = {
38302        name: list[i].name,
38303        value: JSON.stringify(list[i].value)
38304      };
38305      if (list[i].start != null) {
38306        attrs[i].start = list[i].start;
38307        attrs[i].end = list[i].end;
38308      }
38309    }
38310  } else if (!el.pre) {
38311    // non root node in pre blocks with no attributes
38312    el.plain = true;
38313  }
38314}
38315
38316function processElement (
38317  element,
38318  options
38319) {
38320  processKey(element);
38321
38322  // determine whether this is a plain element after
38323  // removing structural attributes
38324  element.plain = (
38325    !element.key &&
38326    !element.scopedSlots &&
38327    !element.attrsList.length
38328  );
38329
38330  processRef(element);
38331  processSlotContent(element);
38332  processSlotOutlet(element);
38333  processComponent(element);
38334  for (var i = 0; i < transforms.length; i++) {
38335    element = transforms[i](element, options) || element;
38336  }
38337  processAttrs(element);
38338  return element
38339}
38340
38341function processKey (el) {
38342  var exp = getBindingAttr(el, 'key');
38343  if (exp) {
38344    if (true) {
38345      if (el.tag === 'template') {
38346        warn$2(
38347          "<template> cannot be keyed. Place the key on real elements instead.",
38348          getRawBindingAttr(el, 'key')
38349        );
38350      }
38351      if (el.for) {
38352        var iterator = el.iterator2 || el.iterator1;
38353        var parent = el.parent;
38354        if (iterator && iterator === exp && parent && parent.tag === 'transition-group') {
38355          warn$2(
38356            "Do not use v-for index as key on <transition-group> children, " +
38357            "this is the same as not using keys.",
38358            getRawBindingAttr(el, 'key'),
38359            true /* tip */
38360          );
38361        }
38362      }
38363    }
38364    el.key = exp;
38365  }
38366}
38367
38368function processRef (el) {
38369  var ref = getBindingAttr(el, 'ref');
38370  if (ref) {
38371    el.ref = ref;
38372    el.refInFor = checkInFor(el);
38373  }
38374}
38375
38376function processFor (el) {
38377  var exp;
38378  if ((exp = getAndRemoveAttr(el, 'v-for'))) {
38379    var res = parseFor(exp);
38380    if (res) {
38381      extend(el, res);
38382    } else if (true) {
38383      warn$2(
38384        ("Invalid v-for expression: " + exp),
38385        el.rawAttrsMap['v-for']
38386      );
38387    }
38388  }
38389}
38390
38391
38392
38393function parseFor (exp) {
38394  var inMatch = exp.match(forAliasRE);
38395  if (!inMatch) { return }
38396  var res = {};
38397  res.for = inMatch[2].trim();
38398  var alias = inMatch[1].trim().replace(stripParensRE, '');
38399  var iteratorMatch = alias.match(forIteratorRE);
38400  if (iteratorMatch) {
38401    res.alias = alias.replace(forIteratorRE, '').trim();
38402    res.iterator1 = iteratorMatch[1].trim();
38403    if (iteratorMatch[2]) {
38404      res.iterator2 = iteratorMatch[2].trim();
38405    }
38406  } else {
38407    res.alias = alias;
38408  }
38409  return res
38410}
38411
38412function processIf (el) {
38413  var exp = getAndRemoveAttr(el, 'v-if');
38414  if (exp) {
38415    el.if = exp;
38416    addIfCondition(el, {
38417      exp: exp,
38418      block: el
38419    });
38420  } else {
38421    if (getAndRemoveAttr(el, 'v-else') != null) {
38422      el.else = true;
38423    }
38424    var elseif = getAndRemoveAttr(el, 'v-else-if');
38425    if (elseif) {
38426      el.elseif = elseif;
38427    }
38428  }
38429}
38430
38431function processIfConditions (el, parent) {
38432  var prev = findPrevElement(parent.children);
38433  if (prev && prev.if) {
38434    addIfCondition(prev, {
38435      exp: el.elseif,
38436      block: el
38437    });
38438  } else if (true) {
38439    warn$2(
38440      "v-" + (el.elseif ? ('else-if="' + el.elseif + '"') : 'else') + " " +
38441      "used on element <" + (el.tag) + "> without corresponding v-if.",
38442      el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']
38443    );
38444  }
38445}
38446
38447function findPrevElement (children) {
38448  var i = children.length;
38449  while (i--) {
38450    if (children[i].type === 1) {
38451      return children[i]
38452    } else {
38453      if ( true && children[i].text !== ' ') {
38454        warn$2(
38455          "text \"" + (children[i].text.trim()) + "\" between v-if and v-else(-if) " +
38456          "will be ignored.",
38457          children[i]
38458        );
38459      }
38460      children.pop();
38461    }
38462  }
38463}
38464
38465function addIfCondition (el, condition) {
38466  if (!el.ifConditions) {
38467    el.ifConditions = [];
38468  }
38469  el.ifConditions.push(condition);
38470}
38471
38472function processOnce (el) {
38473  var once$$1 = getAndRemoveAttr(el, 'v-once');
38474  if (once$$1 != null) {
38475    el.once = true;
38476  }
38477}
38478
38479// handle content being passed to a component as slot,
38480// e.g. <template slot="xxx">, <div slot-scope="xxx">
38481function processSlotContent (el) {
38482  var slotScope;
38483  if (el.tag === 'template') {
38484    slotScope = getAndRemoveAttr(el, 'scope');
38485    /* istanbul ignore if */
38486    if ( true && slotScope) {
38487      warn$2(
38488        "the \"scope\" attribute for scoped slots have been deprecated and " +
38489        "replaced by \"slot-scope\" since 2.5. The new \"slot-scope\" attribute " +
38490        "can also be used on plain elements in addition to <template> to " +
38491        "denote scoped slots.",
38492        el.rawAttrsMap['scope'],
38493        true
38494      );
38495    }
38496    el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');
38497  } else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {
38498    /* istanbul ignore if */
38499    if ( true && el.attrsMap['v-for']) {
38500      warn$2(
38501        "Ambiguous combined usage of slot-scope and v-for on <" + (el.tag) + "> " +
38502        "(v-for takes higher priority). Use a wrapper <template> for the " +
38503        "scoped slot to make it clearer.",
38504        el.rawAttrsMap['slot-scope'],
38505        true
38506      );
38507    }
38508    el.slotScope = slotScope;
38509  }
38510
38511  // slot="xxx"
38512  var slotTarget = getBindingAttr(el, 'slot');
38513  if (slotTarget) {
38514    el.slotTarget = slotTarget === '""' ? '"default"' : slotTarget;
38515    el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']);
38516    // preserve slot as an attribute for native shadow DOM compat
38517    // only for non-scoped slots.
38518    if (el.tag !== 'template' && !el.slotScope) {
38519      addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'));
38520    }
38521  }
38522
38523  // 2.6 v-slot syntax
38524  {
38525    if (el.tag === 'template') {
38526      // v-slot on <template>
38527      var slotBinding = getAndRemoveAttrByRegex(el, slotRE);
38528      if (slotBinding) {
38529        if (true) {
38530          if (el.slotTarget || el.slotScope) {
38531            warn$2(
38532              "Unexpected mixed usage of different slot syntaxes.",
38533              el
38534            );
38535          }
38536          if (el.parent && !maybeComponent(el.parent)) {
38537            warn$2(
38538              "<template v-slot> can only appear at the root level inside " +
38539              "the receiving component",
38540              el
38541            );
38542          }
38543        }
38544        var ref = getSlotName(slotBinding);
38545        var name = ref.name;
38546        var dynamic = ref.dynamic;
38547        el.slotTarget = name;
38548        el.slotTargetDynamic = dynamic;
38549        el.slotScope = slotBinding.value || emptySlotScopeToken; // force it into a scoped slot for perf
38550      }
38551    } else {
38552      // v-slot on component, denotes default slot
38553      var slotBinding$1 = getAndRemoveAttrByRegex(el, slotRE);
38554      if (slotBinding$1) {
38555        if (true) {
38556          if (!maybeComponent(el)) {
38557            warn$2(
38558              "v-slot can only be used on components or <template>.",
38559              slotBinding$1
38560            );
38561          }
38562          if (el.slotScope || el.slotTarget) {
38563            warn$2(
38564              "Unexpected mixed usage of different slot syntaxes.",
38565              el
38566            );
38567          }
38568          if (el.scopedSlots) {
38569            warn$2(
38570              "To avoid scope ambiguity, the default slot should also use " +
38571              "<template> syntax when there are other named slots.",
38572              slotBinding$1
38573            );
38574          }
38575        }
38576        // add the component's children to its default slot
38577        var slots = el.scopedSlots || (el.scopedSlots = {});
38578        var ref$1 = getSlotName(slotBinding$1);
38579        var name$1 = ref$1.name;
38580        var dynamic$1 = ref$1.dynamic;
38581        var slotContainer = slots[name$1] = createASTElement('template', [], el);
38582        slotContainer.slotTarget = name$1;
38583        slotContainer.slotTargetDynamic = dynamic$1;
38584        slotContainer.children = el.children.filter(function (c) {
38585          if (!c.slotScope) {
38586            c.parent = slotContainer;
38587            return true
38588          }
38589        });
38590        slotContainer.slotScope = slotBinding$1.value || emptySlotScopeToken;
38591        // remove children as they are returned from scopedSlots now
38592        el.children = [];
38593        // mark el non-plain so data gets generated
38594        el.plain = false;
38595      }
38596    }
38597  }
38598}
38599
38600function getSlotName (binding) {
38601  var name = binding.name.replace(slotRE, '');
38602  if (!name) {
38603    if (binding.name[0] !== '#') {
38604      name = 'default';
38605    } else if (true) {
38606      warn$2(
38607        "v-slot shorthand syntax requires a slot name.",
38608        binding
38609      );
38610    }
38611  }
38612  return dynamicArgRE.test(name)
38613    // dynamic [name]
38614    ? { name: name.slice(1, -1), dynamic: true }
38615    // static name
38616    : { name: ("\"" + name + "\""), dynamic: false }
38617}
38618
38619// handle <slot/> outlets
38620function processSlotOutlet (el) {
38621  if (el.tag === 'slot') {
38622    el.slotName = getBindingAttr(el, 'name');
38623    if ( true && el.key) {
38624      warn$2(
38625        "`key` does not work on <slot> because slots are abstract outlets " +
38626        "and can possibly expand into multiple elements. " +
38627        "Use the key on a wrapping element instead.",
38628        getRawBindingAttr(el, 'key')
38629      );
38630    }
38631  }
38632}
38633
38634function processComponent (el) {
38635  var binding;
38636  if ((binding = getBindingAttr(el, 'is'))) {
38637    el.component = binding;
38638  }
38639  if (getAndRemoveAttr(el, 'inline-template') != null) {
38640    el.inlineTemplate = true;
38641  }
38642}
38643
38644function processAttrs (el) {
38645  var list = el.attrsList;
38646  var i, l, name, rawName, value, modifiers, syncGen, isDynamic;
38647  for (i = 0, l = list.length; i < l; i++) {
38648    name = rawName = list[i].name;
38649    value = list[i].value;
38650    if (dirRE.test(name)) {
38651      // mark element as dynamic
38652      el.hasBindings = true;
38653      // modifiers
38654      modifiers = parseModifiers(name.replace(dirRE, ''));
38655      // support .foo shorthand syntax for the .prop modifier
38656      if (modifiers) {
38657        name = name.replace(modifierRE, '');
38658      }
38659      if (bindRE.test(name)) { // v-bind
38660        name = name.replace(bindRE, '');
38661        value = parseFilters(value);
38662        isDynamic = dynamicArgRE.test(name);
38663        if (isDynamic) {
38664          name = name.slice(1, -1);
38665        }
38666        if (
38667           true &&
38668          value.trim().length === 0
38669        ) {
38670          warn$2(
38671            ("The value for a v-bind expression cannot be empty. Found in \"v-bind:" + name + "\"")
38672          );
38673        }
38674        if (modifiers) {
38675          if (modifiers.prop && !isDynamic) {
38676            name = camelize(name);
38677            if (name === 'innerHtml') { name = 'innerHTML'; }
38678          }
38679          if (modifiers.camel && !isDynamic) {
38680            name = camelize(name);
38681          }
38682          if (modifiers.sync) {
38683            syncGen = genAssignmentCode(value, "$event");
38684            if (!isDynamic) {
38685              addHandler(
38686                el,
38687                ("update:" + (camelize(name))),
38688                syncGen,
38689                null,
38690                false,
38691                warn$2,
38692                list[i]
38693              );
38694              if (hyphenate(name) !== camelize(name)) {
38695                addHandler(
38696                  el,
38697                  ("update:" + (hyphenate(name))),
38698                  syncGen,
38699                  null,
38700                  false,
38701                  warn$2,
38702                  list[i]
38703                );
38704              }
38705            } else {
38706              // handler w/ dynamic event name
38707              addHandler(
38708                el,
38709                ("\"update:\"+(" + name + ")"),
38710                syncGen,
38711                null,
38712                false,
38713                warn$2,
38714                list[i],
38715                true // dynamic
38716              );
38717            }
38718          }
38719        }
38720        if ((modifiers && modifiers.prop) || (
38721          !el.component && platformMustUseProp(el.tag, el.attrsMap.type, name)
38722        )) {
38723          addProp(el, name, value, list[i], isDynamic);
38724        } else {
38725          addAttr(el, name, value, list[i], isDynamic);
38726        }
38727      } else if (onRE.test(name)) { // v-on
38728        name = name.replace(onRE, '');
38729        isDynamic = dynamicArgRE.test(name);
38730        if (isDynamic) {
38731          name = name.slice(1, -1);
38732        }
38733        addHandler(el, name, value, modifiers, false, warn$2, list[i], isDynamic);
38734      } else { // normal directives
38735        name = name.replace(dirRE, '');
38736        // parse arg
38737        var argMatch = name.match(argRE);
38738        var arg = argMatch && argMatch[1];
38739        isDynamic = false;
38740        if (arg) {
38741          name = name.slice(0, -(arg.length + 1));
38742          if (dynamicArgRE.test(arg)) {
38743            arg = arg.slice(1, -1);
38744            isDynamic = true;
38745          }
38746        }
38747        addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]);
38748        if ( true && name === 'model') {
38749          checkForAliasModel(el, value);
38750        }
38751      }
38752    } else {
38753      // literal attribute
38754      if (true) {
38755        var res = parseText(value, delimiters);
38756        if (res) {
38757          warn$2(
38758            name + "=\"" + value + "\": " +
38759            'Interpolation inside attributes has been removed. ' +
38760            'Use v-bind or the colon shorthand instead. For example, ' +
38761            'instead of <div id="{{ val }}">, use <div :id="val">.',
38762            list[i]
38763          );
38764        }
38765      }
38766      addAttr(el, name, JSON.stringify(value), list[i]);
38767      // #6887 firefox doesn't update muted state if set via attribute
38768      // even immediately after element creation
38769      if (!el.component &&
38770          name === 'muted' &&
38771          platformMustUseProp(el.tag, el.attrsMap.type, name)) {
38772        addProp(el, name, 'true', list[i]);
38773      }
38774    }
38775  }
38776}
38777
38778function checkInFor (el) {
38779  var parent = el;
38780  while (parent) {
38781    if (parent.for !== undefined) {
38782      return true
38783    }
38784    parent = parent.parent;
38785  }
38786  return false
38787}
38788
38789function parseModifiers (name) {
38790  var match = name.match(modifierRE);
38791  if (match) {
38792    var ret = {};
38793    match.forEach(function (m) { ret[m.slice(1)] = true; });
38794    return ret
38795  }
38796}
38797
38798function makeAttrsMap (attrs) {
38799  var map = {};
38800  for (var i = 0, l = attrs.length; i < l; i++) {
38801    if (
38802       true &&
38803      map[attrs[i].name] && !isIE && !isEdge
38804    ) {
38805      warn$2('duplicate attribute: ' + attrs[i].name, attrs[i]);
38806    }
38807    map[attrs[i].name] = attrs[i].value;
38808  }
38809  return map
38810}
38811
38812// for script (e.g. type="x/template") or style, do not decode content
38813function isTextTag (el) {
38814  return el.tag === 'script' || el.tag === 'style'
38815}
38816
38817function isForbiddenTag (el) {
38818  return (
38819    el.tag === 'style' ||
38820    (el.tag === 'script' && (
38821      !el.attrsMap.type ||
38822      el.attrsMap.type === 'text/javascript'
38823    ))
38824  )
38825}
38826
38827var ieNSBug = /^xmlns:NS\d+/;
38828var ieNSPrefix = /^NS\d+:/;
38829
38830/* istanbul ignore next */
38831function guardIESVGBug (attrs) {
38832  var res = [];
38833  for (var i = 0; i < attrs.length; i++) {
38834    var attr = attrs[i];
38835    if (!ieNSBug.test(attr.name)) {
38836      attr.name = attr.name.replace(ieNSPrefix, '');
38837      res.push(attr);
38838    }
38839  }
38840  return res
38841}
38842
38843function checkForAliasModel (el, value) {
38844  var _el = el;
38845  while (_el) {
38846    if (_el.for && _el.alias === value) {
38847      warn$2(
38848        "<" + (el.tag) + " v-model=\"" + value + "\">: " +
38849        "You are binding v-model directly to a v-for iteration alias. " +
38850        "This will not be able to modify the v-for source array because " +
38851        "writing to the alias is like modifying a function local variable. " +
38852        "Consider using an array of objects and use v-model on an object property instead.",
38853        el.rawAttrsMap['v-model']
38854      );
38855    }
38856    _el = _el.parent;
38857  }
38858}
38859
38860/*  */
38861
38862function preTransformNode (el, options) {
38863  if (el.tag === 'input') {
38864    var map = el.attrsMap;
38865    if (!map['v-model']) {
38866      return
38867    }
38868
38869    var typeBinding;
38870    if (map[':type'] || map['v-bind:type']) {
38871      typeBinding = getBindingAttr(el, 'type');
38872    }
38873    if (!map.type && !typeBinding && map['v-bind']) {
38874      typeBinding = "(" + (map['v-bind']) + ").type";
38875    }
38876
38877    if (typeBinding) {
38878      var ifCondition = getAndRemoveAttr(el, 'v-if', true);
38879      var ifConditionExtra = ifCondition ? ("&&(" + ifCondition + ")") : "";
38880      var hasElse = getAndRemoveAttr(el, 'v-else', true) != null;
38881      var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);
38882      // 1. checkbox
38883      var branch0 = cloneASTElement(el);
38884      // process for on the main node
38885      processFor(branch0);
38886      addRawAttr(branch0, 'type', 'checkbox');
38887      processElement(branch0, options);
38888      branch0.processed = true; // prevent it from double-processed
38889      branch0.if = "(" + typeBinding + ")==='checkbox'" + ifConditionExtra;
38890      addIfCondition(branch0, {
38891        exp: branch0.if,
38892        block: branch0
38893      });
38894      // 2. add radio else-if condition
38895      var branch1 = cloneASTElement(el);
38896      getAndRemoveAttr(branch1, 'v-for', true);
38897      addRawAttr(branch1, 'type', 'radio');
38898      processElement(branch1, options);
38899      addIfCondition(branch0, {
38900        exp: "(" + typeBinding + ")==='radio'" + ifConditionExtra,
38901        block: branch1
38902      });
38903      // 3. other
38904      var branch2 = cloneASTElement(el);
38905      getAndRemoveAttr(branch2, 'v-for', true);
38906      addRawAttr(branch2, ':type', typeBinding);
38907      processElement(branch2, options);
38908      addIfCondition(branch0, {
38909        exp: ifCondition,
38910        block: branch2
38911      });
38912
38913      if (hasElse) {
38914        branch0.else = true;
38915      } else if (elseIfCondition) {
38916        branch0.elseif = elseIfCondition;
38917      }
38918
38919      return branch0
38920    }
38921  }
38922}
38923
38924function cloneASTElement (el) {
38925  return createASTElement(el.tag, el.attrsList.slice(), el.parent)
38926}
38927
38928var model$1 = {
38929  preTransformNode: preTransformNode
38930};
38931
38932var modules$1 = [
38933  klass$1,
38934  style$1,
38935  model$1
38936];
38937
38938/*  */
38939
38940function text (el, dir) {
38941  if (dir.value) {
38942    addProp(el, 'textContent', ("_s(" + (dir.value) + ")"), dir);
38943  }
38944}
38945
38946/*  */
38947
38948function html (el, dir) {
38949  if (dir.value) {
38950    addProp(el, 'innerHTML', ("_s(" + (dir.value) + ")"), dir);
38951  }
38952}
38953
38954var directives$1 = {
38955  model: model,
38956  text: text,
38957  html: html
38958};
38959
38960/*  */
38961
38962var baseOptions = {
38963  expectHTML: true,
38964  modules: modules$1,
38965  directives: directives$1,
38966  isPreTag: isPreTag,
38967  isUnaryTag: isUnaryTag,
38968  mustUseProp: mustUseProp,
38969  canBeLeftOpenTag: canBeLeftOpenTag,
38970  isReservedTag: isReservedTag,
38971  getTagNamespace: getTagNamespace,
38972  staticKeys: genStaticKeys(modules$1)
38973};
38974
38975/*  */
38976
38977var isStaticKey;
38978var isPlatformReservedTag;
38979
38980var genStaticKeysCached = cached(genStaticKeys$1);
38981
38982/**
38983 * Goal of the optimizer: walk the generated template AST tree
38984 * and detect sub-trees that are purely static, i.e. parts of
38985 * the DOM that never needs to change.
38986 *
38987 * Once we detect these sub-trees, we can:
38988 *
38989 * 1. Hoist them into constants, so that we no longer need to
38990 *    create fresh nodes for them on each re-render;
38991 * 2. Completely skip them in the patching process.
38992 */
38993function optimize (root, options) {
38994  if (!root) { return }
38995  isStaticKey = genStaticKeysCached(options.staticKeys || '');
38996  isPlatformReservedTag = options.isReservedTag || no;
38997  // first pass: mark all non-static nodes.
38998  markStatic$1(root);
38999  // second pass: mark static roots.
39000  markStaticRoots(root, false);
39001}
39002
39003function genStaticKeys$1 (keys) {
39004  return makeMap(
39005    'type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +
39006    (keys ? ',' + keys : '')
39007  )
39008}
39009
39010function markStatic$1 (node) {
39011  node.static = isStatic(node);
39012  if (node.type === 1) {
39013    // do not make component slot content static. this avoids
39014    // 1. components not able to mutate slot nodes
39015    // 2. static slot content fails for hot-reloading
39016    if (
39017      !isPlatformReservedTag(node.tag) &&
39018      node.tag !== 'slot' &&
39019      node.attrsMap['inline-template'] == null
39020    ) {
39021      return
39022    }
39023    for (var i = 0, l = node.children.length; i < l; i++) {
39024      var child = node.children[i];
39025      markStatic$1(child);
39026      if (!child.static) {
39027        node.static = false;
39028      }
39029    }
39030    if (node.ifConditions) {
39031      for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 < l$1; i$1++) {
39032        var block = node.ifConditions[i$1].block;
39033        markStatic$1(block);
39034        if (!block.static) {
39035          node.static = false;
39036        }
39037      }
39038    }
39039  }
39040}
39041
39042function markStaticRoots (node, isInFor) {
39043  if (node.type === 1) {
39044    if (node.static || node.once) {
39045      node.staticInFor = isInFor;
39046    }
39047    // For a node to qualify as a static root, it should have children that
39048    // are not just static text. Otherwise the cost of hoisting out will
39049    // outweigh the benefits and it's better off to just always render it fresh.
39050    if (node.static && node.children.length && !(
39051      node.children.length === 1 &&
39052      node.children[0].type === 3
39053    )) {
39054      node.staticRoot = true;
39055      return
39056    } else {
39057      node.staticRoot = false;
39058    }
39059    if (node.children) {
39060      for (var i = 0, l = node.children.length; i < l; i++) {
39061        markStaticRoots(node.children[i], isInFor || !!node.for);
39062      }
39063    }
39064    if (node.ifConditions) {
39065      for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 < l$1; i$1++) {
39066        markStaticRoots(node.ifConditions[i$1].block, isInFor);
39067      }
39068    }
39069  }
39070}
39071
39072function isStatic (node) {
39073  if (node.type === 2) { // expression
39074    return false
39075  }
39076  if (node.type === 3) { // text
39077    return true
39078  }
39079  return !!(node.pre || (
39080    !node.hasBindings && // no dynamic bindings
39081    !node.if && !node.for && // not v-if or v-for or v-else
39082    !isBuiltInTag(node.tag) && // not a built-in
39083    isPlatformReservedTag(node.tag) && // not a component
39084    !isDirectChildOfTemplateFor(node) &&
39085    Object.keys(node).every(isStaticKey)
39086  ))
39087}
39088
39089function isDirectChildOfTemplateFor (node) {
39090  while (node.parent) {
39091    node = node.parent;
39092    if (node.tag !== 'template') {
39093      return false
39094    }
39095    if (node.for) {
39096      return true
39097    }
39098  }
39099  return false
39100}
39101
39102/*  */
39103
39104var fnExpRE = /^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/;
39105var fnInvokeRE = /\([^)]*?\);*$/;
39106var simplePathRE = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/;
39107
39108// KeyboardEvent.keyCode aliases
39109var keyCodes = {
39110  esc: 27,
39111  tab: 9,
39112  enter: 13,
39113  space: 32,
39114  up: 38,
39115  left: 37,
39116  right: 39,
39117  down: 40,
39118  'delete': [8, 46]
39119};
39120
39121// KeyboardEvent.key aliases
39122var keyNames = {
39123  // #7880: IE11 and Edge use `Esc` for Escape key name.
39124  esc: ['Esc', 'Escape'],
39125  tab: 'Tab',
39126  enter: 'Enter',
39127  // #9112: IE11 uses `Spacebar` for Space key name.
39128  space: [' ', 'Spacebar'],
39129  // #7806: IE11 uses key names without `Arrow` prefix for arrow keys.
39130  up: ['Up', 'ArrowUp'],
39131  left: ['Left', 'ArrowLeft'],
39132  right: ['Right', 'ArrowRight'],
39133  down: ['Down', 'ArrowDown'],
39134  // #9112: IE11 uses `Del` for Delete key name.
39135  'delete': ['Backspace', 'Delete', 'Del']
39136};
39137
39138// #4868: modifiers that prevent the execution of the listener
39139// need to explicitly return null so that we can determine whether to remove
39140// the listener for .once
39141var genGuard = function (condition) { return ("if(" + condition + ")return null;"); };
39142
39143var modifierCode = {
39144  stop: '$event.stopPropagation();',
39145  prevent: '$event.preventDefault();',
39146  self: genGuard("$event.target !== $event.currentTarget"),
39147  ctrl: genGuard("!$event.ctrlKey"),
39148  shift: genGuard("!$event.shiftKey"),
39149  alt: genGuard("!$event.altKey"),
39150  meta: genGuard("!$event.metaKey"),
39151  left: genGuard("'button' in $event && $event.button !== 0"),
39152  middle: genGuard("'button' in $event && $event.button !== 1"),
39153  right: genGuard("'button' in $event && $event.button !== 2")
39154};
39155
39156function genHandlers (
39157  events,
39158  isNative
39159) {
39160  var prefix = isNative ? 'nativeOn:' : 'on:';
39161  var staticHandlers = "";
39162  var dynamicHandlers = "";
39163  for (var name in events) {
39164    var handlerCode = genHandler(events[name]);
39165    if (events[name] && events[name].dynamic) {
39166      dynamicHandlers += name + "," + handlerCode + ",";
39167    } else {
39168      staticHandlers += "\"" + name + "\":" + handlerCode + ",";
39169    }
39170  }
39171  staticHandlers = "{" + (staticHandlers.slice(0, -1)) + "}";
39172  if (dynamicHandlers) {
39173    return prefix + "_d(" + staticHandlers + ",[" + (dynamicHandlers.slice(0, -1)) + "])"
39174  } else {
39175    return prefix + staticHandlers
39176  }
39177}
39178
39179function genHandler (handler) {
39180  if (!handler) {
39181    return 'function(){}'
39182  }
39183
39184  if (Array.isArray(handler)) {
39185    return ("[" + (handler.map(function (handler) { return genHandler(handler); }).join(',')) + "]")
39186  }
39187
39188  var isMethodPath = simplePathRE.test(handler.value);
39189  var isFunctionExpression = fnExpRE.test(handler.value);
39190  var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));
39191
39192  if (!handler.modifiers) {
39193    if (isMethodPath || isFunctionExpression) {
39194      return handler.value
39195    }
39196    return ("function($event){" + (isFunctionInvocation ? ("return " + (handler.value)) : handler.value) + "}") // inline statement
39197  } else {
39198    var code = '';
39199    var genModifierCode = '';
39200    var keys = [];
39201    for (var key in handler.modifiers) {
39202      if (modifierCode[key]) {
39203        genModifierCode += modifierCode[key];
39204        // left/right
39205        if (keyCodes[key]) {
39206          keys.push(key);
39207        }
39208      } else if (key === 'exact') {
39209        var modifiers = (handler.modifiers);
39210        genModifierCode += genGuard(
39211          ['ctrl', 'shift', 'alt', 'meta']
39212            .filter(function (keyModifier) { return !modifiers[keyModifier]; })
39213            .map(function (keyModifier) { return ("$event." + keyModifier + "Key"); })
39214            .join('||')
39215        );
39216      } else {
39217        keys.push(key);
39218      }
39219    }
39220    if (keys.length) {
39221      code += genKeyFilter(keys);
39222    }
39223    // Make sure modifiers like prevent and stop get executed after key filtering
39224    if (genModifierCode) {
39225      code += genModifierCode;
39226    }
39227    var handlerCode = isMethodPath
39228      ? ("return " + (handler.value) + ".apply(null, arguments)")
39229      : isFunctionExpression
39230        ? ("return (" + (handler.value) + ").apply(null, arguments)")
39231        : isFunctionInvocation
39232          ? ("return " + (handler.value))
39233          : handler.value;
39234    return ("function($event){" + code + handlerCode + "}")
39235  }
39236}
39237
39238function genKeyFilter (keys) {
39239  return (
39240    // make sure the key filters only apply to KeyboardEvents
39241    // #9441: can't use 'keyCode' in $event because Chrome autofill fires fake
39242    // key events that do not have keyCode property...
39243    "if(!$event.type.indexOf('key')&&" +
39244    (keys.map(genFilterCode).join('&&')) + ")return null;"
39245  )
39246}
39247
39248function genFilterCode (key) {
39249  var keyVal = parseInt(key, 10);
39250  if (keyVal) {
39251    return ("$event.keyCode!==" + keyVal)
39252  }
39253  var keyCode = keyCodes[key];
39254  var keyName = keyNames[key];
39255  return (
39256    "_k($event.keyCode," +
39257    (JSON.stringify(key)) + "," +
39258    (JSON.stringify(keyCode)) + "," +
39259    "$event.key," +
39260    "" + (JSON.stringify(keyName)) +
39261    ")"
39262  )
39263}
39264
39265/*  */
39266
39267function on (el, dir) {
39268  if ( true && dir.modifiers) {
39269    warn("v-on without argument does not support modifiers.");
39270  }
39271  el.wrapListeners = function (code) { return ("_g(" + code + "," + (dir.value) + ")"); };
39272}
39273
39274/*  */
39275
39276function bind$1 (el, dir) {
39277  el.wrapData = function (code) {
39278    return ("_b(" + code + ",'" + (el.tag) + "'," + (dir.value) + "," + (dir.modifiers && dir.modifiers.prop ? 'true' : 'false') + (dir.modifiers && dir.modifiers.sync ? ',true' : '') + ")")
39279  };
39280}
39281
39282/*  */
39283
39284var baseDirectives = {
39285  on: on,
39286  bind: bind$1,
39287  cloak: noop
39288};
39289
39290/*  */
39291
39292
39293
39294
39295
39296var CodegenState = function CodegenState (options) {
39297  this.options = options;
39298  this.warn = options.warn || baseWarn;
39299  this.transforms = pluckModuleFunction(options.modules, 'transformCode');
39300  this.dataGenFns = pluckModuleFunction(options.modules, 'genData');
39301  this.directives = extend(extend({}, baseDirectives), options.directives);
39302  var isReservedTag = options.isReservedTag || no;
39303  this.maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };
39304  this.onceId = 0;
39305  this.staticRenderFns = [];
39306  this.pre = false;
39307};
39308
39309
39310
39311function generate (
39312  ast,
39313  options
39314) {
39315  var state = new CodegenState(options);
39316  // fix #11483, Root level <script> tags should not be rendered.
39317  var code = ast ? (ast.tag === 'script' ? 'null' : genElement(ast, state)) : '_c("div")';
39318  return {
39319    render: ("with(this){return " + code + "}"),
39320    staticRenderFns: state.staticRenderFns
39321  }
39322}
39323
39324function genElement (el, state) {
39325  if (el.parent) {
39326    el.pre = el.pre || el.parent.pre;
39327  }
39328
39329  if (el.staticRoot && !el.staticProcessed) {
39330    return genStatic(el, state)
39331  } else if (el.once && !el.onceProcessed) {
39332    return genOnce(el, state)
39333  } else if (el.for && !el.forProcessed) {
39334    return genFor(el, state)
39335  } else if (el.if && !el.ifProcessed) {
39336    return genIf(el, state)
39337  } else if (el.tag === 'template' && !el.slotTarget && !state.pre) {
39338    return genChildren(el, state) || 'void 0'
39339  } else if (el.tag === 'slot') {
39340    return genSlot(el, state)
39341  } else {
39342    // component or element
39343    var code;
39344    if (el.component) {
39345      code = genComponent(el.component, el, state);
39346    } else {
39347      var data;
39348      if (!el.plain || (el.pre && state.maybeComponent(el))) {
39349        data = genData$2(el, state);
39350      }
39351
39352      var children = el.inlineTemplate ? null : genChildren(el, state, true);
39353      code = "_c('" + (el.tag) + "'" + (data ? ("," + data) : '') + (children ? ("," + children) : '') + ")";
39354    }
39355    // module transforms
39356    for (var i = 0; i < state.transforms.length; i++) {
39357      code = state.transforms[i](el, code);
39358    }
39359    return code
39360  }
39361}
39362
39363// hoist static sub-trees out
39364function genStatic (el, state) {
39365  el.staticProcessed = true;
39366  // Some elements (templates) need to behave differently inside of a v-pre
39367  // node.  All pre nodes are static roots, so we can use this as a location to
39368  // wrap a state change and reset it upon exiting the pre node.
39369  var originalPreState = state.pre;
39370  if (el.pre) {
39371    state.pre = el.pre;
39372  }
39373  state.staticRenderFns.push(("with(this){return " + (genElement(el, state)) + "}"));
39374  state.pre = originalPreState;
39375  return ("_m(" + (state.staticRenderFns.length - 1) + (el.staticInFor ? ',true' : '') + ")")
39376}
39377
39378// v-once
39379function genOnce (el, state) {
39380  el.onceProcessed = true;
39381  if (el.if && !el.ifProcessed) {
39382    return genIf(el, state)
39383  } else if (el.staticInFor) {
39384    var key = '';
39385    var parent = el.parent;
39386    while (parent) {
39387      if (parent.for) {
39388        key = parent.key;
39389        break
39390      }
39391      parent = parent.parent;
39392    }
39393    if (!key) {
39394       true && state.warn(
39395        "v-once can only be used inside v-for that is keyed. ",
39396        el.rawAttrsMap['v-once']
39397      );
39398      return genElement(el, state)
39399    }
39400    return ("_o(" + (genElement(el, state)) + "," + (state.onceId++) + "," + key + ")")
39401  } else {
39402    return genStatic(el, state)
39403  }
39404}
39405
39406function genIf (
39407  el,
39408  state,
39409  altGen,
39410  altEmpty
39411) {
39412  el.ifProcessed = true; // avoid recursion
39413  return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty)
39414}
39415
39416function genIfConditions (
39417  conditions,
39418  state,
39419  altGen,
39420  altEmpty
39421) {
39422  if (!conditions.length) {
39423    return altEmpty || '_e()'
39424  }
39425
39426  var condition = conditions.shift();
39427  if (condition.exp) {
39428    return ("(" + (condition.exp) + ")?" + (genTernaryExp(condition.block)) + ":" + (genIfConditions(conditions, state, altGen, altEmpty)))
39429  } else {
39430    return ("" + (genTernaryExp(condition.block)))
39431  }
39432
39433  // v-if with v-once should generate code like (a)?_m(0):_m(1)
39434  function genTernaryExp (el) {
39435    return altGen
39436      ? altGen(el, state)
39437      : el.once
39438        ? genOnce(el, state)
39439        : genElement(el, state)
39440  }
39441}
39442
39443function genFor (
39444  el,
39445  state,
39446  altGen,
39447  altHelper
39448) {
39449  var exp = el.for;
39450  var alias = el.alias;
39451  var iterator1 = el.iterator1 ? ("," + (el.iterator1)) : '';
39452  var iterator2 = el.iterator2 ? ("," + (el.iterator2)) : '';
39453
39454  if ( true &&
39455    state.maybeComponent(el) &&
39456    el.tag !== 'slot' &&
39457    el.tag !== 'template' &&
39458    !el.key
39459  ) {
39460    state.warn(
39461      "<" + (el.tag) + " v-for=\"" + alias + " in " + exp + "\">: component lists rendered with " +
39462      "v-for should have explicit keys. " +
39463      "See https://vuejs.org/guide/list.html#key for more info.",
39464      el.rawAttrsMap['v-for'],
39465      true /* tip */
39466    );
39467  }
39468
39469  el.forProcessed = true; // avoid recursion
39470  return (altHelper || '_l') + "((" + exp + ")," +
39471    "function(" + alias + iterator1 + iterator2 + "){" +
39472      "return " + ((altGen || genElement)(el, state)) +
39473    '})'
39474}
39475
39476function genData$2 (el, state) {
39477  var data = '{';
39478
39479  // directives first.
39480  // directives may mutate the el's other properties before they are generated.
39481  var dirs = genDirectives(el, state);
39482  if (dirs) { data += dirs + ','; }
39483
39484  // key
39485  if (el.key) {
39486    data += "key:" + (el.key) + ",";
39487  }
39488  // ref
39489  if (el.ref) {
39490    data += "ref:" + (el.ref) + ",";
39491  }
39492  if (el.refInFor) {
39493    data += "refInFor:true,";
39494  }
39495  // pre
39496  if (el.pre) {
39497    data += "pre:true,";
39498  }
39499  // record original tag name for components using "is" attribute
39500  if (el.component) {
39501    data += "tag:\"" + (el.tag) + "\",";
39502  }
39503  // module data generation functions
39504  for (var i = 0; i < state.dataGenFns.length; i++) {
39505    data += state.dataGenFns[i](el);
39506  }
39507  // attributes
39508  if (el.attrs) {
39509    data += "attrs:" + (genProps(el.attrs)) + ",";
39510  }
39511  // DOM props
39512  if (el.props) {
39513    data += "domProps:" + (genProps(el.props)) + ",";
39514  }
39515  // event handlers
39516  if (el.events) {
39517    data += (genHandlers(el.events, false)) + ",";
39518  }
39519  if (el.nativeEvents) {
39520    data += (genHandlers(el.nativeEvents, true)) + ",";
39521  }
39522  // slot target
39523  // only for non-scoped slots
39524  if (el.slotTarget && !el.slotScope) {
39525    data += "slot:" + (el.slotTarget) + ",";
39526  }
39527  // scoped slots
39528  if (el.scopedSlots) {
39529    data += (genScopedSlots(el, el.scopedSlots, state)) + ",";
39530  }
39531  // component v-model
39532  if (el.model) {
39533    data += "model:{value:" + (el.model.value) + ",callback:" + (el.model.callback) + ",expression:" + (el.model.expression) + "},";
39534  }
39535  // inline-template
39536  if (el.inlineTemplate) {
39537    var inlineTemplate = genInlineTemplate(el, state);
39538    if (inlineTemplate) {
39539      data += inlineTemplate + ",";
39540    }
39541  }
39542  data = data.replace(/,$/, '') + '}';
39543  // v-bind dynamic argument wrap
39544  // v-bind with dynamic arguments must be applied using the same v-bind object
39545  // merge helper so that class/style/mustUseProp attrs are handled correctly.
39546  if (el.dynamicAttrs) {
39547    data = "_b(" + data + ",\"" + (el.tag) + "\"," + (genProps(el.dynamicAttrs)) + ")";
39548  }
39549  // v-bind data wrap
39550  if (el.wrapData) {
39551    data = el.wrapData(data);
39552  }
39553  // v-on data wrap
39554  if (el.wrapListeners) {
39555    data = el.wrapListeners(data);
39556  }
39557  return data
39558}
39559
39560function genDirectives (el, state) {
39561  var dirs = el.directives;
39562  if (!dirs) { return }
39563  var res = 'directives:[';
39564  var hasRuntime = false;
39565  var i, l, dir, needRuntime;
39566  for (i = 0, l = dirs.length; i < l; i++) {
39567    dir = dirs[i];
39568    needRuntime = true;
39569    var gen = state.directives[dir.name];
39570    if (gen) {
39571      // compile-time directive that manipulates AST.
39572      // returns true if it also needs a runtime counterpart.
39573      needRuntime = !!gen(el, dir, state.warn);
39574    }
39575    if (needRuntime) {
39576      hasRuntime = true;
39577      res += "{name:\"" + (dir.name) + "\",rawName:\"" + (dir.rawName) + "\"" + (dir.value ? (",value:(" + (dir.value) + "),expression:" + (JSON.stringify(dir.value))) : '') + (dir.arg ? (",arg:" + (dir.isDynamicArg ? dir.arg : ("\"" + (dir.arg) + "\""))) : '') + (dir.modifiers ? (",modifiers:" + (JSON.stringify(dir.modifiers))) : '') + "},";
39578    }
39579  }
39580  if (hasRuntime) {
39581    return res.slice(0, -1) + ']'
39582  }
39583}
39584
39585function genInlineTemplate (el, state) {
39586  var ast = el.children[0];
39587  if ( true && (
39588    el.children.length !== 1 || ast.type !== 1
39589  )) {
39590    state.warn(
39591      'Inline-template components must have exactly one child element.',
39592      { start: el.start }
39593    );
39594  }
39595  if (ast && ast.type === 1) {
39596    var inlineRenderFns = generate(ast, state.options);
39597    return ("inlineTemplate:{render:function(){" + (inlineRenderFns.render) + "},staticRenderFns:[" + (inlineRenderFns.staticRenderFns.map(function (code) { return ("function(){" + code + "}"); }).join(',')) + "]}")
39598  }
39599}
39600
39601function genScopedSlots (
39602  el,
39603  slots,
39604  state
39605) {
39606  // by default scoped slots are considered "stable", this allows child
39607  // components with only scoped slots to skip forced updates from parent.
39608  // but in some cases we have to bail-out of this optimization
39609  // for example if the slot contains dynamic names, has v-if or v-for on them...
39610  var needsForceUpdate = el.for || Object.keys(slots).some(function (key) {
39611    var slot = slots[key];
39612    return (
39613      slot.slotTargetDynamic ||
39614      slot.if ||
39615      slot.for ||
39616      containsSlotChild(slot) // is passing down slot from parent which may be dynamic
39617    )
39618  });
39619
39620  // #9534: if a component with scoped slots is inside a conditional branch,
39621  // it's possible for the same component to be reused but with different
39622  // compiled slot content. To avoid that, we generate a unique key based on
39623  // the generated code of all the slot contents.
39624  var needsKey = !!el.if;
39625
39626  // OR when it is inside another scoped slot or v-for (the reactivity may be
39627  // disconnected due to the intermediate scope variable)
39628  // #9438, #9506
39629  // TODO: this can be further optimized by properly analyzing in-scope bindings
39630  // and skip force updating ones that do not actually use scope variables.
39631  if (!needsForceUpdate) {
39632    var parent = el.parent;
39633    while (parent) {
39634      if (
39635        (parent.slotScope && parent.slotScope !== emptySlotScopeToken) ||
39636        parent.for
39637      ) {
39638        needsForceUpdate = true;
39639        break
39640      }
39641      if (parent.if) {
39642        needsKey = true;
39643      }
39644      parent = parent.parent;
39645    }
39646  }
39647
39648  var generatedSlots = Object.keys(slots)
39649    .map(function (key) { return genScopedSlot(slots[key], state); })
39650    .join(',');
39651
39652  return ("scopedSlots:_u([" + generatedSlots + "]" + (needsForceUpdate ? ",null,true" : "") + (!needsForceUpdate && needsKey ? (",null,false," + (hash(generatedSlots))) : "") + ")")
39653}
39654
39655function hash(str) {
39656  var hash = 5381;
39657  var i = str.length;
39658  while(i) {
39659    hash = (hash * 33) ^ str.charCodeAt(--i);
39660  }
39661  return hash >>> 0
39662}
39663
39664function containsSlotChild (el) {
39665  if (el.type === 1) {
39666    if (el.tag === 'slot') {
39667      return true
39668    }
39669    return el.children.some(containsSlotChild)
39670  }
39671  return false
39672}
39673
39674function genScopedSlot (
39675  el,
39676  state
39677) {
39678  var isLegacySyntax = el.attrsMap['slot-scope'];
39679  if (el.if && !el.ifProcessed && !isLegacySyntax) {
39680    return genIf(el, state, genScopedSlot, "null")
39681  }
39682  if (el.for && !el.forProcessed) {
39683    return genFor(el, state, genScopedSlot)
39684  }
39685  var slotScope = el.slotScope === emptySlotScopeToken
39686    ? ""
39687    : String(el.slotScope);
39688  var fn = "function(" + slotScope + "){" +
39689    "return " + (el.tag === 'template'
39690      ? el.if && isLegacySyntax
39691        ? ("(" + (el.if) + ")?" + (genChildren(el, state) || 'undefined') + ":undefined")
39692        : genChildren(el, state) || 'undefined'
39693      : genElement(el, state)) + "}";
39694  // reverse proxy v-slot without scope on this.$slots
39695  var reverseProxy = slotScope ? "" : ",proxy:true";
39696  return ("{key:" + (el.slotTarget || "\"default\"") + ",fn:" + fn + reverseProxy + "}")
39697}
39698
39699function genChildren (
39700  el,
39701  state,
39702  checkSkip,
39703  altGenElement,
39704  altGenNode
39705) {
39706  var children = el.children;
39707  if (children.length) {
39708    var el$1 = children[0];
39709    // optimize single v-for
39710    if (children.length === 1 &&
39711      el$1.for &&
39712      el$1.tag !== 'template' &&
39713      el$1.tag !== 'slot'
39714    ) {
39715      var normalizationType = checkSkip
39716        ? state.maybeComponent(el$1) ? ",1" : ",0"
39717        : "";
39718      return ("" + ((altGenElement || genElement)(el$1, state)) + normalizationType)
39719    }
39720    var normalizationType$1 = checkSkip
39721      ? getNormalizationType(children, state.maybeComponent)
39722      : 0;
39723    var gen = altGenNode || genNode;
39724    return ("[" + (children.map(function (c) { return gen(c, state); }).join(',')) + "]" + (normalizationType$1 ? ("," + normalizationType$1) : ''))
39725  }
39726}
39727
39728// determine the normalization needed for the children array.
39729// 0: no normalization needed
39730// 1: simple normalization needed (possible 1-level deep nested array)
39731// 2: full normalization needed
39732function getNormalizationType (
39733  children,
39734  maybeComponent
39735) {
39736  var res = 0;
39737  for (var i = 0; i < children.length; i++) {
39738    var el = children[i];
39739    if (el.type !== 1) {
39740      continue
39741    }
39742    if (needsNormalization(el) ||
39743        (el.ifConditions && el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {
39744      res = 2;
39745      break
39746    }
39747    if (maybeComponent(el) ||
39748        (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {
39749      res = 1;
39750    }
39751  }
39752  return res
39753}
39754
39755function needsNormalization (el) {
39756  return el.for !== undefined || el.tag === 'template' || el.tag === 'slot'
39757}
39758
39759function genNode (node, state) {
39760  if (node.type === 1) {
39761    return genElement(node, state)
39762  } else if (node.type === 3 && node.isComment) {
39763    return genComment(node)
39764  } else {
39765    return genText(node)
39766  }
39767}
39768
39769function genText (text) {
39770  return ("_v(" + (text.type === 2
39771    ? text.expression // no need for () because already wrapped in _s()
39772    : transformSpecialNewlines(JSON.stringify(text.text))) + ")")
39773}
39774
39775function genComment (comment) {
39776  return ("_e(" + (JSON.stringify(comment.text)) + ")")
39777}
39778
39779function genSlot (el, state) {
39780  var slotName = el.slotName || '"default"';
39781  var children = genChildren(el, state);
39782  var res = "_t(" + slotName + (children ? (",function(){return " + children + "}") : '');
39783  var attrs = el.attrs || el.dynamicAttrs
39784    ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({
39785        // slot props are camelized
39786        name: camelize(attr.name),
39787        value: attr.value,
39788        dynamic: attr.dynamic
39789      }); }))
39790    : null;
39791  var bind$$1 = el.attrsMap['v-bind'];
39792  if ((attrs || bind$$1) && !children) {
39793    res += ",null";
39794  }
39795  if (attrs) {
39796    res += "," + attrs;
39797  }
39798  if (bind$$1) {
39799    res += (attrs ? '' : ',null') + "," + bind$$1;
39800  }
39801  return res + ')'
39802}
39803
39804// componentName is el.component, take it as argument to shun flow's pessimistic refinement
39805function genComponent (
39806  componentName,
39807  el,
39808  state
39809) {
39810  var children = el.inlineTemplate ? null : genChildren(el, state, true);
39811  return ("_c(" + componentName + "," + (genData$2(el, state)) + (children ? ("," + children) : '') + ")")
39812}
39813
39814function genProps (props) {
39815  var staticProps = "";
39816  var dynamicProps = "";
39817  for (var i = 0; i < props.length; i++) {
39818    var prop = props[i];
39819    var value = transformSpecialNewlines(prop.value);
39820    if (prop.dynamic) {
39821      dynamicProps += (prop.name) + "," + value + ",";
39822    } else {
39823      staticProps += "\"" + (prop.name) + "\":" + value + ",";
39824    }
39825  }
39826  staticProps = "{" + (staticProps.slice(0, -1)) + "}";
39827  if (dynamicProps) {
39828    return ("_d(" + staticProps + ",[" + (dynamicProps.slice(0, -1)) + "])")
39829  } else {
39830    return staticProps
39831  }
39832}
39833
39834// #3895, #4268
39835function transformSpecialNewlines (text) {
39836  return text
39837    .replace(/\u2028/g, '\\u2028')
39838    .replace(/\u2029/g, '\\u2029')
39839}
39840
39841/*  */
39842
39843
39844
39845// these keywords should not appear inside expressions, but operators like
39846// typeof, instanceof and in are allowed
39847var prohibitedKeywordRE = new RegExp('\\b' + (
39848  'do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +
39849  'super,throw,while,yield,delete,export,import,return,switch,default,' +
39850  'extends,finally,continue,debugger,function,arguments'
39851).split(',').join('\\b|\\b') + '\\b');
39852
39853// these unary operators should not be used as property/method names
39854var unaryOperatorsRE = new RegExp('\\b' + (
39855  'delete,typeof,void'
39856).split(',').join('\\s*\\([^\\)]*\\)|\\b') + '\\s*\\([^\\)]*\\)');
39857
39858// strip strings in expressions
39859var stripStringRE = /'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g;
39860
39861// detect problematic expressions in a template
39862function detectErrors (ast, warn) {
39863  if (ast) {
39864    checkNode(ast, warn);
39865  }
39866}
39867
39868function checkNode (node, warn) {
39869  if (node.type === 1) {
39870    for (var name in node.attrsMap) {
39871      if (dirRE.test(name)) {
39872        var value = node.attrsMap[name];
39873        if (value) {
39874          var range = node.rawAttrsMap[name];
39875          if (name === 'v-for') {
39876            checkFor(node, ("v-for=\"" + value + "\""), warn, range);
39877          } else if (name === 'v-slot' || name[0] === '#') {
39878            checkFunctionParameterExpression(value, (name + "=\"" + value + "\""), warn, range);
39879          } else if (onRE.test(name)) {
39880            checkEvent(value, (name + "=\"" + value + "\""), warn, range);
39881          } else {
39882            checkExpression(value, (name + "=\"" + value + "\""), warn, range);
39883          }
39884        }
39885      }
39886    }
39887    if (node.children) {
39888      for (var i = 0; i < node.children.length; i++) {
39889        checkNode(node.children[i], warn);
39890      }
39891    }
39892  } else if (node.type === 2) {
39893    checkExpression(node.expression, node.text, warn, node);
39894  }
39895}
39896
39897function checkEvent (exp, text, warn, range) {
39898  var stripped = exp.replace(stripStringRE, '');
39899  var keywordMatch = stripped.match(unaryOperatorsRE);
39900  if (keywordMatch && stripped.charAt(keywordMatch.index - 1) !== '$') {
39901    warn(
39902      "avoid using JavaScript unary operator as property name: " +
39903      "\"" + (keywordMatch[0]) + "\" in expression " + (text.trim()),
39904      range
39905    );
39906  }
39907  checkExpression(exp, text, warn, range);
39908}
39909
39910function checkFor (node, text, warn, range) {
39911  checkExpression(node.for || '', text, warn, range);
39912  checkIdentifier(node.alias, 'v-for alias', text, warn, range);
39913  checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);
39914  checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);
39915}
39916
39917function checkIdentifier (
39918  ident,
39919  type,
39920  text,
39921  warn,
39922  range
39923) {
39924  if (typeof ident === 'string') {
39925    try {
39926      new Function(("var " + ident + "=_"));
39927    } catch (e) {
39928      warn(("invalid " + type + " \"" + ident + "\" in expression: " + (text.trim())), range);
39929    }
39930  }
39931}
39932
39933function checkExpression (exp, text, warn, range) {
39934  try {
39935    new Function(("return " + exp));
39936  } catch (e) {
39937    var keywordMatch = exp.replace(stripStringRE, '').match(prohibitedKeywordRE);
39938    if (keywordMatch) {
39939      warn(
39940        "avoid using JavaScript keyword as property name: " +
39941        "\"" + (keywordMatch[0]) + "\"\n  Raw expression: " + (text.trim()),
39942        range
39943      );
39944    } else {
39945      warn(
39946        "invalid expression: " + (e.message) + " in\n\n" +
39947        "    " + exp + "\n\n" +
39948        "  Raw expression: " + (text.trim()) + "\n",
39949        range
39950      );
39951    }
39952  }
39953}
39954
39955function checkFunctionParameterExpression (exp, text, warn, range) {
39956  try {
39957    new Function(exp, '');
39958  } catch (e) {
39959    warn(
39960      "invalid function parameter expression: " + (e.message) + " in\n\n" +
39961      "    " + exp + "\n\n" +
39962      "  Raw expression: " + (text.trim()) + "\n",
39963      range
39964    );
39965  }
39966}
39967
39968/*  */
39969
39970var range = 2;
39971
39972function generateCodeFrame (
39973  source,
39974  start,
39975  end
39976) {
39977  if ( start === void 0 ) start = 0;
39978  if ( end === void 0 ) end = source.length;
39979
39980  var lines = source.split(/\r?\n/);
39981  var count = 0;
39982  var res = [];
39983  for (var i = 0; i < lines.length; i++) {
39984    count += lines[i].length + 1;
39985    if (count >= start) {
39986      for (var j = i - range; j <= i + range || end > count; j++) {
39987        if (j < 0 || j >= lines.length) { continue }
39988        res.push(("" + (j + 1) + (repeat$1(" ", 3 - String(j + 1).length)) + "|  " + (lines[j])));
39989        var lineLength = lines[j].length;
39990        if (j === i) {
39991          // push underline
39992          var pad = start - (count - lineLength) + 1;
39993          var length = end > count ? lineLength - pad : end - start;
39994          res.push("   |  " + repeat$1(" ", pad) + repeat$1("^", length));
39995        } else if (j > i) {
39996          if (end > count) {
39997            var length$1 = Math.min(end - count, lineLength);
39998            res.push("   |  " + repeat$1("^", length$1));
39999          }
40000          count += lineLength + 1;
40001        }
40002      }
40003      break
40004    }
40005  }
40006  return res.join('\n')
40007}
40008
40009function repeat$1 (str, n) {
40010  var result = '';
40011  if (n > 0) {
40012    while (true) { // eslint-disable-line
40013      if (n & 1) { result += str; }
40014      n >>>= 1;
40015      if (n <= 0) { break }
40016      str += str;
40017    }
40018  }
40019  return result
40020}
40021
40022/*  */
40023
40024
40025
40026function createFunction (code, errors) {
40027  try {
40028    return new Function(code)
40029  } catch (err) {
40030    errors.push({ err: err, code: code });
40031    return noop
40032  }
40033}
40034
40035function createCompileToFunctionFn (compile) {
40036  var cache = Object.create(null);
40037
40038  return function compileToFunctions (
40039    template,
40040    options,
40041    vm
40042  ) {
40043    options = extend({}, options);
40044    var warn$$1 = options.warn || warn;
40045    delete options.warn;
40046
40047    /* istanbul ignore if */
40048    if (true) {
40049      // detect possible CSP restriction
40050      try {
40051        new Function('return 1');
40052      } catch (e) {
40053        if (e.toString().match(/unsafe-eval|CSP/)) {
40054          warn$$1(
40055            'It seems you are using the standalone build of Vue.js in an ' +
40056            'environment with Content Security Policy that prohibits unsafe-eval. ' +
40057            'The template compiler cannot work in this environment. Consider ' +
40058            'relaxing the policy to allow unsafe-eval or pre-compiling your ' +
40059            'templates into render functions.'
40060          );
40061        }
40062      }
40063    }
40064
40065    // check cache
40066    var key = options.delimiters
40067      ? String(options.delimiters) + template
40068      : template;
40069    if (cache[key]) {
40070      return cache[key]
40071    }
40072
40073    // compile
40074    var compiled = compile(template, options);
40075
40076    // check compilation errors/tips
40077    if (true) {
40078      if (compiled.errors && compiled.errors.length) {
40079        if (options.outputSourceRange) {
40080          compiled.errors.forEach(function (e) {
40081            warn$$1(
40082              "Error compiling template:\n\n" + (e.msg) + "\n\n" +
40083              generateCodeFrame(template, e.start, e.end),
40084              vm
40085            );
40086          });
40087        } else {
40088          warn$$1(
40089            "Error compiling template:\n\n" + template + "\n\n" +
40090            compiled.errors.map(function (e) { return ("- " + e); }).join('\n') + '\n',
40091            vm
40092          );
40093        }
40094      }
40095      if (compiled.tips && compiled.tips.length) {
40096        if (options.outputSourceRange) {
40097          compiled.tips.forEach(function (e) { return tip(e.msg, vm); });
40098        } else {
40099          compiled.tips.forEach(function (msg) { return tip(msg, vm); });
40100        }
40101      }
40102    }
40103
40104    // turn code into functions
40105    var res = {};
40106    var fnGenErrors = [];
40107    res.render = createFunction(compiled.render, fnGenErrors);
40108    res.staticRenderFns = compiled.staticRenderFns.map(function (code) {
40109      return createFunction(code, fnGenErrors)
40110    });
40111
40112    // check function generation errors.
40113    // this should only happen if there is a bug in the compiler itself.
40114    // mostly for codegen development use
40115    /* istanbul ignore if */
40116    if (true) {
40117      if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {
40118        warn$$1(
40119          "Failed to generate render function:\n\n" +
40120          fnGenErrors.map(function (ref) {
40121            var err = ref.err;
40122            var code = ref.code;
40123
40124            return ((err.toString()) + " in\n\n" + code + "\n");
40125        }).join('\n'),
40126          vm
40127        );
40128      }
40129    }
40130
40131    return (cache[key] = res)
40132  }
40133}
40134
40135/*  */
40136
40137function createCompilerCreator (baseCompile) {
40138  return function createCompiler (baseOptions) {
40139    function compile (
40140      template,
40141      options
40142    ) {
40143      var finalOptions = Object.create(baseOptions);
40144      var errors = [];
40145      var tips = [];
40146
40147      var warn = function (msg, range, tip) {
40148        (tip ? tips : errors).push(msg);
40149      };
40150
40151      if (options) {
40152        if ( true && options.outputSourceRange) {
40153          // $flow-disable-line
40154          var leadingSpaceLength = template.match(/^\s*/)[0].length;
40155
40156          warn = function (msg, range, tip) {
40157            var data = { msg: msg };
40158            if (range) {
40159              if (range.start != null) {
40160                data.start = range.start + leadingSpaceLength;
40161              }
40162              if (range.end != null) {
40163                data.end = range.end + leadingSpaceLength;
40164              }
40165            }
40166            (tip ? tips : errors).push(data);
40167          };
40168        }
40169        // merge custom modules
40170        if (options.modules) {
40171          finalOptions.modules =
40172            (baseOptions.modules || []).concat(options.modules);
40173        }
40174        // merge custom directives
40175        if (options.directives) {
40176          finalOptions.directives = extend(
40177            Object.create(baseOptions.directives || null),
40178            options.directives
40179          );
40180        }
40181        // copy other options
40182        for (var key in options) {
40183          if (key !== 'modules' && key !== 'directives') {
40184            finalOptions[key] = options[key];
40185          }
40186        }
40187      }
40188
40189      finalOptions.warn = warn;
40190
40191      var compiled = baseCompile(template.trim(), finalOptions);
40192      if (true) {
40193        detectErrors(compiled.ast, warn);
40194      }
40195      compiled.errors = errors;
40196      compiled.tips = tips;
40197      return compiled
40198    }
40199
40200    return {
40201      compile: compile,
40202      compileToFunctions: createCompileToFunctionFn(compile)
40203    }
40204  }
40205}
40206
40207/*  */
40208
40209// `createCompilerCreator` allows creating compilers that use alternative
40210// parser/optimizer/codegen, e.g the SSR optimizing compiler.
40211// Here we just export a default compiler using the default parts.
40212var createCompiler = createCompilerCreator(function baseCompile (
40213  template,
40214  options
40215) {
40216  var ast = parse(template.trim(), options);
40217  if (options.optimize !== false) {
40218    optimize(ast, options);
40219  }
40220  var code = generate(ast, options);
40221  return {
40222    ast: ast,
40223    render: code.render,
40224    staticRenderFns: code.staticRenderFns
40225  }
40226});
40227
40228/*  */
40229
40230var ref$1 = createCompiler(baseOptions);
40231var compile = ref$1.compile;
40232var compileToFunctions = ref$1.compileToFunctions;
40233
40234/*  */
40235
40236// check whether current browser encodes a char inside attribute values
40237var div;
40238function getShouldDecode (href) {
40239  div = div || document.createElement('div');
40240  div.innerHTML = href ? "<a href=\"\n\"/>" : "<div a=\"\n\"/>";
40241  return div.innerHTML.indexOf('&#10;') > 0
40242}
40243
40244// #3663: IE encodes newlines inside attribute values while other browsers don't
40245var shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;
40246// #6828: chrome encodes content in a[href]
40247var shouldDecodeNewlinesForHref = inBrowser ? getShouldDecode(true) : false;
40248
40249/*  */
40250
40251var idToTemplate = cached(function (id) {
40252  var el = query(id);
40253  return el && el.innerHTML
40254});
40255
40256var mount = Vue.prototype.$mount;
40257Vue.prototype.$mount = function (
40258  el,
40259  hydrating
40260) {
40261  el = el && query(el);
40262
40263  /* istanbul ignore if */
40264  if (el === document.body || el === document.documentElement) {
40265     true && warn(
40266      "Do not mount Vue to <html> or <body> - mount to normal elements instead."
40267    );
40268    return this
40269  }
40270
40271  var options = this.$options;
40272  // resolve template/el and convert to render function
40273  if (!options.render) {
40274    var template = options.template;
40275    if (template) {
40276      if (typeof template === 'string') {
40277        if (template.charAt(0) === '#') {
40278          template = idToTemplate(template);
40279          /* istanbul ignore if */
40280          if ( true && !template) {
40281            warn(
40282              ("Template element not found or is empty: " + (options.template)),
40283              this
40284            );
40285          }
40286        }
40287      } else if (template.nodeType) {
40288        template = template.innerHTML;
40289      } else {
40290        if (true) {
40291          warn('invalid template option:' + template, this);
40292        }
40293        return this
40294      }
40295    } else if (el) {
40296      template = getOuterHTML(el);
40297    }
40298    if (template) {
40299      /* istanbul ignore if */
40300      if ( true && config.performance && mark) {
40301        mark('compile');
40302      }
40303
40304      var ref = compileToFunctions(template, {
40305        outputSourceRange: "development" !== 'production',
40306        shouldDecodeNewlines: shouldDecodeNewlines,
40307        shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,
40308        delimiters: options.delimiters,
40309        comments: options.comments
40310      }, this);
40311      var render = ref.render;
40312      var staticRenderFns = ref.staticRenderFns;
40313      options.render = render;
40314      options.staticRenderFns = staticRenderFns;
40315
40316      /* istanbul ignore if */
40317      if ( true && config.performance && mark) {
40318        mark('compile end');
40319        measure(("vue " + (this._name) + " compile"), 'compile', 'compile end');
40320      }
40321    }
40322  }
40323  return mount.call(this, el, hydrating)
40324};
40325
40326/**
40327 * Get outerHTML of elements, taking care
40328 * of SVG elements in IE as well.
40329 */
40330function getOuterHTML (el) {
40331  if (el.outerHTML) {
40332    return el.outerHTML
40333  } else {
40334    var container = document.createElement('div');
40335    container.appendChild(el.cloneNode(true));
40336    return container.innerHTML
40337  }
40338}
40339
40340Vue.compile = compileToFunctions;
40341
40342/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Vue);
40343
40344
40345/***/ })
vendor: 7,229 bytes, lines 40345-40526
40345
40346
40347/******/ 	});
40348/************************************************************************/
40349/******/ 	// The module cache
40350/******/ 	var __webpack_module_cache__ = {};
40351/******/
40352/******/ 	// The require function
40353/******/ 	function __webpack_require__(moduleId) {
40354/******/ 		// Check if module is in cache
40355/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
40356/******/ 		if (cachedModule !== undefined) {
40357/******/ 			return cachedModule.exports;
40358/******/ 		}
40359/******/ 		// Create a new module (and put it into the cache)
40360/******/ 		var module = __webpack_module_cache__[moduleId] = {
40361/******/ 			id: moduleId,
40362/******/ 			loaded: false,
40363/******/ 			exports: {}
40364/******/ 		};
40365/******/
40366/******/ 		// Execute the module function
40367/******/ 		__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
40368/******/
40369/******/ 		// Flag the module as loaded
40370/******/ 		module.loaded = true;
40371/******/
40372/******/ 		// Return the exports of the module
40373/******/ 		return module.exports;
40374/******/ 	}
40375/******/
40376/******/ 	// expose the modules object (__webpack_modules__)
40377/******/ 	__webpack_require__.m = __webpack_modules__;
40378/******/
40379/************************************************************************/
40380/******/ 	/* webpack/runtime/chunk loaded */
40381/******/ 	(() => {
40382/******/ 		var deferred = [];
40383/******/ 		__webpack_require__.O = (result, chunkIds, fn, priority) => {
40384/******/ 			if(chunkIds) {
40385/******/ 				priority = priority || 0;
40386/******/ 				for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];
40387/******/ 				deferred[i] = [chunkIds, fn, priority];
40388/******/ 				return;
40389/******/ 			}
40390/******/ 			var notFulfilled = Infinity;
40391/******/ 			for (var i = 0; i < deferred.length; i++) {
40392/******/ 				var [chunkIds, fn, priority] = deferred[i];
40393/******/ 				var fulfilled = true;
40394/******/ 				for (var j = 0; j < chunkIds.length; j++) {
40395/******/ 					if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {
40396/******/ 						chunkIds.splice(j--, 1);
40397/******/ 					} else {
40398/******/ 						fulfilled = false;
40399/******/ 						if(priority < notFulfilled) notFulfilled = priority;
40400/******/ 					}
40401/******/ 				}
40402/******/ 				if(fulfilled) {
40403/******/ 					deferred.splice(i--, 1)
40404/******/ 					var r = fn();
40405/******/ 					if (r !== undefined) result = r;
40406/******/ 				}
40407/******/ 			}
40408/******/ 			return result;
40409/******/ 		};
40410/******/ 	})();
40411/******/
40412/******/ 	/* webpack/runtime/define property getters */
40413/******/ 	(() => {
40414/******/ 		// define getter functions for harmony exports
40415/******/ 		__webpack_require__.d = (exports, definition) => {
40416/******/ 			for(var key in definition) {
40417/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
40418/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
40419/******/ 				}
40420/******/ 			}
40421/******/ 		};
40422/******/ 	})();
40423/******/
40424/******/ 	/* webpack/runtime/global */
40425/******/ 	(() => {
40426/******/ 		__webpack_require__.g = (function() {
40427/******/ 			if (typeof globalThis === 'object') return globalThis;
40428/******/ 			try {
40429/******/ 				return this || new Function('return this')();
40430/******/ 			} catch (e) {
40431/******/ 				if (typeof window === 'object') return window;
40432/******/ 			}
40433/******/ 		})();
40434/******/ 	})();
40435/******/
40436/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
40437/******/ 	(() => {
40438/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
40439/******/ 	})();
40440/******/
40441/******/ 	/* webpack/runtime/make namespace object */
40442/******/ 	(() => {
40443/******/ 		// define __esModule on exports
40444/******/ 		__webpack_require__.r = (exports) => {
40445/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
40446/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
40447/******/ 			}
40448/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
40449/******/ 		};
40450/******/ 	})();
40451/******/
40452/******/ 	/* webpack/runtime/node module decorator */
40453/******/ 	(() => {
40454/******/ 		__webpack_require__.nmd = (module) => {
40455/******/ 			module.paths = [];
40456/******/ 			if (!module.children) module.children = [];
40457/******/ 			return module;
40458/******/ 		};
40459/******/ 	})();
40460/******/
40461/******/ 	/* webpack/runtime/jsonp chunk loading */
40462/******/ 	(() => {
40463/******/ 		// no baseURI
40464/******/
40465/******/ 		// object to store loaded and loading chunks
40466/******/ 		// undefined = chunk not loaded, null = chunk preloaded/prefetched
40467/******/ 		// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
40468/******/ 		var installedChunks = {
40469/******/ 			"/js/app": 0,
40470/******/ 			"css/app": 0
40471/******/ 		};
40472/******/
40473/******/ 		// no chunk on demand loading
40474/******/
40475/******/ 		// no prefetching
40476/******/
40477/******/ 		// no preloaded
40478/******/
40479/******/ 		// no HMR
40480/******/
40481/******/ 		// no HMR manifest
40482/******/
40483/******/ 		__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);
40484/******/
40485/******/ 		// install a JSONP callback for chunk loading
40486/******/ 		var webpackJsonpCallback = (parentChunkLoadingFunction, data) => {
40487/******/ 			var [chunkIds, moreModules, runtime] = data;
40488/******/ 			// add "moreModules" to the modules object,
40489/******/ 			// then flag all "chunkIds" as loaded and fire callback
40490/******/ 			var moduleId, chunkId, i = 0;
40491/******/ 			if(chunkIds.some((id) => (installedChunks[id] !== 0))) {
40492/******/ 				for(moduleId in moreModules) {
40493/******/ 					if(__webpack_require__.o(moreModules, moduleId)) {
40494/******/ 						__webpack_require__.m[moduleId] = moreModules[moduleId];
40495/******/ 					}
40496/******/ 				}
40497/******/ 				if(runtime) var result = runtime(__webpack_require__);
40498/******/ 			}
40499/******/ 			if(parentChunkLoadingFunction) parentChunkLoadingFunction(data);
40500/******/ 			for(;i < chunkIds.length; i++) {
40501/******/ 				chunkId = chunkIds[i];
40502/******/ 				if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {
40503/******/ 					installedChunks[chunkId][0]();
40504/******/ 				}
40505/******/ 				installedChunks[chunkId] = 0;
40506/******/ 			}
40507/******/ 			return __webpack_require__.O(result);
40508/******/ 		}
40509/******/
40510/******/ 		var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || [];
40511/******/ 		chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));
40512/******/ 		chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));
40513/******/ 	})();
40514/******/
40515/************************************************************************/
40516/******/
40517/******/ 	// startup
40518/******/ 	// Load entry module and return exports
40519/******/ 	// This entry module depends on other loaded chunks and execution need to be delayed
40520/******/ 	__webpack_require__.O(undefined, ["css/app"], () => (__webpack_require__("./resources/js/app.js")))
40521/******/ 	__webpack_require__.O(undefined, ["css/app"], () => (__webpack_require__("./resources/sass/app.scss")))
40522/******/ 	var __webpack_exports__ = __webpack_require__.O(undefined, ["css/app"], () => (__webpack_require__("./resources/css/app.css")))
40523/******/ 	__webpack_exports__ = __webpack_require__.O(__webpack_exports__);
40524/******/
40525/******/ })()
40526;

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.