swc/crates/swc_ecma_minifier/tests/benches-full/lodash.js
Austaras 5dbbbea2ef
fix(es/minifier): Mark all function params as potential property mutation (#7409)
**Description:**

This issue is more severe than I originally thought. It raises not in
array indexing, but in function calls and property mutation. We should
treat all function arguments as potentially be property mutated,
otherwise following example

```js
class A {
	a = 1

	toString() {
		return this.a
	}
}

const a = new A()

function foo(x) {
	x.a++
}

const b = a + 1

foo(a)

console.log(b)
```

would be error(It should log 2, but logs 3 after compress).

As the result, massive regressions is unavoidable, since some of these
optimizations may indeed cause error. Part of them can be mitigated with
following optimization -- allow inline of ident even if its original
value is mutated. Consider

```js
export function foo(x) {
   const y = x
   x.a = 1
   y.b = 2
}
```

If x is a primitive value, all mutations to its properties are ignored;
if x is a object, then y refers to the same object no matter what
mutation is performed.

And there's still room for more, currently following code
```js
export function foo(x) {
    const y = Math.floor(x);
    g(y);
}
```
But I'd rather do it in a separate PR.


**Related issue:**

 - Closes #7402.
2023-05-18 01:19:17 +00:00

3107 lines
184 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(function() {
var undefined, FUNC_ERROR_TEXT = 'Expected a function', HASH_UNDEFINED = '__lodash_hash_undefined__', PLACEHOLDER = '__lodash_placeholder__', INFINITY = 1 / 0, NAN = 0 / 0, wrapFlags = [
[
'ary',
128
],
[
'bind',
1
],
[
'bindKey',
2
],
[
'curry',
8
],
[
'curryRight',
16
],
[
'flip',
512
],
[
'partial',
32
],
[
'partialRight',
64
],
[
'rearg',
256
]
], argsTag = '[object Arguments]', arrayTag = '[object Array]', boolTag = '[object Boolean]', dateTag = '[object Date]', errorTag = '[object Error]', funcTag = '[object Function]', genTag = '[object GeneratorFunction]', mapTag = '[object Map]', numberTag = '[object Number]', objectTag = '[object Object]', promiseTag = '[object Promise]', regexpTag = '[object RegExp]', setTag = '[object Set]', stringTag = '[object String]', symbolTag = '[object Symbol]', weakMapTag = '[object WeakMap]', arrayBufferTag = '[object ArrayBuffer]', dataViewTag = '[object DataView]', float32Tag = '[object Float32Array]', float64Tag = '[object Float64Array]', int8Tag = '[object Int8Array]', int16Tag = '[object Int16Array]', int32Tag = '[object Int32Array]', uint8Tag = '[object Uint8Array]', uint8ClampedTag = '[object Uint8ClampedArray]', uint16Tag = '[object Uint16Array]', uint32Tag = '[object Uint32Array]', reEmptyStringLeading = /\b__p \+= '';/g, reEmptyStringMiddle = /\b(__p \+=) '' \+/g, reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g, reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, reUnescapedHtml = /[&<>"']/g, reHasEscapedHtml = RegExp(reEscapedHtml.source), reHasUnescapedHtml = RegExp(reUnescapedHtml.source), reEscape = /<%-([\s\S]+?)%>/g, reEvaluate = /<%([\s\S]+?)%>/g, reInterpolate = /<%=([\s\S]+?)%>/g, reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/, rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g, reRegExpChar = /[\\^$.*+?()[\]{}|]/g, reHasRegExpChar = RegExp(reRegExpChar.source), reTrimStart = /^\s+/, reWhitespace = /\s/, reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, reSplitDetails = /,? & /, reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g, reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/, reEscapeChar = /\\(\\)?/g, reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g, reFlags = /\w*$/, reIsBadHex = /^[-+]0x[0-9a-f]+$/i, reIsBinary = /^0b[01]+$/i, reIsHostCtor = /^\[object .+?Constructor\]$/, reIsOctal = /^0o[0-7]+$/i, reIsUint = /^(?:0|[1-9]\d*)$/, reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g, reNoMatch = /($^)/, reUnescapedString = /['\n\r\u2028\u2029\\]/g, rsAstralRange = '\\ud800-\\udfff', rsComboRange = "\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff", rsDingbatRange = '\\u2700-\\u27bf', rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', rsVarRange = '\\ufe0e\\ufe0f', rsBreakRange = "\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\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", rsApos = "['\u2019]", rsBreak = '[' + rsBreakRange + ']', rsCombo = '[' + rsComboRange + ']', rsLower = '[' + rsLowerRange + ']', rsMisc = '[^' + rsAstralRange + rsBreakRange + '\\d+' + rsDingbatRange + rsLowerRange + rsUpperRange + ']', rsFitz = '\\ud83c[\\udffb-\\udfff]', rsNonAstral = '[^' + rsAstralRange + ']', rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', rsUpper = '[' + rsUpperRange + ']', rsZWJ = '\\u200d', rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', reOptMod = '(?:' + rsCombo + '|' + rsFitz + ")?", rsOptVar = '[' + rsVarRange + ']?', rsOptJoin = '(?:' + rsZWJ + '(?:' + [
rsNonAstral,
rsRegional,
rsSurrPair
].join('|') + ')' + rsOptVar + reOptMod + ')*', rsSeq = rsOptVar + reOptMod + rsOptJoin, rsEmoji = '(?:' + [
'[' + rsDingbatRange + ']',
rsRegional,
rsSurrPair
].join('|') + ')' + rsSeq, rsSymbol = '(?:' + [
rsNonAstral + rsCombo + '?',
rsCombo,
rsRegional,
rsSurrPair,
'[' + rsAstralRange + ']'
].join('|') + ')', reApos = RegExp(rsApos, 'g'), reComboMark = RegExp(rsCombo, 'g'), reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'), reUnicodeWord = RegExp([
rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [
rsBreak,
rsUpper,
'$'
].join('|') + ')',
'(?:' + rsUpper + '|' + rsMisc + ")+" + rsOptContrUpper + '(?=' + [
rsBreak,
rsUpper + rsMiscLower,
'$'
].join('|') + ')',
rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,
rsUpper + '+' + rsOptContrUpper,
'\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])',
'\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])',
'\\d+',
rsEmoji
].join('|'), 'g'), reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'), reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/, contextProps = [
'Array',
'Buffer',
'DataView',
'Date',
'Error',
'Float32Array',
'Float64Array',
'Function',
'Int8Array',
'Int16Array',
'Int32Array',
'Map',
'Math',
'Object',
'Promise',
'RegExp',
'Set',
'String',
'Symbol',
'TypeError',
'Uint8Array',
'Uint8ClampedArray',
'Uint16Array',
'Uint32Array',
'WeakMap',
'_',
'clearTimeout',
'isFinite',
'parseInt',
'setTimeout'
], templateCounter = -1, typedArrayTags = {};
typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = !0, typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = !1;
var cloneableTags = {};
cloneableTags[argsTag] = cloneableTags[arrayTag] = cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = cloneableTags[boolTag] = cloneableTags[dateTag] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[mapTag] = cloneableTags[numberTag] = cloneableTags[objectTag] = cloneableTags[regexpTag] = cloneableTags[setTag] = cloneableTags[stringTag] = cloneableTags[symbolTag] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = !0, cloneableTags[errorTag] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = !1;
var stringEscapes = {
'\\': '\\',
"'": "'",
'\n': 'n',
'\r': 'r',
'\u2028': 'u2028',
'\u2029': 'u2029'
}, freeParseFloat = parseFloat, freeParseInt = parseInt, freeGlobal = 'object' == typeof global && global && global.Object === Object && global, freeSelf = 'object' == typeof self && self && self.Object === Object && self, root = freeGlobal || freeSelf || Function('return this')(), freeExports = 'object' == typeof exports && exports && !exports.nodeType && exports, freeModule = freeExports && 'object' == typeof module && module && !module.nodeType && module, moduleExports = freeModule && freeModule.exports === freeExports, freeProcess = moduleExports && freeGlobal.process, nodeUtil = function() {
try {
var types = freeModule && freeModule.require && freeModule.require('util').types;
if (types) return types;
return freeProcess && freeProcess.binding && freeProcess.binding('util');
} catch (e) {}
}(), nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, nodeIsDate = nodeUtil && nodeUtil.isDate, nodeIsMap = nodeUtil && nodeUtil.isMap, nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, nodeIsSet = nodeUtil && nodeUtil.isSet, nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
function apply(func, thisArg, args) {
switch(args.length){
case 0:
return func.call(thisArg);
case 1:
return func.call(thisArg, args[0]);
case 2:
return func.call(thisArg, args[0], args[1]);
case 3:
return func.call(thisArg, args[0], args[1], args[2]);
}
return func.apply(thisArg, args);
}
function arrayAggregator(array, setter, iteratee, accumulator) {
for(var index = -1, length = null == array ? 0 : array.length; ++index < length;){
var value = array[index];
setter(accumulator, value, iteratee(value), array);
}
return accumulator;
}
function arrayEach(array, iteratee) {
for(var index = -1, length = null == array ? 0 : array.length; ++index < length && !1 !== iteratee(array[index], index, array););
return array;
}
function arrayEachRight(array, iteratee) {
for(var length = null == array ? 0 : array.length; length-- && !1 !== iteratee(array[length], length, array););
return array;
}
function arrayEvery(array, predicate) {
for(var index = -1, length = null == array ? 0 : array.length; ++index < length;)if (!predicate(array[index], index, array)) return !1;
return !0;
}
function arrayFilter(array, predicate) {
for(var index = -1, length = null == array ? 0 : array.length, resIndex = 0, result = []; ++index < length;){
var value = array[index];
predicate(value, index, array) && (result[resIndex++] = value);
}
return result;
}
function arrayIncludes(array, value) {
return !!(null == array ? 0 : array.length) && baseIndexOf(array, value, 0) > -1;
}
function arrayIncludesWith(array, value, comparator) {
for(var index = -1, length = null == array ? 0 : array.length; ++index < length;)if (comparator(value, array[index])) return !0;
return !1;
}
function arrayMap(array, iteratee) {
for(var index = -1, length = null == array ? 0 : array.length, result = Array(length); ++index < length;)result[index] = iteratee(array[index], index, array);
return result;
}
function arrayPush(array, values) {
for(var index = -1, length = values.length, offset = array.length; ++index < length;)array[offset + index] = values[index];
return array;
}
function arrayReduce(array, iteratee, accumulator, initAccum) {
var index = -1, length = null == array ? 0 : array.length;
for(initAccum && length && (accumulator = array[++index]); ++index < length;)accumulator = iteratee(accumulator, array[index], index, array);
return accumulator;
}
function arrayReduceRight(array, iteratee, accumulator, initAccum) {
var length = null == array ? 0 : array.length;
for(initAccum && length && (accumulator = array[--length]); length--;)accumulator = iteratee(accumulator, array[length], length, array);
return accumulator;
}
function arraySome(array, predicate) {
for(var index = -1, length = null == array ? 0 : array.length; ++index < length;)if (predicate(array[index], index, array)) return !0;
return !1;
}
var asciiSize = baseProperty('length');
function baseFindKey(collection, predicate, eachFunc) {
var result;
return eachFunc(collection, function(value, key, collection) {
if (predicate(value, key, collection)) return result = key, !1;
}), result;
}
function baseFindIndex(array, predicate, fromIndex, fromRight) {
for(var length = array.length, index = fromIndex + (fromRight ? 1 : -1); fromRight ? index-- : ++index < length;)if (predicate(array[index], index, array)) return index;
return -1;
}
function baseIndexOf(array, value, fromIndex) {
return value == value ? function(array, value, fromIndex) {
for(var index = fromIndex - 1, length = array.length; ++index < length;)if (array[index] === value) return index;
return -1;
}(array, value, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex);
}
function baseIndexOfWith(array, value, fromIndex, comparator) {
for(var index = fromIndex - 1, length = array.length; ++index < length;)if (comparator(array[index], value)) return index;
return -1;
}
function baseIsNaN(value) {
return value != value;
}
function baseMean(array, iteratee) {
var length = null == array ? 0 : array.length;
return length ? baseSum(array, iteratee) / length : NAN;
}
function baseProperty(key) {
return function(object) {
return null == object ? undefined : object[key];
};
}
function basePropertyOf(object) {
return function(key) {
return null == object ? undefined : object[key];
};
}
function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
return eachFunc(collection, function(value, index, collection) {
accumulator = initAccum ? (initAccum = !1, value) : iteratee(accumulator, value, index, collection);
}), accumulator;
}
function baseSum(array, iteratee) {
for(var result, index = -1, length = array.length; ++index < length;){
var current = iteratee(array[index]);
undefined !== current && (result = undefined === result ? current : result + current);
}
return result;
}
function baseTimes(n, iteratee) {
for(var index = -1, result = Array(n); ++index < n;)result[index] = iteratee(index);
return result;
}
function baseTrim(string) {
return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') : string;
}
function baseUnary(func) {
return function(value) {
return func(value);
};
}
function baseValues(object, props) {
return arrayMap(props, function(key) {
return object[key];
});
}
function cacheHas(cache, key) {
return cache.has(key);
}
function charsStartIndex(strSymbols, chrSymbols) {
for(var index = -1, length = strSymbols.length; ++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1;);
return index;
}
function charsEndIndex(strSymbols, chrSymbols) {
for(var index = strSymbols.length; index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1;);
return index;
}
var deburrLetter = basePropertyOf({
À: 'A',
Á: 'A',
Â: 'A',
Ã: 'A',
Ä: 'A',
Å: 'A',
à: 'a',
á: 'a',
â: 'a',
ã: 'a',
ä: 'a',
å: 'a',
Ç: 'C',
ç: 'c',
Ð: 'D',
ð: 'd',
È: 'E',
É: 'E',
Ê: 'E',
Ë: 'E',
è: 'e',
é: 'e',
ê: 'e',
ë: 'e',
Ì: 'I',
Í: 'I',
Î: 'I',
Ï: 'I',
ì: 'i',
í: 'i',
î: 'i',
ï: 'i',
Ñ: 'N',
ñ: 'n',
Ò: 'O',
Ó: 'O',
Ô: 'O',
Õ: 'O',
Ö: 'O',
Ø: 'O',
ò: 'o',
ó: 'o',
ô: 'o',
õ: 'o',
ö: 'o',
ø: 'o',
Ù: 'U',
Ú: 'U',
Û: 'U',
Ü: 'U',
ù: 'u',
ú: 'u',
û: 'u',
ü: 'u',
Ý: 'Y',
ý: 'y',
ÿ: 'y',
Æ: 'Ae',
æ: 'ae',
Þ: 'Th',
þ: 'th',
ß: 'ss',
Ā: 'A',
Ă: 'A',
Ą: 'A',
ā: 'a',
ă: 'a',
ą: 'a',
Ć: 'C',
Ĉ: 'C',
Ċ: 'C',
Č: 'C',
ć: 'c',
ĉ: 'c',
ċ: 'c',
č: 'c',
Ď: 'D',
Đ: 'D',
ď: 'd',
đ: 'd',
Ē: 'E',
Ĕ: 'E',
Ė: 'E',
Ę: 'E',
Ě: 'E',
ē: 'e',
ĕ: 'e',
ė: 'e',
ę: 'e',
ě: 'e',
Ĝ: 'G',
Ğ: 'G',
Ġ: 'G',
Ģ: 'G',
ĝ: 'g',
ğ: 'g',
ġ: 'g',
ģ: 'g',
Ĥ: 'H',
Ħ: 'H',
ĥ: 'h',
ħ: 'h',
Ĩ: 'I',
Ī: 'I',
Ĭ: 'I',
Į: 'I',
İ: 'I',
ĩ: 'i',
ī: 'i',
ĭ: 'i',
į: 'i',
ı: 'i',
Ĵ: 'J',
ĵ: 'j',
Ķ: 'K',
ķ: 'k',
ĸ: 'k',
Ĺ: 'L',
Ļ: 'L',
Ľ: 'L',
Ŀ: 'L',
Ł: 'L',
ĺ: 'l',
ļ: 'l',
ľ: 'l',
ŀ: 'l',
ł: 'l',
Ń: 'N',
Ņ: 'N',
Ň: 'N',
Ŋ: 'N',
ń: 'n',
ņ: 'n',
ň: 'n',
ŋ: 'n',
Ō: 'O',
Ŏ: 'O',
Ő: 'O',
ō: 'o',
ŏ: 'o',
ő: 'o',
Ŕ: 'R',
Ŗ: 'R',
Ř: 'R',
ŕ: 'r',
ŗ: 'r',
ř: 'r',
Ś: 'S',
Ŝ: 'S',
Ş: 'S',
Š: 'S',
ś: 's',
ŝ: 's',
ş: 's',
š: 's',
Ţ: 'T',
Ť: 'T',
Ŧ: 'T',
ţ: 't',
ť: 't',
ŧ: 't',
Ũ: 'U',
Ū: 'U',
Ŭ: 'U',
Ů: 'U',
Ű: 'U',
Ų: 'U',
ũ: 'u',
ū: 'u',
ŭ: 'u',
ů: 'u',
ű: 'u',
ų: 'u',
Ŵ: 'W',
ŵ: 'w',
Ŷ: 'Y',
ŷ: 'y',
Ÿ: 'Y',
Ź: 'Z',
Ż: 'Z',
Ž: 'Z',
ź: 'z',
ż: 'z',
ž: 'z',
IJ: 'IJ',
ij: 'ij',
Œ: 'Oe',
œ: 'oe',
ʼn: "'n",
ſ: 's'
}), escapeHtmlChar = basePropertyOf({
'&': '&amp;',
'<': '&lt;',
'>': '&gt;',
'"': '&quot;',
"'": '&#39;'
});
function escapeStringChar(chr) {
return '\\' + stringEscapes[chr];
}
function hasUnicode(string) {
return reHasUnicode.test(string);
}
function mapToArray(map) {
var index = -1, result = Array(map.size);
return map.forEach(function(value, key) {
result[++index] = [
key,
value
];
}), result;
}
function overArg(func, transform) {
return function(arg) {
return func(transform(arg));
};
}
function replaceHolders(array, placeholder) {
for(var index = -1, length = array.length, resIndex = 0, result = []; ++index < length;){
var value = array[index];
(value === placeholder || value === PLACEHOLDER) && (array[index] = PLACEHOLDER, result[resIndex++] = index);
}
return result;
}
function setToArray(set) {
var index = -1, result = Array(set.size);
return set.forEach(function(value) {
result[++index] = value;
}), result;
}
function stringSize(string) {
return hasUnicode(string) ? function(string) {
for(var result = reUnicode.lastIndex = 0; reUnicode.test(string);)++result;
return result;
}(string) : asciiSize(string);
}
function stringToArray(string) {
return hasUnicode(string) ? string.match(reUnicode) || [] : string.split('');
}
function trimmedEndIndex(string) {
for(var index = string.length; index-- && reWhitespace.test(string.charAt(index)););
return index;
}
var unescapeHtmlChar = basePropertyOf({
'&amp;': '&',
'&lt;': '<',
'&gt;': '>',
'&quot;': '"',
'&#39;': "'"
}), _ = function runInContext(context) {
var uid, result, cache, source, Array1 = (context = null == context ? root : _.defaults(root.Object(), context, _.pick(root, contextProps))).Array, Date = context.Date, Error = context.Error, Function1 = context.Function, Math = context.Math, Object1 = context.Object, RegExp1 = context.RegExp, String = context.String, TypeError = context.TypeError, arrayProto = Array1.prototype, funcProto = Function1.prototype, objectProto = Object1.prototype, coreJsData = context['__core-js_shared__'], funcToString = funcProto.toString, hasOwnProperty = objectProto.hasOwnProperty, idCounter = 0, maskSrcKey = (uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '')) ? 'Symbol(src)_1.' + uid : '', nativeObjectToString = objectProto.toString, objectCtorString = funcToString.call(Object1), oldDash = root._, reIsNative = RegExp1('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&').replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'), Buffer = moduleExports ? context.Buffer : undefined, Symbol = context.Symbol, Uint8Array = context.Uint8Array, allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, getPrototype = overArg(Object1.getPrototypeOf, Object1), objectCreate = Object1.create, propertyIsEnumerable = objectProto.propertyIsEnumerable, splice = arrayProto.splice, spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined, symIterator = Symbol ? Symbol.iterator : undefined, symToStringTag = Symbol ? Symbol.toStringTag : undefined, defineProperty = function() {
try {
var func = getNative(Object1, 'defineProperty');
return func({}, '', {}), func;
} catch (e) {}
}(), ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, ctxNow = Date && Date.now !== root.Date.now && Date.now, ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout, nativeCeil = Math.ceil, nativeFloor = Math.floor, nativeGetSymbols = Object1.getOwnPropertySymbols, nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, nativeIsFinite = context.isFinite, nativeJoin = arrayProto.join, nativeKeys = overArg(Object1.keys, Object1), nativeMax = Math.max, nativeMin = Math.min, nativeNow = Date.now, nativeParseInt = context.parseInt, nativeRandom = Math.random, nativeReverse = arrayProto.reverse, DataView = getNative(context, 'DataView'), Map = getNative(context, 'Map'), Promise = getNative(context, 'Promise'), Set = getNative(context, 'Set'), WeakMap = getNative(context, 'WeakMap'), nativeCreate = getNative(Object1, 'create'), metaMap = WeakMap && new WeakMap, realNames = {}, dataViewCtorString = toSource(DataView), mapCtorString = toSource(Map), promiseCtorString = toSource(Promise), setCtorString = toSource(Set), weakMapCtorString = toSource(WeakMap), symbolProto = Symbol ? Symbol.prototype : undefined, symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, symbolToString = symbolProto ? symbolProto.toString : undefined;
function lodash(value) {
if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {
if (value instanceof LodashWrapper) return value;
if (hasOwnProperty.call(value, '__wrapped__')) return wrapperClone(value);
}
return new LodashWrapper(value);
}
var baseCreate = function() {
function object() {}
return function(proto) {
if (!isObject(proto)) return {};
if (objectCreate) return objectCreate(proto);
object.prototype = proto;
var result = new object;
return object.prototype = undefined, result;
};
}();
function baseLodash() {}
function LodashWrapper(value, chainAll) {
this.__wrapped__ = value, this.__actions__ = [], this.__chain__ = !!chainAll, this.__index__ = 0, this.__values__ = undefined;
}
function LazyWrapper(value) {
this.__wrapped__ = value, this.__actions__ = [], this.__dir__ = 1, this.__filtered__ = !1, this.__iteratees__ = [], this.__takeCount__ = 4294967295, this.__views__ = [];
}
function Hash(entries) {
var index = -1, length = null == entries ? 0 : entries.length;
for(this.clear(); ++index < length;){
var entry = entries[index];
this.set(entry[0], entry[1]);
}
}
function ListCache(entries) {
var index = -1, length = null == entries ? 0 : entries.length;
for(this.clear(); ++index < length;){
var entry = entries[index];
this.set(entry[0], entry[1]);
}
}
function MapCache(entries) {
var index = -1, length = null == entries ? 0 : entries.length;
for(this.clear(); ++index < length;){
var entry = entries[index];
this.set(entry[0], entry[1]);
}
}
function SetCache(values) {
var index = -1, length = null == values ? 0 : values.length;
for(this.__data__ = new MapCache; ++index < length;)this.add(values[index]);
}
function Stack(entries) {
var data = this.__data__ = new ListCache(entries);
this.size = data.size;
}
function arrayLikeKeys(value, inherited) {
var isArr = isArray(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length;
for(var key in value)(inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && ('length' == key || isBuff && ('offset' == key || 'parent' == key) || isType && ('buffer' == key || 'byteLength' == key || 'byteOffset' == key) || isIndex(key, length))) && result.push(key);
return result;
}
function arraySample(array) {
var length = array.length;
return length ? array[baseRandom(0, length - 1)] : undefined;
}
function arraySampleSize(array, n) {
return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));
}
function arrayShuffle(array) {
return shuffleSelf(copyArray(array));
}
function assignMergeValue(object, key, value) {
(undefined === value || eq(object[key], value)) && (undefined !== value || key in object) || baseAssignValue(object, key, value);
}
function assignValue(object, key, value) {
var objValue = object[key];
hasOwnProperty.call(object, key) && eq(objValue, value) && (undefined !== value || key in object) || baseAssignValue(object, key, value);
}
function assocIndexOf(array, key) {
for(var length = array.length; length--;)if (eq(array[length][0], key)) return length;
return -1;
}
function baseAggregator(collection, setter, iteratee, accumulator) {
return baseEach(collection, function(value, key, collection) {
setter(accumulator, value, iteratee(value), collection);
}), accumulator;
}
function baseAssign(object, source) {
return object && copyObject(source, keys(source), object);
}
function baseAssignValue(object, key, value) {
'__proto__' == key && defineProperty ? defineProperty(object, key, {
configurable: !0,
enumerable: !0,
value: value,
writable: !0
}) : object[key] = value;
}
function baseAt(object, paths) {
for(var index = -1, length = paths.length, result = Array1(length), skip = null == object; ++index < length;)result[index] = skip ? undefined : get(object, paths[index]);
return result;
}
function baseClamp(number, lower, upper) {
return number == number && (undefined !== upper && (number = number <= upper ? number : upper), undefined !== lower && (number = number >= lower ? number : lower)), number;
}
function baseClone(value, bitmask, customizer, key, object, stack) {
var result, isDeep = 1 & bitmask, isFlat = 2 & bitmask, isFull = 4 & bitmask;
if (customizer && (result = object ? customizer(value, key, object, stack) : customizer(value)), undefined !== result) return result;
if (!isObject(value)) return value;
var isArr = isArray(value);
if (isArr) {
if (length = value.length, result1 = new value.constructor(length), length && 'string' == typeof value[0] && hasOwnProperty.call(value, 'index') && (result1.index = value.index, result1.input = value.input), result = result1, !isDeep) return copyArray(value, result);
} else {
var length, result1, object1, object2, object3, tag = getTag(value), isFunc = tag == funcTag || tag == genTag;
if (isBuffer(value)) return cloneBuffer(value, isDeep);
if (tag == objectTag || tag == argsTag || isFunc && !object) {
if (result = isFlat || isFunc ? {} : initCloneObject(value), !isDeep) return isFlat ? (object1 = (object3 = result) && copyObject(value, keysIn(value), object3), copyObject(value, getSymbolsIn(value), object1)) : (object2 = baseAssign(result, value), copyObject(value, getSymbols(value), object2));
} else {
if (!cloneableTags[tag]) return object ? value : {};
result = function(object, tag, isDeep) {
var buffer, result, Ctor = object.constructor;
switch(tag){
case arrayBufferTag:
return cloneArrayBuffer(object);
case boolTag:
case dateTag:
return new Ctor(+object);
case dataViewTag:
return buffer = isDeep ? cloneArrayBuffer(object.buffer) : object.buffer, new object.constructor(buffer, object.byteOffset, object.byteLength);
case float32Tag:
case float64Tag:
case int8Tag:
case int16Tag:
case int32Tag:
case uint8Tag:
case uint8ClampedTag:
case uint16Tag:
case uint32Tag:
return cloneTypedArray(object, isDeep);
case mapTag:
return new Ctor;
case numberTag:
case stringTag:
return new Ctor(object);
case regexpTag:
return (result = new object.constructor(object.source, reFlags.exec(object))).lastIndex = object.lastIndex, result;
case setTag:
return new Ctor;
case symbolTag:
return symbolValueOf ? Object1(symbolValueOf.call(object)) : {};
}
}(value, tag, isDeep);
}
}
stack || (stack = new Stack);
var stacked = stack.get(value);
if (stacked) return stacked;
stack.set(value, result), isSet(value) ? value.forEach(function(subValue) {
result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
}) : isMap(value) && value.forEach(function(subValue, key) {
result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));
});
var keysFunc = isFull ? isFlat ? getAllKeysIn : getAllKeys : isFlat ? keysIn : keys, props = isArr ? undefined : keysFunc(value);
return arrayEach(props || value, function(subValue, key) {
props && (subValue = value[key = subValue]), assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
}), result;
}
function baseConformsTo(object, source, props) {
var length = props.length;
if (null == object) return !length;
for(object = Object1(object); length--;){
var key = props[length], predicate = source[key], value = object[key];
if (undefined === value && !(key in object) || !predicate(value)) return !1;
}
return !0;
}
function baseDelay(func, wait, args) {
if ('function' != typeof func) throw new TypeError(FUNC_ERROR_TEXT);
return setTimeout(function() {
func.apply(undefined, args);
}, wait);
}
function baseDifference(array, values, iteratee, comparator) {
var index = -1, includes = arrayIncludes, isCommon = !0, length = array.length, result = [], valuesLength = values.length;
if (!length) return result;
iteratee && (values = arrayMap(values, baseUnary(iteratee))), comparator ? (includes = arrayIncludesWith, isCommon = !1) : values.length >= 200 && (includes = cacheHas, isCommon = !1, values = new SetCache(values));
outer: for(; ++index < length;){
var value = array[index], computed = null == iteratee ? value : iteratee(value);
if (value = comparator || 0 !== value ? value : 0, isCommon && computed == computed) {
for(var valuesIndex = valuesLength; valuesIndex--;)if (values[valuesIndex] === computed) continue outer;
result.push(value);
} else includes(values, computed, comparator) || result.push(value);
}
return result;
}
lodash.templateSettings = {
escape: reEscape,
evaluate: reEvaluate,
interpolate: reInterpolate,
variable: '',
imports: {
_: lodash
}
}, lodash.prototype = baseLodash.prototype, lodash.prototype.constructor = lodash, LodashWrapper.prototype = baseCreate(baseLodash.prototype), LodashWrapper.prototype.constructor = LodashWrapper, LazyWrapper.prototype = baseCreate(baseLodash.prototype), LazyWrapper.prototype.constructor = LazyWrapper, Hash.prototype.clear = function() {
this.__data__ = nativeCreate ? nativeCreate(null) : {}, this.size = 0;
}, Hash.prototype.delete = function(key) {
var result = this.has(key) && delete this.__data__[key];
return this.size -= result ? 1 : 0, result;
}, Hash.prototype.get = function(key) {
var data = this.__data__;
if (nativeCreate) {
var result = data[key];
return result === HASH_UNDEFINED ? undefined : result;
}
return hasOwnProperty.call(data, key) ? data[key] : undefined;
}, Hash.prototype.has = function(key) {
var data = this.__data__;
return nativeCreate ? undefined !== data[key] : hasOwnProperty.call(data, key);
}, Hash.prototype.set = function(key, value) {
var data = this.__data__;
return this.size += this.has(key) ? 0 : 1, data[key] = nativeCreate && undefined === value ? HASH_UNDEFINED : value, this;
}, ListCache.prototype.clear = function() {
this.__data__ = [], this.size = 0;
}, ListCache.prototype.delete = function(key) {
var data = this.__data__, index = assocIndexOf(data, key);
return !(index < 0) && (index == data.length - 1 ? data.pop() : splice.call(data, index, 1), --this.size, !0);
}, ListCache.prototype.get = function(key) {
var data = this.__data__, index = assocIndexOf(data, key);
return index < 0 ? undefined : data[index][1];
}, ListCache.prototype.has = function(key) {
return assocIndexOf(this.__data__, key) > -1;
}, ListCache.prototype.set = function(key, value) {
var data = this.__data__, index = assocIndexOf(data, key);
return index < 0 ? (++this.size, data.push([
key,
value
])) : data[index][1] = value, this;
}, MapCache.prototype.clear = function() {
this.size = 0, this.__data__ = {
hash: new Hash,
map: new (Map || ListCache),
string: new Hash
};
}, MapCache.prototype.delete = function(key) {
var result = getMapData(this, key).delete(key);
return this.size -= result ? 1 : 0, result;
}, MapCache.prototype.get = function(key) {
return getMapData(this, key).get(key);
}, MapCache.prototype.has = function(key) {
return getMapData(this, key).has(key);
}, MapCache.prototype.set = function(key, value) {
var data = getMapData(this, key), size = data.size;
return data.set(key, value), this.size += data.size == size ? 0 : 1, this;
}, SetCache.prototype.add = SetCache.prototype.push = function(value) {
return this.__data__.set(value, HASH_UNDEFINED), this;
}, SetCache.prototype.has = function(value) {
return this.__data__.has(value);
}, Stack.prototype.clear = function() {
this.__data__ = new ListCache, this.size = 0;
}, Stack.prototype.delete = function(key) {
var data = this.__data__, result = data.delete(key);
return this.size = data.size, result;
}, Stack.prototype.get = function(key) {
return this.__data__.get(key);
}, Stack.prototype.has = function(key) {
return this.__data__.has(key);
}, Stack.prototype.set = function(key, value) {
var data = this.__data__;
if (data instanceof ListCache) {
var pairs = data.__data__;
if (!Map || pairs.length < 199) return pairs.push([
key,
value
]), this.size = ++data.size, this;
data = this.__data__ = new MapCache(pairs);
}
return data.set(key, value), this.size = data.size, this;
};
var baseEach = createBaseEach(baseForOwn), baseEachRight = createBaseEach(baseForOwnRight, !0);
function baseEvery(collection, predicate) {
var result = !0;
return baseEach(collection, function(value, index, collection) {
return result = !!predicate(value, index, collection);
}), result;
}
function baseExtremum(array, iteratee, comparator) {
for(var index = -1, length = array.length; ++index < length;){
var value = array[index], current = iteratee(value);
if (null != current && (undefined === computed ? current == current && !isSymbol(current) : comparator(current, computed))) var computed = current, result = value;
}
return result;
}
function baseFilter(collection, predicate) {
var result = [];
return baseEach(collection, function(value, index, collection) {
predicate(value, index, collection) && result.push(value);
}), result;
}
function baseFlatten(array, depth, predicate, isStrict, result) {
var index = -1, length = array.length;
for(predicate || (predicate = isFlattenable), result || (result = []); ++index < length;){
var value = array[index];
depth > 0 && predicate(value) ? depth > 1 ? baseFlatten(value, depth - 1, predicate, isStrict, result) : arrayPush(result, value) : isStrict || (result[result.length] = value);
}
return result;
}
var baseFor = createBaseFor(), baseForRight = createBaseFor(!0);
function baseForOwn(object, iteratee) {
return object && baseFor(object, iteratee, keys);
}
function baseForOwnRight(object, iteratee) {
return object && baseForRight(object, iteratee, keys);
}
function baseFunctions(object, props) {
return arrayFilter(props, function(key) {
return isFunction(object[key]);
});
}
function baseGet(object, path) {
path = castPath(path, object);
for(var index = 0, length = path.length; null != object && index < length;)object = object[toKey(path[index++])];
return index && index == length ? object : undefined;
}
function baseGetAllKeys(object, keysFunc, symbolsFunc) {
var result = keysFunc(object);
return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
}
function baseGetTag(value) {
return null == value ? undefined === value ? '[object Undefined]' : '[object Null]' : symToStringTag && symToStringTag in Object1(value) ? function(value) {
var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag];
try {
value[symToStringTag] = undefined;
var unmasked = !0;
} catch (e) {}
var result = nativeObjectToString.call(value);
return unmasked && (isOwn ? value[symToStringTag] = tag : delete value[symToStringTag]), result;
}(value) : nativeObjectToString.call(value);
}
function baseGt(value, other) {
return value > other;
}
function baseHas(object, key) {
return null != object && hasOwnProperty.call(object, key);
}
function baseHasIn(object, key) {
return null != object && key in Object1(object);
}
function baseIntersection(arrays, iteratee, comparator) {
for(var includes = comparator ? arrayIncludesWith : arrayIncludes, length = arrays[0].length, othLength = arrays.length, othIndex = othLength, caches = Array1(othLength), maxLength = 1 / 0, result = []; othIndex--;){
var array = arrays[othIndex];
othIndex && iteratee && (array = arrayMap(array, baseUnary(iteratee))), maxLength = nativeMin(array.length, maxLength), caches[othIndex] = !comparator && (iteratee || length >= 120 && array.length >= 120) ? new SetCache(othIndex && array) : undefined;
}
array = arrays[0];
var index = -1, seen = caches[0];
outer: for(; ++index < length && result.length < maxLength;){
var value = array[index], computed = iteratee ? iteratee(value) : value;
if (value = comparator || 0 !== value ? value : 0, !(seen ? cacheHas(seen, computed) : includes(result, computed, comparator))) {
for(othIndex = othLength; --othIndex;){
var cache = caches[othIndex];
if (!(cache ? cacheHas(cache, computed) : includes(arrays[othIndex], computed, comparator))) continue outer;
}
seen && seen.push(computed), result.push(value);
}
}
return result;
}
function baseInvoke(object, path, args) {
path = castPath(path, object);
var func = null == (object = parent(object, path)) ? object : object[toKey(last(path))];
return null == func ? undefined : apply(func, object, args);
}
function baseIsArguments(value) {
return isObjectLike(value) && baseGetTag(value) == argsTag;
}
function baseIsEqual(value, other, bitmask, customizer, stack) {
return value === other || (null != value && null != other && (isObjectLike(value) || isObjectLike(other)) ? function(object, other, bitmask, customizer, equalFunc, stack) {
var objIsArr = isArray(object), othIsArr = isArray(other), objTag = objIsArr ? arrayTag : getTag(object), othTag = othIsArr ? arrayTag : getTag(other);
objTag = objTag == argsTag ? objectTag : objTag, othTag = othTag == argsTag ? objectTag : othTag;
var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag;
if (isSameTag && isBuffer(object)) {
if (!isBuffer(other)) return !1;
objIsArr = !0, objIsObj = !1;
}
if (isSameTag && !objIsObj) return stack || (stack = new Stack), objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : function(object, other, tag, bitmask, customizer, equalFunc, stack) {
switch(tag){
case dataViewTag:
if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) break;
object = object.buffer, other = other.buffer;
case arrayBufferTag:
if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array(object), new Uint8Array(other))) break;
return !0;
case boolTag:
case dateTag:
case numberTag:
return eq(+object, +other);
case errorTag:
return object.name == other.name && object.message == other.message;
case regexpTag:
case stringTag:
return object == other + '';
case mapTag:
var convert = mapToArray;
case setTag:
var isPartial = 1 & bitmask;
if (convert || (convert = setToArray), object.size != other.size && !isPartial) break;
var stacked = stack.get(object);
if (stacked) return stacked == other;
bitmask |= 2, stack.set(object, other);
var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
return stack.delete(object), result;
case symbolTag:
if (symbolValueOf) return symbolValueOf.call(object) == symbolValueOf.call(other);
}
return !1;
}(object, other, objTag, bitmask, customizer, equalFunc, stack);
if (!(1 & bitmask)) {
var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
if (objIsWrapped || othIsWrapped) {
var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other;
return stack || (stack = new Stack), equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
}
}
return !!isSameTag && (stack || (stack = new Stack), function(object, other, bitmask, customizer, equalFunc, stack) {
var isPartial = 1 & bitmask, objProps = getAllKeys(object), objLength = objProps.length;
if (objLength != getAllKeys(other).length && !isPartial) return !1;
for(var index = objLength; index--;){
var key = objProps[index];
if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) return !1;
}
var objStacked = stack.get(object), othStacked = stack.get(other);
if (objStacked && othStacked) return objStacked == other && othStacked == object;
var result = !0;
stack.set(object, other), stack.set(other, object);
for(var skipCtor = isPartial; ++index < objLength;){
var objValue = object[key = objProps[index]], othValue = other[key];
if (customizer) var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);
if (!(undefined === compared ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {
result = !1;
break;
}
skipCtor || (skipCtor = 'constructor' == key);
}
if (result && !skipCtor) {
var objCtor = object.constructor, othCtor = other.constructor;
objCtor != othCtor && 'constructor' in object && 'constructor' in other && !('function' == typeof objCtor && objCtor instanceof objCtor && 'function' == typeof othCtor && othCtor instanceof othCtor) && (result = !1);
}
return stack.delete(object), stack.delete(other), result;
}(object, other, bitmask, customizer, equalFunc, stack));
}(value, other, bitmask, customizer, baseIsEqual, stack) : value != value && other != other);
}
function baseIsMatch(object, source, matchData, customizer) {
var index = matchData.length, length = index, noCustomizer = !customizer;
if (null == object) return !length;
for(object = Object1(object); index--;){
var data = matchData[index];
if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) return !1;
}
for(; ++index < length;){
var key = (data = matchData[index])[0], objValue = object[key], srcValue = data[1];
if (noCustomizer && data[2]) {
if (undefined === objValue && !(key in object)) return !1;
} else {
var stack = new Stack;
if (customizer) var result = customizer(objValue, srcValue, key, object, source, stack);
if (!(undefined === result ? baseIsEqual(srcValue, objValue, 3, customizer, stack) : result)) return !1;
}
}
return !0;
}
function baseIsNative(value) {
return !(!isObject(value) || maskSrcKey && maskSrcKey in value) && (isFunction(value) ? reIsNative : reIsHostCtor).test(toSource(value));
}
function baseIteratee(value) {
return 'function' == typeof value ? value : null == value ? identity : 'object' == typeof value ? isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value) : property(value);
}
function baseKeys(object) {
if (!isPrototype(object)) return nativeKeys(object);
var result = [];
for(var key in Object1(object))hasOwnProperty.call(object, key) && 'constructor' != key && result.push(key);
return result;
}
function baseLt(value, other) {
return value < other;
}
function baseMap(collection, iteratee) {
var index = -1, result = isArrayLike(collection) ? Array1(collection.length) : [];
return baseEach(collection, function(value, key, collection) {
result[++index] = iteratee(value, key, collection);
}), result;
}
function baseMatches(source) {
var matchData = getMatchData(source);
return 1 == matchData.length && matchData[0][2] ? matchesStrictComparable(matchData[0][0], matchData[0][1]) : function(object) {
return object === source || baseIsMatch(object, source, matchData);
};
}
function baseMatchesProperty(path, srcValue) {
var value;
return isKey(path) && (value = srcValue) == value && !isObject(value) ? matchesStrictComparable(toKey(path), srcValue) : function(object) {
var objValue = get(object, path);
return undefined === objValue && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, 3);
};
}
function baseMerge(object, source, srcIndex, customizer, stack) {
object !== source && baseFor(source, function(srcValue, key) {
if (stack || (stack = new Stack), isObject(srcValue)) !function(object, source, key, srcIndex, mergeFunc, customizer, stack) {
var objValue = safeGet(object, key), srcValue = safeGet(source, key), stacked = stack.get(srcValue);
if (stacked) {
assignMergeValue(object, key, stacked);
return;
}
var newValue = customizer ? customizer(objValue, srcValue, key + '', object, source, stack) : undefined, isCommon = undefined === newValue;
if (isCommon) {
var isArr = isArray(srcValue), isBuff = !isArr && isBuffer(srcValue), isTyped = !isArr && !isBuff && isTypedArray(srcValue);
newValue = srcValue, isArr || isBuff || isTyped ? isArray(objValue) ? newValue = objValue : isArrayLikeObject(objValue) ? newValue = copyArray(objValue) : isBuff ? (isCommon = !1, newValue = cloneBuffer(srcValue, !0)) : isTyped ? (isCommon = !1, newValue = cloneTypedArray(srcValue, !0)) : newValue = [] : isPlainObject(srcValue) || isArguments(srcValue) ? (newValue = objValue, isArguments(objValue) ? newValue = toPlainObject(objValue) : (!isObject(objValue) || isFunction(objValue)) && (newValue = initCloneObject(srcValue))) : isCommon = !1;
}
isCommon && (stack.set(srcValue, newValue), mergeFunc(newValue, srcValue, srcIndex, customizer, stack), stack.delete(srcValue)), assignMergeValue(object, key, newValue);
}(object, source, key, srcIndex, baseMerge, customizer, stack);
else {
var newValue = customizer ? customizer(safeGet(object, key), srcValue, key + '', object, source, stack) : undefined;
undefined === newValue && (newValue = srcValue), assignMergeValue(object, key, newValue);
}
}, keysIn);
}
function baseNth(array, n) {
var length = array.length;
if (length) return isIndex(n += n < 0 ? length : 0, length) ? array[n] : undefined;
}
function baseOrderBy(collection, iteratees, orders) {
iteratees = iteratees.length ? arrayMap(iteratees, function(iteratee) {
return isArray(iteratee) ? function(value) {
return baseGet(value, 1 === iteratee.length ? iteratee[0] : iteratee);
} : iteratee;
}) : [
identity
];
var index = -1;
return iteratees = arrayMap(iteratees, baseUnary(getIteratee())), function(array, comparer) {
var length = array.length;
for(array.sort(comparer); length--;)array[length] = array[length].value;
return array;
}(baseMap(collection, function(value, key, collection) {
return {
criteria: arrayMap(iteratees, function(iteratee) {
return iteratee(value);
}),
index: ++index,
value: value
};
}), function(object, other) {
return function(object, other, orders) {
for(var index = -1, objCriteria = object.criteria, othCriteria = other.criteria, length = objCriteria.length, ordersLength = orders.length; ++index < length;){
var result = compareAscending(objCriteria[index], othCriteria[index]);
if (result) {
if (index >= ordersLength) return result;
return result * ('desc' == orders[index] ? -1 : 1);
}
}
return object.index - other.index;
}(object, other, orders);
});
}
function basePickBy(object, paths, predicate) {
for(var index = -1, length = paths.length, result = {}; ++index < length;){
var path = paths[index], value = baseGet(object, path);
predicate(value, path) && baseSet(result, castPath(path, object), value);
}
return result;
}
function basePullAll(array, values, iteratee, comparator) {
var indexOf = comparator ? baseIndexOfWith : baseIndexOf, index = -1, length = values.length, seen = array;
for(array === values && (values = copyArray(values)), iteratee && (seen = arrayMap(array, baseUnary(iteratee))); ++index < length;)for(var fromIndex = 0, value = values[index], computed = iteratee ? iteratee(value) : value; (fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1;)seen !== array && splice.call(seen, fromIndex, 1), splice.call(array, fromIndex, 1);
return array;
}
function basePullAt(array, indexes) {
for(var length = array ? indexes.length : 0, lastIndex = length - 1; length--;){
var index = indexes[length];
if (length == lastIndex || index !== previous) {
var previous = index;
isIndex(index) ? splice.call(array, index, 1) : baseUnset(array, index);
}
}
return array;
}
function baseRandom(lower, upper) {
return lower + nativeFloor(nativeRandom() * (upper - lower + 1));
}
function baseRepeat(string, n) {
var result = '';
if (!string || n < 1 || n > 9007199254740991) return result;
do n % 2 && (result += string), (n = nativeFloor(n / 2)) && (string += string);
while (n)
return result;
}
function baseRest(func, start) {
return setToString(overRest(func, start, identity), func + '');
}
function baseSample(collection) {
return arraySample(values(collection));
}
function baseSampleSize(collection, n) {
var array = values(collection);
return shuffleSelf(array, baseClamp(n, 0, array.length));
}
function baseSet(object, path, value, customizer) {
if (!isObject(object)) return object;
path = castPath(path, object);
for(var index = -1, length = path.length, lastIndex = length - 1, nested = object; null != nested && ++index < length;){
var key = toKey(path[index]), newValue = value;
if ('__proto__' === key || 'constructor' === key || 'prototype' === key) break;
if (index != lastIndex) {
var objValue = nested[key];
newValue = customizer ? customizer(objValue, key, nested) : undefined, undefined === newValue && (newValue = isObject(objValue) ? objValue : isIndex(path[index + 1]) ? [] : {});
}
assignValue(nested, key, newValue), nested = nested[key];
}
return object;
}
var baseSetData = metaMap ? function(func, data) {
return metaMap.set(func, data), func;
} : identity, baseSetToString = defineProperty ? function(func, string) {
return defineProperty(func, 'toString', {
configurable: !0,
enumerable: !1,
value: constant(string),
writable: !0
});
} : identity;
function baseShuffle(collection) {
return shuffleSelf(values(collection));
}
function baseSlice(array, start, end) {
var index = -1, length = array.length;
start < 0 && (start = -start > length ? 0 : length + start), (end = end > length ? length : end) < 0 && (end += length), length = start > end ? 0 : end - start >>> 0, start >>>= 0;
for(var result = Array1(length); ++index < length;)result[index] = array[index + start];
return result;
}
function baseSome(collection, predicate) {
var result;
return baseEach(collection, function(value, index, collection) {
return !(result = predicate(value, index, collection));
}), !!result;
}
function baseSortedIndex(array, value, retHighest) {
var low = 0, high = null == array ? low : array.length;
if ('number' == typeof value && value == value && high <= 2147483647) {
for(; low < high;){
var mid = low + high >>> 1, computed = array[mid];
null !== computed && !isSymbol(computed) && (retHighest ? computed <= value : computed < value) ? low = mid + 1 : high = mid;
}
return high;
}
return baseSortedIndexBy(array, value, identity, retHighest);
}
function baseSortedIndexBy(array, value, iteratee, retHighest) {
var low = 0, high = null == array ? 0 : array.length;
if (0 === high) return 0;
for(var valIsNaN = (value = iteratee(value)) != value, valIsNull = null === value, valIsSymbol = isSymbol(value), valIsUndefined = undefined === value; low < high;){
var mid = nativeFloor((low + high) / 2), computed = iteratee(array[mid]), othIsDefined = undefined !== computed, othIsNull = null === computed, othIsReflexive = computed == computed, othIsSymbol = isSymbol(computed);
if (valIsNaN) var setLow = retHighest || othIsReflexive;
else setLow = valIsUndefined ? othIsReflexive && (retHighest || othIsDefined) : valIsNull ? othIsReflexive && othIsDefined && (retHighest || !othIsNull) : valIsSymbol ? othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol) : !othIsNull && !othIsSymbol && (retHighest ? computed <= value : computed < value);
setLow ? low = mid + 1 : high = mid;
}
return nativeMin(high, 4294967294);
}
function baseSortedUniq(array, iteratee) {
for(var index = -1, length = array.length, resIndex = 0, result = []; ++index < length;){
var value = array[index], computed = iteratee ? iteratee(value) : value;
if (!index || !eq(computed, seen)) {
var seen = computed;
result[resIndex++] = 0 === value ? 0 : value;
}
}
return result;
}
function baseToNumber(value) {
return 'number' == typeof value ? value : isSymbol(value) ? NAN : +value;
}
function baseToString(value) {
if ('string' == typeof value) return value;
if (isArray(value)) return arrayMap(value, baseToString) + '';
if (isSymbol(value)) return symbolToString ? symbolToString.call(value) : '';
var result = value + '';
return '0' == result && 1 / value == -INFINITY ? '-0' : result;
}
function baseUniq(array, iteratee, comparator) {
var index = -1, includes = arrayIncludes, length = array.length, isCommon = !0, result = [], seen = result;
if (comparator) isCommon = !1, includes = arrayIncludesWith;
else if (length >= 200) {
var set = iteratee ? null : createSet(array);
if (set) return setToArray(set);
isCommon = !1, includes = cacheHas, seen = new SetCache;
} else seen = iteratee ? [] : result;
outer: for(; ++index < length;){
var value = array[index], computed = iteratee ? iteratee(value) : value;
if (value = comparator || 0 !== value ? value : 0, isCommon && computed == computed) {
for(var seenIndex = seen.length; seenIndex--;)if (seen[seenIndex] === computed) continue outer;
iteratee && seen.push(computed), result.push(value);
} else includes(seen, computed, comparator) || (seen !== result && seen.push(computed), result.push(value));
}
return result;
}
function baseUnset(object, path) {
return path = castPath(path, object), null == (object = parent(object, path)) || delete object[toKey(last(path))];
}
function baseUpdate(object, path, updater, customizer) {
return baseSet(object, path, updater(baseGet(object, path)), customizer);
}
function baseWhile(array, predicate, isDrop, fromRight) {
for(var length = array.length, index = fromRight ? length : -1; (fromRight ? index-- : ++index < length) && predicate(array[index], index, array););
return isDrop ? baseSlice(array, fromRight ? 0 : index, fromRight ? index + 1 : length) : baseSlice(array, fromRight ? index + 1 : 0, fromRight ? length : index);
}
function baseWrapperValue(value, actions) {
var result = value;
return result instanceof LazyWrapper && (result = result.value()), arrayReduce(actions, function(result, action) {
return action.func.apply(action.thisArg, arrayPush([
result
], action.args));
}, result);
}
function baseXor(arrays, iteratee, comparator) {
var length = arrays.length;
if (length < 2) return length ? baseUniq(arrays[0]) : [];
for(var index = -1, result = Array1(length); ++index < length;)for(var array = arrays[index], othIndex = -1; ++othIndex < length;)othIndex != index && (result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator));
return baseUniq(baseFlatten(result, 1), iteratee, comparator);
}
function baseZipObject(props, values, assignFunc) {
for(var index = -1, length = props.length, valsLength = values.length, result = {}; ++index < length;){
var value = index < valsLength ? values[index] : undefined;
assignFunc(result, props[index], value);
}
return result;
}
function castArrayLikeObject(value) {
return isArrayLikeObject(value) ? value : [];
}
function castFunction(value) {
return 'function' == typeof value ? value : identity;
}
function castPath(value, object) {
return isArray(value) ? value : isKey(value, object) ? [
value
] : stringToPath(toString(value));
}
function castSlice(array, start, end) {
var length = array.length;
return end = undefined === end ? length : end, !start && end >= length ? array : baseSlice(array, start, end);
}
var clearTimeout = ctxClearTimeout || function(id) {
return root.clearTimeout(id);
};
function cloneBuffer(buffer, isDeep) {
if (isDeep) return buffer.slice();
var length = buffer.length, result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);
return buffer.copy(result), result;
}
function cloneArrayBuffer(arrayBuffer) {
var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
return new Uint8Array(result).set(new Uint8Array(arrayBuffer)), result;
}
function cloneTypedArray(typedArray, isDeep) {
var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
}
function compareAscending(value, other) {
if (value !== other) {
var valIsDefined = undefined !== value, valIsNull = null === value, valIsReflexive = value == value, valIsSymbol = isSymbol(value), othIsDefined = undefined !== other, othIsNull = null === other, othIsReflexive = other == other, othIsSymbol = isSymbol(other);
if (!othIsNull && !othIsSymbol && !valIsSymbol && value > other || valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol || valIsNull && othIsDefined && othIsReflexive || !valIsDefined && othIsReflexive || !valIsReflexive) return 1;
if (!valIsNull && !valIsSymbol && !othIsSymbol && value < other || othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol || othIsNull && valIsDefined && valIsReflexive || !othIsDefined && valIsReflexive || !othIsReflexive) return -1;
}
return 0;
}
function composeArgs(args, partials, holders, isCurried) {
for(var argsIndex = -1, argsLength = args.length, holdersLength = holders.length, leftIndex = -1, leftLength = partials.length, rangeLength = nativeMax(argsLength - holdersLength, 0), result = Array1(leftLength + rangeLength), isUncurried = !isCurried; ++leftIndex < leftLength;)result[leftIndex] = partials[leftIndex];
for(; ++argsIndex < holdersLength;)(isUncurried || argsIndex < argsLength) && (result[holders[argsIndex]] = args[argsIndex]);
for(; rangeLength--;)result[leftIndex++] = args[argsIndex++];
return result;
}
function composeArgsRight(args, partials, holders, isCurried) {
for(var argsIndex = -1, argsLength = args.length, holdersIndex = -1, holdersLength = holders.length, rightIndex = -1, rightLength = partials.length, rangeLength = nativeMax(argsLength - holdersLength, 0), result = Array1(rangeLength + rightLength), isUncurried = !isCurried; ++argsIndex < rangeLength;)result[argsIndex] = args[argsIndex];
for(var offset = argsIndex; ++rightIndex < rightLength;)result[offset + rightIndex] = partials[rightIndex];
for(; ++holdersIndex < holdersLength;)(isUncurried || argsIndex < argsLength) && (result[offset + holders[holdersIndex]] = args[argsIndex++]);
return result;
}
function copyArray(source, array) {
var index = -1, length = source.length;
for(array || (array = Array1(length)); ++index < length;)array[index] = source[index];
return array;
}
function copyObject(source, props, object, customizer) {
var isNew = !object;
object || (object = {});
for(var index = -1, length = props.length; ++index < length;){
var key = props[index], newValue = customizer ? customizer(object[key], source[key], key, object, source) : undefined;
undefined === newValue && (newValue = source[key]), isNew ? baseAssignValue(object, key, newValue) : assignValue(object, key, newValue);
}
return object;
}
function createAggregator(setter, initializer) {
return function(collection, iteratee) {
var func = isArray(collection) ? arrayAggregator : baseAggregator, accumulator = initializer ? initializer() : {};
return func(collection, setter, getIteratee(iteratee, 2), accumulator);
};
}
function createAssigner(assigner) {
return baseRest(function(object, sources) {
var index = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : undefined, guard = length > 2 ? sources[2] : undefined;
for(customizer = assigner.length > 3 && 'function' == typeof customizer ? (length--, customizer) : undefined, guard && isIterateeCall(sources[0], sources[1], guard) && (customizer = length < 3 ? undefined : customizer, length = 1), object = Object1(object); ++index < length;){
var source = sources[index];
source && assigner(object, source, index, customizer);
}
return object;
});
}
function createBaseEach(eachFunc, fromRight) {
return function(collection, iteratee) {
if (null == collection) return collection;
if (!isArrayLike(collection)) return eachFunc(collection, iteratee);
for(var length = collection.length, index = fromRight ? length : -1, iterable = Object1(collection); (fromRight ? index-- : ++index < length) && !1 !== iteratee(iterable[index], index, iterable););
return collection;
};
}
function createBaseFor(fromRight) {
return function(object, iteratee, keysFunc) {
for(var index = -1, iterable = Object1(object), props = keysFunc(object), length = props.length; length--;){
var key = props[fromRight ? length : ++index];
if (!1 === iteratee(iterable[key], key, iterable)) break;
}
return object;
};
}
function createCaseFirst(methodName) {
return function(string) {
var strSymbols = hasUnicode(string = toString(string)) ? stringToArray(string) : undefined, chr = strSymbols ? strSymbols[0] : string.charAt(0), trailing = strSymbols ? castSlice(strSymbols, 1).join('') : string.slice(1);
return chr[methodName]() + trailing;
};
}
function createCompounder(callback) {
return function(string) {
return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');
};
}
function createCtor(Ctor) {
return function() {
var args = arguments;
switch(args.length){
case 0:
return new Ctor;
case 1:
return new Ctor(args[0]);
case 2:
return new Ctor(args[0], args[1]);
case 3:
return new Ctor(args[0], args[1], args[2]);
case 4:
return new Ctor(args[0], args[1], args[2], args[3]);
case 5:
return new Ctor(args[0], args[1], args[2], args[3], args[4]);
case 6:
return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);
case 7:
return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
}
var thisBinding = baseCreate(Ctor.prototype), result = Ctor.apply(thisBinding, args);
return isObject(result) ? result : thisBinding;
};
}
function createFind(findIndexFunc) {
return function(collection, predicate, fromIndex) {
var iterable = Object1(collection);
if (!isArrayLike(collection)) {
var iteratee = getIteratee(predicate, 3);
collection = keys(collection), predicate = function(key) {
return iteratee(iterable[key], key, iterable);
};
}
var index = findIndexFunc(collection, predicate, fromIndex);
return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;
};
}
function createFlow(fromRight) {
return flatRest(function(funcs) {
var length = funcs.length, index = length, prereq = LodashWrapper.prototype.thru;
for(fromRight && funcs.reverse(); index--;){
var func = funcs[index];
if ('function' != typeof func) throw new TypeError(FUNC_ERROR_TEXT);
if (prereq && !wrapper && 'wrapper' == getFuncName(func)) var wrapper = new LodashWrapper([], !0);
}
for(index = wrapper ? index : length; ++index < length;){
var funcName = getFuncName(func = funcs[index]), data = 'wrapper' == funcName ? getData(func) : undefined;
wrapper = data && isLaziable(data[0]) && 424 == data[1] && !data[4].length && 1 == data[9] ? wrapper[getFuncName(data[0])].apply(wrapper, data[3]) : 1 == func.length && isLaziable(func) ? wrapper[funcName]() : wrapper.thru(func);
}
return function() {
var args = arguments, value = args[0];
if (wrapper && 1 == args.length && isArray(value)) return wrapper.plant(value).value();
for(var index = 0, result = length ? funcs[index].apply(this, args) : value; ++index < length;)result = funcs[index].call(this, result);
return result;
};
});
}
function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
var isAry = 128 & bitmask, isBind = 1 & bitmask, isBindKey = 2 & bitmask, isCurried = 24 & bitmask, isFlip = 512 & bitmask, Ctor = isBindKey ? undefined : createCtor(func);
return function wrapper() {
for(var length = arguments.length, args = Array1(length), index = length; index--;)args[index] = arguments[index];
if (isCurried) var placeholder = getHolder(wrapper), holdersCount = function(array, placeholder) {
for(var length = array.length, result = 0; length--;)array[length] === placeholder && ++result;
return result;
}(args, placeholder);
if (partials && (args = composeArgs(args, partials, holders, isCurried)), partialsRight && (args = composeArgsRight(args, partialsRight, holdersRight, isCurried)), length -= holdersCount, isCurried && length < arity) {
var newHolders = replaceHolders(args, placeholder);
return createRecurry(func, bitmask, createHybrid, wrapper.placeholder, thisArg, args, newHolders, argPos, ary, arity - length);
}
var thisBinding = isBind ? thisArg : this, fn = isBindKey ? thisBinding[func] : func;
return length = args.length, argPos ? args = function(array, indexes) {
for(var arrLength = array.length, length = nativeMin(indexes.length, arrLength), oldArray = copyArray(array); length--;){
var index = indexes[length];
array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;
}
return array;
}(args, argPos) : isFlip && length > 1 && args.reverse(), isAry && ary < length && (args.length = ary), this && this !== root && this instanceof wrapper && (fn = Ctor || createCtor(fn)), fn.apply(thisBinding, args);
};
}
function createInverter(setter, toIteratee) {
return function(object, iteratee) {
var iteratee1, accumulator;
return iteratee1 = toIteratee(iteratee), accumulator = {}, baseForOwn(object, function(value, key, object) {
setter(accumulator, iteratee1(value), key, object);
}), accumulator;
};
}
function createMathOperation(operator, defaultValue) {
return function(value, other) {
var result;
if (undefined === value && undefined === other) return defaultValue;
if (undefined !== value && (result = value), undefined !== other) {
if (undefined === result) return other;
'string' == typeof value || 'string' == typeof other ? (value = baseToString(value), other = baseToString(other)) : (value = baseToNumber(value), other = baseToNumber(other)), result = operator(value, other);
}
return result;
};
}
function createOver(arrayFunc) {
return flatRest(function(iteratees) {
return iteratees = arrayMap(iteratees, baseUnary(getIteratee())), baseRest(function(args) {
var thisArg = this;
return arrayFunc(iteratees, function(iteratee) {
return apply(iteratee, thisArg, args);
});
});
});
}
function createPadding(length, chars) {
var charsLength = (chars = undefined === chars ? ' ' : baseToString(chars)).length;
if (charsLength < 2) return charsLength ? baseRepeat(chars, length) : chars;
var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));
return hasUnicode(chars) ? castSlice(stringToArray(result), 0, length).join('') : result.slice(0, length);
}
function createRange(fromRight) {
return function(start, end, step) {
return step && 'number' != typeof step && isIterateeCall(start, end, step) && (end = step = undefined), start = toFinite(start), undefined === end ? (end = start, start = 0) : end = toFinite(end), step = undefined === step ? start < end ? 1 : -1 : toFinite(step), function(start, end, step, fromRight) {
for(var index = -1, length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), result = Array1(length); length--;)result[fromRight ? length : ++index] = start, start += step;
return result;
}(start, end, step, fromRight);
};
}
function createRelationalOperation(operator) {
return function(value, other) {
return 'string' == typeof value && 'string' == typeof other || (value = toNumber(value), other = toNumber(other)), operator(value, other);
};
}
function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {
var isCurry = 8 & bitmask, newHolders = isCurry ? holders : undefined, newHoldersRight = isCurry ? undefined : holders, newPartials = isCurry ? partials : undefined, newPartialsRight = isCurry ? undefined : partials;
bitmask |= isCurry ? 32 : 64, 4 & (bitmask &= ~(isCurry ? 64 : 32)) || (bitmask &= -4);
var newData = [
func,
bitmask,
thisArg,
newPartials,
newHolders,
newPartialsRight,
newHoldersRight,
argPos,
ary,
arity
], result = wrapFunc.apply(undefined, newData);
return isLaziable(func) && setData(result, newData), result.placeholder = placeholder, setWrapToString(result, func, bitmask);
}
function createRound(methodName) {
var func = Math[methodName];
return function(number, precision) {
if (number = toNumber(number), (precision = null == precision ? 0 : nativeMin(toInteger(precision), 292)) && nativeIsFinite(number)) {
var pair = (toString(number) + 'e').split('e');
return +((pair = (toString(func(pair[0] + 'e' + (+pair[1] + precision))) + 'e').split('e'))[0] + 'e' + (+pair[1] - precision));
}
return func(number);
};
}
var createSet = Set && 1 / setToArray(new Set([
,
-0
]))[1] == INFINITY ? function(values) {
return new Set(values);
} : noop;
function createToPairs(keysFunc) {
return function(object) {
var index, result, tag = getTag(object);
return tag == mapTag ? mapToArray(object) : tag == setTag ? (index = -1, result = Array(object.size), object.forEach(function(value) {
result[++index] = [
value,
value
];
}), result) : arrayMap(keysFunc(object), function(key) {
return [
key,
object[key]
];
});
};
}
function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {
var isBindKey = 2 & bitmask;
if (!isBindKey && 'function' != typeof func) throw new TypeError(FUNC_ERROR_TEXT);
var length = partials ? partials.length : 0;
if (length || (bitmask &= -97, partials = holders = undefined), ary = undefined === ary ? ary : nativeMax(toInteger(ary), 0), arity = undefined === arity ? arity : toInteger(arity), length -= holders ? holders.length : 0, 64 & bitmask) {
var partialsRight = partials, holdersRight = holders;
partials = holders = undefined;
}
var data = isBindKey ? undefined : getData(func), newData = [
func,
bitmask,
thisArg,
partials,
holders,
partialsRight,
holdersRight,
argPos,
ary,
arity
];
if (data && function(data, source) {
var bitmask = data[1], srcBitmask = source[1], newBitmask = bitmask | srcBitmask, isCommon = newBitmask < 131, isCombo = 128 == srcBitmask && 8 == bitmask || 128 == srcBitmask && 256 == bitmask && data[7].length <= source[8] || 384 == srcBitmask && source[7].length <= source[8] && 8 == bitmask;
if (isCommon || isCombo) {
1 & srcBitmask && (data[2] = source[2], newBitmask |= 1 & bitmask ? 0 : 4);
var value = source[3];
if (value) {
var partials = data[3];
data[3] = partials ? composeArgs(partials, value, source[4]) : value, data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];
}
(value = source[5]) && (partials = data[5], data[5] = partials ? composeArgsRight(partials, value, source[6]) : value, data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]), (value = source[7]) && (data[7] = value), 128 & srcBitmask && (data[8] = null == data[8] ? source[8] : nativeMin(data[8], source[8])), null == data[9] && (data[9] = source[9]), data[0] = source[0], data[1] = newBitmask;
}
}(newData, data), func = newData[0], bitmask = newData[1], thisArg = newData[2], partials = newData[3], holders = newData[4], (arity = newData[9] = undefined === newData[9] ? isBindKey ? 0 : func.length : nativeMax(newData[9] - length, 0)) || !(24 & bitmask) || (bitmask &= -25), bitmask && 1 != bitmask) 8 == bitmask || 16 == bitmask ? (func1 = func, bitmask1 = bitmask, arity1 = arity, Ctor = createCtor(func1), result = function wrapper() {
for(var length = arguments.length, args = Array1(length), index = length, placeholder = getHolder(wrapper); index--;)args[index] = arguments[index];
var holders = length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder ? [] : replaceHolders(args, placeholder);
return (length -= holders.length) < arity1 ? createRecurry(func1, bitmask1, createHybrid, wrapper.placeholder, undefined, args, holders, undefined, undefined, arity1 - length) : apply(this && this !== root && this instanceof wrapper ? Ctor : func1, this, args);
}) : 32 != bitmask && 33 != bitmask || holders.length ? result = createHybrid.apply(undefined, newData) : (func2 = func, bitmask2 = bitmask, thisArg1 = thisArg, partials1 = partials, isBind = 1 & bitmask2, Ctor1 = createCtor(func2), result = function wrapper() {
for(var argsIndex = -1, argsLength = arguments.length, leftIndex = -1, leftLength = partials1.length, args = Array1(leftLength + argsLength), fn = this && this !== root && this instanceof wrapper ? Ctor1 : func2; ++leftIndex < leftLength;)args[leftIndex] = partials1[leftIndex];
for(; argsLength--;)args[leftIndex++] = arguments[++argsIndex];
return apply(fn, isBind ? thisArg1 : this, args);
});
else var func1, bitmask1, arity1, Ctor, func2, bitmask2, thisArg1, partials1, isBind, Ctor1, func3, bitmask3, thisArg2, isBind1, Ctor2, result = (func3 = func, bitmask3 = bitmask, thisArg2 = thisArg, isBind1 = 1 & bitmask3, Ctor2 = createCtor(func3), function wrapper() {
return (this && this !== root && this instanceof wrapper ? Ctor2 : func3).apply(isBind1 ? thisArg2 : this, arguments);
});
return setWrapToString((data ? baseSetData : setData)(result, newData), func, bitmask);
}
function customDefaultsAssignIn(objValue, srcValue, key, object) {
return undefined === objValue || eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key) ? srcValue : objValue;
}
function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {
return isObject(objValue) && isObject(srcValue) && (stack.set(srcValue, objValue), baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack), stack.delete(srcValue)), objValue;
}
function customOmitClone(value) {
return isPlainObject(value) ? undefined : value;
}
function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
var isPartial = 1 & bitmask, arrLength = array.length, othLength = other.length;
if (arrLength != othLength && !(isPartial && othLength > arrLength)) return !1;
var arrStacked = stack.get(array), othStacked = stack.get(other);
if (arrStacked && othStacked) return arrStacked == other && othStacked == array;
var index = -1, result = !0, seen = 2 & bitmask ? new SetCache : undefined;
for(stack.set(array, other), stack.set(other, array); ++index < arrLength;){
var arrValue = array[index], othValue = other[index];
if (customizer) var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack);
if (undefined !== compared) {
if (compared) continue;
result = !1;
break;
}
if (seen) {
if (!arraySome(other, function(othValue, othIndex) {
if (!cacheHas(seen, othIndex) && (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) return seen.push(othIndex);
})) {
result = !1;
break;
}
} else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
result = !1;
break;
}
}
return stack.delete(array), stack.delete(other), result;
}
function flatRest(func) {
return setToString(overRest(func, undefined, flatten), func + '');
}
function getAllKeys(object) {
return baseGetAllKeys(object, keys, getSymbols);
}
function getAllKeysIn(object) {
return baseGetAllKeys(object, keysIn, getSymbolsIn);
}
var getData = metaMap ? function(func) {
return metaMap.get(func);
} : noop;
function getFuncName(func) {
for(var result = func.name + '', array = realNames[result], length = hasOwnProperty.call(realNames, result) ? array.length : 0; length--;){
var data = array[length], otherFunc = data.func;
if (null == otherFunc || otherFunc == func) return data.name;
}
return result;
}
function getHolder(func) {
return (hasOwnProperty.call(lodash, 'placeholder') ? lodash : func).placeholder;
}
function getIteratee() {
var result = lodash.iteratee || iteratee;
return result = result === iteratee ? baseIteratee : result, arguments.length ? result(arguments[0], arguments[1]) : result;
}
function getMapData(map, key) {
var type, data = map.__data__;
return ('string' == (type = typeof key) || 'number' == type || 'symbol' == type || 'boolean' == type ? '__proto__' !== key : null === key) ? data['string' == typeof key ? 'string' : 'hash'] : data.map;
}
function getMatchData(object) {
for(var result = keys(object), length = result.length; length--;){
var key = result[length], value = object[key];
result[length] = [
key,
value,
value == value && !isObject(value)
];
}
return result;
}
function getNative(object, key) {
var value = null == object ? undefined : object[key];
return baseIsNative(value) ? value : undefined;
}
var getSymbols = nativeGetSymbols ? function(object) {
return null == object ? [] : arrayFilter(nativeGetSymbols(object = Object1(object)), function(symbol) {
return propertyIsEnumerable.call(object, symbol);
});
} : stubArray, getSymbolsIn = nativeGetSymbols ? function(object) {
for(var result = []; object;)arrayPush(result, getSymbols(object)), object = getPrototype(object);
return result;
} : stubArray, getTag = baseGetTag;
function hasPath(object, path, hasFunc) {
path = castPath(path, object);
for(var index = -1, length = path.length, result = !1; ++index < length;){
var key = toKey(path[index]);
if (!(result = null != object && hasFunc(object, key))) break;
object = object[key];
}
return result || ++index != length ? result : !!(length = null == object ? 0 : object.length) && isLength(length) && isIndex(key, length) && (isArray(object) || isArguments(object));
}
function initCloneObject(object) {
return 'function' != typeof object.constructor || isPrototype(object) ? {} : baseCreate(getPrototype(object));
}
function isFlattenable(value) {
return isArray(value) || isArguments(value) || !!(spreadableSymbol && value && value[spreadableSymbol]);
}
function isIndex(value, length) {
var type = typeof value;
return !!(length = null == length ? 9007199254740991 : length) && ('number' == type || 'symbol' != type && reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length;
}
function isIterateeCall(value, index, object) {
if (!isObject(object)) return !1;
var type = typeof index;
return ('number' == type ? !!(isArrayLike(object) && isIndex(index, object.length)) : 'string' == type && index in object) && eq(object[index], value);
}
function isKey(value, object) {
if (isArray(value)) return !1;
var type = typeof value;
return !!('number' == type || 'symbol' == type || 'boolean' == type || null == value || isSymbol(value)) || reIsPlainProp.test(value) || !reIsDeepProp.test(value) || null != object && value in Object1(object);
}
function isLaziable(func) {
var funcName = getFuncName(func), other = lodash[funcName];
if ('function' != typeof other || !(funcName in LazyWrapper.prototype)) return !1;
if (func === other) return !0;
var data = getData(other);
return !!data && func === data[0];
}
(DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map && getTag(new Map) != mapTag || Promise && getTag(Promise.resolve()) != promiseTag || Set && getTag(new Set) != setTag || WeakMap && getTag(new WeakMap) != weakMapTag) && (getTag = function(value) {
var result = baseGetTag(value), Ctor = result == objectTag ? value.constructor : undefined, ctorString = Ctor ? toSource(Ctor) : '';
if (ctorString) switch(ctorString){
case dataViewCtorString:
return dataViewTag;
case mapCtorString:
return mapTag;
case promiseCtorString:
return promiseTag;
case setCtorString:
return setTag;
case weakMapCtorString:
return weakMapTag;
}
return result;
});
var isMaskable = coreJsData ? isFunction : stubFalse;
function isPrototype(value) {
var Ctor = value && value.constructor, proto = 'function' == typeof Ctor && Ctor.prototype || objectProto;
return value === proto;
}
function matchesStrictComparable(key, srcValue) {
return function(object) {
return null != object && object[key] === srcValue && (undefined !== srcValue || key in Object1(object));
};
}
function overRest(func, start, transform) {
return start = nativeMax(undefined === start ? func.length - 1 : start, 0), function() {
for(var args = arguments, index = -1, length = nativeMax(args.length - start, 0), array = Array1(length); ++index < length;)array[index] = args[start + index];
index = -1;
for(var otherArgs = Array1(start + 1); ++index < start;)otherArgs[index] = args[index];
return otherArgs[start] = transform(array), apply(func, this, otherArgs);
};
}
function parent(object, path) {
return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));
}
function safeGet(object, key) {
if (('constructor' !== key || 'function' != typeof object[key]) && '__proto__' != key) return object[key];
}
var setData = shortOut(baseSetData), setTimeout = ctxSetTimeout || function(func, wait) {
return root.setTimeout(func, wait);
}, setToString = shortOut(baseSetToString);
function setWrapToString(wrapper, reference, bitmask) {
var details, match, source = reference + '';
return setToString(wrapper, function(source, details) {
var length = details.length;
if (!length) return source;
var lastIndex = length - 1;
return details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex], details = details.join(length > 2 ? ', ' : ' '), source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n');
}(source, (details = (match = source.match(reWrapDetails)) ? match[1].split(reSplitDetails) : [], arrayEach(wrapFlags, function(pair) {
var value = '_.' + pair[0];
bitmask & pair[1] && !arrayIncludes(details, value) && details.push(value);
}), details.sort())));
}
function shortOut(func) {
var count = 0, lastCalled = 0;
return function() {
var stamp = nativeNow(), remaining = 16 - (stamp - lastCalled);
if (lastCalled = stamp, remaining > 0) {
if (++count >= 800) return arguments[0];
} else count = 0;
return func.apply(undefined, arguments);
};
}
function shuffleSelf(array, size) {
var index = -1, length = array.length, lastIndex = length - 1;
for(size = undefined === size ? length : size; ++index < size;){
var rand = baseRandom(index, lastIndex), value = array[rand];
array[rand] = array[index], array[index] = value;
}
return array.length = size, array;
}
var stringToPath = (cache = (result = memoize(function(string) {
var result = [];
return 46 === string.charCodeAt(0) && result.push(''), string.replace(rePropName, function(match, number, quote, subString) {
result.push(quote ? subString.replace(reEscapeChar, '$1') : number || match);
}), result;
}, function(key) {
return 500 === cache.size && cache.clear(), key;
})).cache, result);
function toKey(value) {
if ('string' == typeof value || isSymbol(value)) return value;
var result = value + '';
return '0' == result && 1 / value == -INFINITY ? '-0' : result;
}
function toSource(func) {
if (null != func) {
try {
return funcToString.call(func);
} catch (e) {}
try {
return func + '';
} catch (e) {}
}
return '';
}
function wrapperClone(wrapper) {
if (wrapper instanceof LazyWrapper) return wrapper.clone();
var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);
return result.__actions__ = copyArray(wrapper.__actions__), result.__index__ = wrapper.__index__, result.__values__ = wrapper.__values__, result;
}
var difference = baseRest(function(array, values) {
return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, !0)) : [];
}), differenceBy = baseRest(function(array, values) {
var iteratee = last(values);
return isArrayLikeObject(iteratee) && (iteratee = undefined), isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, !0), getIteratee(iteratee, 2)) : [];
}), differenceWith = baseRest(function(array, values) {
var comparator = last(values);
return isArrayLikeObject(comparator) && (comparator = undefined), isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, !0), undefined, comparator) : [];
});
function findIndex(array, predicate, fromIndex) {
var length = null == array ? 0 : array.length;
if (!length) return -1;
var index = null == fromIndex ? 0 : toInteger(fromIndex);
return index < 0 && (index = nativeMax(length + index, 0)), baseFindIndex(array, getIteratee(predicate, 3), index);
}
function findLastIndex(array, predicate, fromIndex) {
var length = null == array ? 0 : array.length;
if (!length) return -1;
var index = length - 1;
return undefined !== fromIndex && (index = toInteger(fromIndex), index = fromIndex < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1)), baseFindIndex(array, getIteratee(predicate, 3), index, !0);
}
function flatten(array) {
return (null == array ? 0 : array.length) ? baseFlatten(array, 1) : [];
}
function head(array) {
return array && array.length ? array[0] : undefined;
}
var intersection = baseRest(function(arrays) {
var mapped = arrayMap(arrays, castArrayLikeObject);
return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped) : [];
}), intersectionBy = baseRest(function(arrays) {
var iteratee = last(arrays), mapped = arrayMap(arrays, castArrayLikeObject);
return iteratee === last(mapped) ? iteratee = undefined : mapped.pop(), mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, getIteratee(iteratee, 2)) : [];
}), intersectionWith = baseRest(function(arrays) {
var comparator = last(arrays), mapped = arrayMap(arrays, castArrayLikeObject);
return (comparator = 'function' == typeof comparator ? comparator : undefined) && mapped.pop(), mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, undefined, comparator) : [];
});
function last(array) {
var length = null == array ? 0 : array.length;
return length ? array[length - 1] : undefined;
}
var pull = baseRest(pullAll);
function pullAll(array, values) {
return array && array.length && values && values.length ? basePullAll(array, values) : array;
}
var pullAt = flatRest(function(array, indexes) {
var length = null == array ? 0 : array.length, result = baseAt(array, indexes);
return basePullAt(array, arrayMap(indexes, function(index) {
return isIndex(index, length) ? +index : index;
}).sort(compareAscending)), result;
});
function reverse(array) {
return null == array ? array : nativeReverse.call(array);
}
var union = baseRest(function(arrays) {
return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, !0));
}), unionBy = baseRest(function(arrays) {
var iteratee = last(arrays);
return isArrayLikeObject(iteratee) && (iteratee = undefined), baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, !0), getIteratee(iteratee, 2));
}), unionWith = baseRest(function(arrays) {
var comparator = last(arrays);
return comparator = 'function' == typeof comparator ? comparator : undefined, baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, !0), undefined, comparator);
});
function unzip(array) {
if (!(array && array.length)) return [];
var length = 0;
return array = arrayFilter(array, function(group) {
if (isArrayLikeObject(group)) return length = nativeMax(group.length, length), !0;
}), baseTimes(length, function(index) {
return arrayMap(array, baseProperty(index));
});
}
function unzipWith(array, iteratee) {
if (!(array && array.length)) return [];
var result = unzip(array);
return null == iteratee ? result : arrayMap(result, function(group) {
return apply(iteratee, undefined, group);
});
}
var without = baseRest(function(array, values) {
return isArrayLikeObject(array) ? baseDifference(array, values) : [];
}), xor = baseRest(function(arrays) {
return baseXor(arrayFilter(arrays, isArrayLikeObject));
}), xorBy = baseRest(function(arrays) {
var iteratee = last(arrays);
return isArrayLikeObject(iteratee) && (iteratee = undefined), baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));
}), xorWith = baseRest(function(arrays) {
var comparator = last(arrays);
return comparator = 'function' == typeof comparator ? comparator : undefined, baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);
}), zip = baseRest(unzip), zipWith = baseRest(function(arrays) {
var length = arrays.length, iteratee = length > 1 ? arrays[length - 1] : undefined;
return iteratee = 'function' == typeof iteratee ? (arrays.pop(), iteratee) : undefined, unzipWith(arrays, iteratee);
});
function chain(value) {
var result = lodash(value);
return result.__chain__ = !0, result;
}
function thru(value, interceptor) {
return interceptor(value);
}
var wrapperAt = flatRest(function(paths) {
var length = paths.length, start = length ? paths[0] : 0, value = this.__wrapped__, interceptor = function(object) {
return baseAt(object, paths);
};
return !(length > 1) && !this.__actions__.length && value instanceof LazyWrapper && isIndex(start) ? ((value = value.slice(start, +start + (length ? 1 : 0))).__actions__.push({
func: thru,
args: [
interceptor
],
thisArg: undefined
}), new LodashWrapper(value, this.__chain__).thru(function(array) {
return length && !array.length && array.push(undefined), array;
})) : this.thru(interceptor);
}), countBy = createAggregator(function(result, value, key) {
hasOwnProperty.call(result, key) ? ++result[key] : baseAssignValue(result, key, 1);
}), find = createFind(findIndex), findLast = createFind(findLastIndex);
function forEach(collection, iteratee) {
return (isArray(collection) ? arrayEach : baseEach)(collection, getIteratee(iteratee, 3));
}
function forEachRight(collection, iteratee) {
return (isArray(collection) ? arrayEachRight : baseEachRight)(collection, getIteratee(iteratee, 3));
}
var groupBy = createAggregator(function(result, value, key) {
hasOwnProperty.call(result, key) ? result[key].push(value) : baseAssignValue(result, key, [
value
]);
}), invokeMap = baseRest(function(collection, path, args) {
var index = -1, isFunc = 'function' == typeof path, result = isArrayLike(collection) ? Array1(collection.length) : [];
return baseEach(collection, function(value) {
result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);
}), result;
}), keyBy = createAggregator(function(result, value, key) {
baseAssignValue(result, key, value);
});
function map(collection, iteratee) {
return (isArray(collection) ? arrayMap : baseMap)(collection, getIteratee(iteratee, 3));
}
var partition = createAggregator(function(result, value, key) {
result[key ? 0 : 1].push(value);
}, function() {
return [
[],
[]
];
}), sortBy = baseRest(function(collection, iteratees) {
if (null == collection) return [];
var length = iteratees.length;
return length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1]) ? iteratees = [] : length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2]) && (iteratees = [
iteratees[0]
]), baseOrderBy(collection, baseFlatten(iteratees, 1), []);
}), now = ctxNow || function() {
return root.Date.now();
};
function ary(func, n, guard) {
return n = guard ? undefined : n, n = func && null == n ? func.length : n, createWrap(func, 128, undefined, undefined, undefined, undefined, n);
}
function before(n, func) {
var result;
if ('function' != typeof func) throw new TypeError(FUNC_ERROR_TEXT);
return n = toInteger(n), function() {
return --n > 0 && (result = func.apply(this, arguments)), n <= 1 && (func = undefined), result;
};
}
var bind = baseRest(function(func, thisArg, partials) {
var bitmask = 1;
if (partials.length) {
var holders = replaceHolders(partials, getHolder(bind));
bitmask |= 32;
}
return createWrap(func, bitmask, thisArg, partials, holders);
}), bindKey = baseRest(function(object, key, partials) {
var bitmask = 3;
if (partials.length) {
var holders = replaceHolders(partials, getHolder(bindKey));
bitmask |= 32;
}
return createWrap(key, bitmask, object, partials, holders);
});
function debounce(func, wait, options) {
var lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, leading = !1, maxing = !1, trailing = !0;
if ('function' != typeof func) throw new TypeError(FUNC_ERROR_TEXT);
function invokeFunc(time) {
var args = lastArgs, thisArg = lastThis;
return lastArgs = lastThis = undefined, lastInvokeTime = time, result = func.apply(thisArg, args);
}
function shouldInvoke(time) {
var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime;
return undefined === lastCallTime || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;
}
function timerExpired() {
var timeSinceLastCall, timeSinceLastInvoke, timeWaiting, time = now();
if (shouldInvoke(time)) return trailingEdge(time);
timerId = setTimeout(timerExpired, (timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait - timeSinceLastCall, maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting));
}
function trailingEdge(time) {
return (timerId = undefined, trailing && lastArgs) ? invokeFunc(time) : (lastArgs = lastThis = undefined, result);
}
function debounced() {
var time, time1 = now(), isInvoking = shouldInvoke(time1);
if (lastArgs = arguments, lastThis = this, lastCallTime = time1, isInvoking) {
if (undefined === timerId) return lastInvokeTime = time = lastCallTime, timerId = setTimeout(timerExpired, wait), leading ? invokeFunc(time) : result;
if (maxing) return clearTimeout(timerId), timerId = setTimeout(timerExpired, wait), invokeFunc(lastCallTime);
}
return undefined === timerId && (timerId = setTimeout(timerExpired, wait)), result;
}
return wait = toNumber(wait) || 0, isObject(options) && (leading = !!options.leading, maxWait = (maxing = 'maxWait' in options) ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait, trailing = 'trailing' in options ? !!options.trailing : trailing), debounced.cancel = function() {
undefined !== timerId && clearTimeout(timerId), lastInvokeTime = 0, lastArgs = lastCallTime = lastThis = timerId = undefined;
}, debounced.flush = function() {
return undefined === timerId ? result : trailingEdge(now());
}, debounced;
}
var defer = baseRest(function(func, args) {
return baseDelay(func, 1, args);
}), delay = baseRest(function(func, wait, args) {
return baseDelay(func, toNumber(wait) || 0, args);
});
function memoize(func, resolver) {
if ('function' != typeof func || null != resolver && 'function' != typeof resolver) throw new TypeError(FUNC_ERROR_TEXT);
var memoized = function() {
var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache;
if (cache.has(key)) return cache.get(key);
var result = func.apply(this, args);
return memoized.cache = cache.set(key, result) || cache, result;
};
return memoized.cache = new (memoize.Cache || MapCache), memoized;
}
function negate(predicate) {
if ('function' != typeof predicate) throw new TypeError(FUNC_ERROR_TEXT);
return function() {
var args = arguments;
switch(args.length){
case 0:
return !predicate.call(this);
case 1:
return !predicate.call(this, args[0]);
case 2:
return !predicate.call(this, args[0], args[1]);
case 3:
return !predicate.call(this, args[0], args[1], args[2]);
}
return !predicate.apply(this, args);
};
}
memoize.Cache = MapCache;
var overArgs = baseRest(function(func, transforms) {
var funcsLength = (transforms = 1 == transforms.length && isArray(transforms[0]) ? arrayMap(transforms[0], baseUnary(getIteratee())) : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()))).length;
return baseRest(function(args) {
for(var index = -1, length = nativeMin(args.length, funcsLength); ++index < length;)args[index] = transforms[index].call(this, args[index]);
return apply(func, this, args);
});
}), partial = baseRest(function(func, partials) {
var holders = replaceHolders(partials, getHolder(partial));
return createWrap(func, 32, undefined, partials, holders);
}), partialRight = baseRest(function(func, partials) {
var holders = replaceHolders(partials, getHolder(partialRight));
return createWrap(func, 64, undefined, partials, holders);
}), rearg = flatRest(function(func, indexes) {
return createWrap(func, 256, undefined, undefined, undefined, indexes);
});
function eq(value, other) {
return value === other || value != value && other != other;
}
var gt = createRelationalOperation(baseGt), gte = createRelationalOperation(function(value, other) {
return value >= other;
}), isArguments = baseIsArguments(function() {
return arguments;
}()) ? baseIsArguments : function(value) {
return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');
}, isArray = Array1.isArray, isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : function(value) {
return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;
};
function isArrayLike(value) {
return null != value && isLength(value.length) && !isFunction(value);
}
function isArrayLikeObject(value) {
return isObjectLike(value) && isArrayLike(value);
}
var isBuffer = nativeIsBuffer || stubFalse, isDate = nodeIsDate ? baseUnary(nodeIsDate) : function(value) {
return isObjectLike(value) && baseGetTag(value) == dateTag;
};
function isError(value) {
if (!isObjectLike(value)) return !1;
var tag = baseGetTag(value);
return tag == errorTag || '[object DOMException]' == tag || 'string' == typeof value.message && 'string' == typeof value.name && !isPlainObject(value);
}
function isFunction(value) {
if (!isObject(value)) return !1;
var tag = baseGetTag(value);
return tag == funcTag || tag == genTag || '[object AsyncFunction]' == tag || '[object Proxy]' == tag;
}
function isInteger(value) {
return 'number' == typeof value && value == toInteger(value);
}
function isLength(value) {
return 'number' == typeof value && value > -1 && value % 1 == 0 && value <= 9007199254740991;
}
function isObject(value) {
var type = typeof value;
return null != value && ('object' == type || 'function' == type);
}
function isObjectLike(value) {
return null != value && 'object' == typeof value;
}
var isMap = nodeIsMap ? baseUnary(nodeIsMap) : function(value) {
return isObjectLike(value) && getTag(value) == mapTag;
};
function isNumber(value) {
return 'number' == typeof value || isObjectLike(value) && baseGetTag(value) == numberTag;
}
function isPlainObject(value) {
if (!isObjectLike(value) || baseGetTag(value) != objectTag) return !1;
var proto = getPrototype(value);
if (null === proto) return !0;
var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;
return 'function' == typeof Ctor && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString;
}
var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : function(value) {
return isObjectLike(value) && baseGetTag(value) == regexpTag;
}, isSet = nodeIsSet ? baseUnary(nodeIsSet) : function(value) {
return isObjectLike(value) && getTag(value) == setTag;
};
function isString(value) {
return 'string' == typeof value || !isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag;
}
function isSymbol(value) {
return 'symbol' == typeof value || isObjectLike(value) && baseGetTag(value) == symbolTag;
}
var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : function(value) {
return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
}, lt = createRelationalOperation(baseLt), lte = createRelationalOperation(function(value, other) {
return value <= other;
});
function toArray(value) {
if (!value) return [];
if (isArrayLike(value)) return isString(value) ? stringToArray(value) : copyArray(value);
if (symIterator && value[symIterator]) return function(iterator) {
for(var data, result = []; !(data = iterator.next()).done;)result.push(data.value);
return result;
}(value[symIterator]());
var tag = getTag(value);
return (tag == mapTag ? mapToArray : tag == setTag ? setToArray : values)(value);
}
function toFinite(value) {
return value ? (value = toNumber(value)) === INFINITY || value === -INFINITY ? (value < 0 ? -1 : 1) * 1.7976931348623157e+308 : value == value ? value : 0 : 0 === value ? value : 0;
}
function toInteger(value) {
var result = toFinite(value), remainder = result % 1;
return result == result ? remainder ? result - remainder : result : 0;
}
function toLength(value) {
return value ? baseClamp(toInteger(value), 0, 4294967295) : 0;
}
function toNumber(value) {
if ('number' == typeof value) return value;
if (isSymbol(value)) return NAN;
if (isObject(value)) {
var other = 'function' == typeof value.valueOf ? value.valueOf() : value;
value = isObject(other) ? other + '' : other;
}
if ('string' != typeof value) return 0 === value ? value : +value;
value = baseTrim(value);
var isBinary = reIsBinary.test(value);
return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
}
function toPlainObject(value) {
return copyObject(value, keysIn(value));
}
function toString(value) {
return null == value ? '' : baseToString(value);
}
var assign = createAssigner(function(object, source) {
if (isPrototype(source) || isArrayLike(source)) {
copyObject(source, keys(source), object);
return;
}
for(var key in source)hasOwnProperty.call(source, key) && assignValue(object, key, source[key]);
}), assignIn = createAssigner(function(object, source) {
copyObject(source, keysIn(source), object);
}), assignInWith = createAssigner(function(object, source, srcIndex, customizer) {
copyObject(source, keysIn(source), object, customizer);
}), assignWith = createAssigner(function(object, source, srcIndex, customizer) {
copyObject(source, keys(source), object, customizer);
}), at = flatRest(baseAt), defaults = baseRest(function(object, sources) {
object = Object1(object);
var index = -1, length = sources.length, guard = length > 2 ? sources[2] : undefined;
for(guard && isIterateeCall(sources[0], sources[1], guard) && (length = 1); ++index < length;)for(var source = sources[index], props = keysIn(source), propsIndex = -1, propsLength = props.length; ++propsIndex < propsLength;){
var key = props[propsIndex], value = object[key];
(undefined === value || eq(value, objectProto[key]) && !hasOwnProperty.call(object, key)) && (object[key] = source[key]);
}
return object;
}), defaultsDeep = baseRest(function(args) {
return args.push(undefined, customDefaultsMerge), apply(mergeWith, undefined, args);
});
function get(object, path, defaultValue) {
var result = null == object ? undefined : baseGet(object, path);
return undefined === result ? defaultValue : result;
}
function hasIn(object, path) {
return null != object && hasPath(object, path, baseHasIn);
}
var invert = createInverter(function(result, value, key) {
null != value && 'function' != typeof value.toString && (value = nativeObjectToString.call(value)), result[value] = key;
}, constant(identity)), invertBy = createInverter(function(result, value, key) {
null != value && 'function' != typeof value.toString && (value = nativeObjectToString.call(value)), hasOwnProperty.call(result, value) ? result[value].push(key) : result[value] = [
key
];
}, getIteratee), invoke = baseRest(baseInvoke);
function keys(object) {
return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
}
function keysIn(object) {
return isArrayLike(object) ? arrayLikeKeys(object, !0) : function(object) {
if (!isObject(object)) return function(object) {
var result = [];
if (null != object) for(var key in Object1(object))result.push(key);
return result;
}(object);
var isProto = isPrototype(object), result = [];
for(var key in object)'constructor' == key && (isProto || !hasOwnProperty.call(object, key)) || result.push(key);
return result;
}(object);
}
var merge = createAssigner(function(object, source, srcIndex) {
baseMerge(object, source, srcIndex);
}), mergeWith = createAssigner(function(object, source, srcIndex, customizer) {
baseMerge(object, source, srcIndex, customizer);
}), omit = flatRest(function(object, paths) {
var result = {};
if (null == object) return result;
var isDeep = !1;
paths = arrayMap(paths, function(path) {
return path = castPath(path, object), isDeep || (isDeep = path.length > 1), path;
}), copyObject(object, getAllKeysIn(object), result), isDeep && (result = baseClone(result, 7, customOmitClone));
for(var length = paths.length; length--;)baseUnset(result, paths[length]);
return result;
}), pick = flatRest(function(object, paths) {
return null == object ? {} : basePickBy(object, paths, function(value, path) {
return hasIn(object, path);
});
});
function pickBy(object, predicate) {
if (null == object) return {};
var props = arrayMap(getAllKeysIn(object), function(prop) {
return [
prop
];
});
return predicate = getIteratee(predicate), basePickBy(object, props, function(value, path) {
return predicate(value, path[0]);
});
}
var toPairs = createToPairs(keys), toPairsIn = createToPairs(keysIn);
function values(object) {
return null == object ? [] : baseValues(object, keys(object));
}
var camelCase = createCompounder(function(result, word, index) {
return word = word.toLowerCase(), result + (index ? capitalize(word) : word);
});
function capitalize(string) {
return upperFirst(toString(string).toLowerCase());
}
function deburr(string) {
return (string = toString(string)) && string.replace(reLatin, deburrLetter).replace(reComboMark, '');
}
var kebabCase = createCompounder(function(result, word, index) {
return result + (index ? '-' : '') + word.toLowerCase();
}), lowerCase = createCompounder(function(result, word, index) {
return result + (index ? ' ' : '') + word.toLowerCase();
}), lowerFirst = createCaseFirst('toLowerCase'), snakeCase = createCompounder(function(result, word, index) {
return result + (index ? '_' : '') + word.toLowerCase();
}), startCase = createCompounder(function(result, word, index) {
return result + (index ? ' ' : '') + upperFirst(word);
}), upperCase = createCompounder(function(result, word, index) {
return result + (index ? ' ' : '') + word.toUpperCase();
}), upperFirst = createCaseFirst('toUpperCase');
function words(string, pattern, guard) {
if (string = toString(string), pattern = guard ? undefined : pattern, undefined === pattern) {
var string1;
return (string1 = string, reHasUnicodeWord.test(string1)) ? string.match(reUnicodeWord) || [] : string.match(reAsciiWord) || [];
}
return string.match(pattern) || [];
}
var attempt = baseRest(function(func, args) {
try {
return apply(func, undefined, args);
} catch (e) {
return isError(e) ? e : new Error(e);
}
}), bindAll = flatRest(function(object, methodNames) {
return arrayEach(methodNames, function(key) {
baseAssignValue(object, key = toKey(key), bind(object[key], object));
}), object;
});
function constant(value) {
return function() {
return value;
};
}
var flow = createFlow(), flowRight = createFlow(!0);
function identity(value) {
return value;
}
function iteratee(func) {
return baseIteratee('function' == typeof func ? func : baseClone(func, 1));
}
var method = baseRest(function(path, args) {
return function(object) {
return baseInvoke(object, path, args);
};
}), methodOf = baseRest(function(object, args) {
return function(path) {
return baseInvoke(object, path, args);
};
});
function mixin(object, source, options) {
var props = keys(source), methodNames = baseFunctions(source, props);
null != options || isObject(source) && (methodNames.length || !props.length) || (options = source, source = object, object = this, methodNames = baseFunctions(source, keys(source)));
var chain = !(isObject(options) && 'chain' in options) || !!options.chain, isFunc = isFunction(object);
return arrayEach(methodNames, function(methodName) {
var func = source[methodName];
object[methodName] = func, isFunc && (object.prototype[methodName] = function() {
var chainAll = this.__chain__;
if (chain || chainAll) {
var result = object(this.__wrapped__);
return (result.__actions__ = copyArray(this.__actions__)).push({
func: func,
args: arguments,
thisArg: object
}), result.__chain__ = chainAll, result;
}
return func.apply(object, arrayPush([
this.value()
], arguments));
});
}), object;
}
function noop() {}
var over = createOver(arrayMap), overEvery = createOver(arrayEvery), overSome = createOver(arraySome);
function property(path) {
return isKey(path) ? baseProperty(toKey(path)) : function(object) {
return baseGet(object, path);
};
}
var range = createRange(), rangeRight = createRange(!0);
function stubArray() {
return [];
}
function stubFalse() {
return !1;
}
var add = createMathOperation(function(augend, addend) {
return augend + addend;
}, 0), ceil = createRound('ceil'), divide = createMathOperation(function(dividend, divisor) {
return dividend / divisor;
}, 1), floor = createRound('floor'), multiply = createMathOperation(function(multiplier, multiplicand) {
return multiplier * multiplicand;
}, 1), round = createRound('round'), subtract = createMathOperation(function(minuend, subtrahend) {
return minuend - subtrahend;
}, 0);
return lodash.after = function(n, func) {
if ('function' != typeof func) throw new TypeError(FUNC_ERROR_TEXT);
return n = toInteger(n), function() {
if (--n < 1) return func.apply(this, arguments);
};
}, lodash.ary = ary, lodash.assign = assign, lodash.assignIn = assignIn, lodash.assignInWith = assignInWith, lodash.assignWith = assignWith, lodash.at = at, lodash.before = before, lodash.bind = bind, lodash.bindAll = bindAll, lodash.bindKey = bindKey, lodash.castArray = function() {
if (!arguments.length) return [];
var value = arguments[0];
return isArray(value) ? value : [
value
];
}, lodash.chain = chain, lodash.chunk = function(array, size, guard) {
size = (guard ? isIterateeCall(array, size, guard) : undefined === size) ? 1 : nativeMax(toInteger(size), 0);
var length = null == array ? 0 : array.length;
if (!length || size < 1) return [];
for(var index = 0, resIndex = 0, result = Array1(nativeCeil(length / size)); index < length;)result[resIndex++] = baseSlice(array, index, index += size);
return result;
}, lodash.compact = function(array) {
for(var index = -1, length = null == array ? 0 : array.length, resIndex = 0, result = []; ++index < length;){
var value = array[index];
value && (result[resIndex++] = value);
}
return result;
}, lodash.concat = function() {
var length = arguments.length;
if (!length) return [];
for(var args = Array1(length - 1), array = arguments[0], index = length; index--;)args[index - 1] = arguments[index];
return arrayPush(isArray(array) ? copyArray(array) : [
array
], baseFlatten(args, 1));
}, lodash.cond = function(pairs) {
var length = null == pairs ? 0 : pairs.length, toIteratee = getIteratee();
return pairs = length ? arrayMap(pairs, function(pair) {
if ('function' != typeof pair[1]) throw new TypeError(FUNC_ERROR_TEXT);
return [
toIteratee(pair[0]),
pair[1]
];
}) : [], baseRest(function(args) {
for(var index = -1; ++index < length;){
var pair = pairs[index];
if (apply(pair[0], this, args)) return apply(pair[1], this, args);
}
});
}, lodash.conforms = function(source) {
var source1, props;
return source1 = baseClone(source, 1), props = keys(source1), function(object) {
return baseConformsTo(object, source1, props);
};
}, lodash.constant = constant, lodash.countBy = countBy, lodash.create = function(prototype, properties) {
var result = baseCreate(prototype);
return null == properties ? result : baseAssign(result, properties);
}, lodash.curry = function curry(func, arity, guard) {
arity = guard ? undefined : arity;
var result = createWrap(func, 8, undefined, undefined, undefined, undefined, undefined, arity);
return result.placeholder = curry.placeholder, result;
}, lodash.curryRight = function curryRight(func, arity, guard) {
arity = guard ? undefined : arity;
var result = createWrap(func, 16, undefined, undefined, undefined, undefined, undefined, arity);
return result.placeholder = curryRight.placeholder, result;
}, lodash.debounce = debounce, lodash.defaults = defaults, lodash.defaultsDeep = defaultsDeep, lodash.defer = defer, lodash.delay = delay, lodash.difference = difference, lodash.differenceBy = differenceBy, lodash.differenceWith = differenceWith, lodash.drop = function(array, n, guard) {
var length = null == array ? 0 : array.length;
return length ? baseSlice(array, (n = guard || undefined === n ? 1 : toInteger(n)) < 0 ? 0 : n, length) : [];
}, lodash.dropRight = function(array, n, guard) {
var length = null == array ? 0 : array.length;
return length ? baseSlice(array, 0, (n = length - (n = guard || undefined === n ? 1 : toInteger(n))) < 0 ? 0 : n) : [];
}, lodash.dropRightWhile = function(array, predicate) {
return array && array.length ? baseWhile(array, getIteratee(predicate, 3), !0, !0) : [];
}, lodash.dropWhile = function(array, predicate) {
return array && array.length ? baseWhile(array, getIteratee(predicate, 3), !0) : [];
}, lodash.fill = function(array, value, start, end) {
var length = null == array ? 0 : array.length;
return length ? (start && 'number' != typeof start && isIterateeCall(array, value, start) && (start = 0, end = length), function(array, value, start, end) {
var length = array.length;
for((start = toInteger(start)) < 0 && (start = -start > length ? 0 : length + start), (end = undefined === end || end > length ? length : toInteger(end)) < 0 && (end += length), end = start > end ? 0 : toLength(end); start < end;)array[start++] = value;
return array;
}(array, value, start, end)) : [];
}, lodash.filter = function(collection, predicate) {
return (isArray(collection) ? arrayFilter : baseFilter)(collection, getIteratee(predicate, 3));
}, lodash.flatMap = function(collection, iteratee) {
return baseFlatten(map(collection, iteratee), 1);
}, lodash.flatMapDeep = function(collection, iteratee) {
return baseFlatten(map(collection, iteratee), INFINITY);
}, lodash.flatMapDepth = function(collection, iteratee, depth) {
return depth = undefined === depth ? 1 : toInteger(depth), baseFlatten(map(collection, iteratee), depth);
}, lodash.flatten = flatten, lodash.flattenDeep = function(array) {
return (null == array ? 0 : array.length) ? baseFlatten(array, INFINITY) : [];
}, lodash.flattenDepth = function(array, depth) {
return (null == array ? 0 : array.length) ? baseFlatten(array, depth = undefined === depth ? 1 : toInteger(depth)) : [];
}, lodash.flip = function(func) {
return createWrap(func, 512);
}, lodash.flow = flow, lodash.flowRight = flowRight, lodash.fromPairs = function(pairs) {
for(var index = -1, length = null == pairs ? 0 : pairs.length, result = {}; ++index < length;){
var pair = pairs[index];
result[pair[0]] = pair[1];
}
return result;
}, lodash.functions = function(object) {
return null == object ? [] : baseFunctions(object, keys(object));
}, lodash.functionsIn = function(object) {
return null == object ? [] : baseFunctions(object, keysIn(object));
}, lodash.groupBy = groupBy, lodash.initial = function(array) {
return (null == array ? 0 : array.length) ? baseSlice(array, 0, -1) : [];
}, lodash.intersection = intersection, lodash.intersectionBy = intersectionBy, lodash.intersectionWith = intersectionWith, lodash.invert = invert, lodash.invertBy = invertBy, lodash.invokeMap = invokeMap, lodash.iteratee = iteratee, lodash.keyBy = keyBy, lodash.keys = keys, lodash.keysIn = keysIn, lodash.map = map, lodash.mapKeys = function(object, iteratee) {
var result = {};
return iteratee = getIteratee(iteratee, 3), baseForOwn(object, function(value, key, object) {
baseAssignValue(result, iteratee(value, key, object), value);
}), result;
}, lodash.mapValues = function(object, iteratee) {
var result = {};
return iteratee = getIteratee(iteratee, 3), baseForOwn(object, function(value, key, object) {
baseAssignValue(result, key, iteratee(value, key, object));
}), result;
}, lodash.matches = function(source) {
return baseMatches(baseClone(source, 1));
}, lodash.matchesProperty = function(path, srcValue) {
return baseMatchesProperty(path, baseClone(srcValue, 1));
}, lodash.memoize = memoize, lodash.merge = merge, lodash.mergeWith = mergeWith, lodash.method = method, lodash.methodOf = methodOf, lodash.mixin = mixin, lodash.negate = negate, lodash.nthArg = function(n) {
return n = toInteger(n), baseRest(function(args) {
return baseNth(args, n);
});
}, lodash.omit = omit, lodash.omitBy = function(object, predicate) {
return pickBy(object, negate(getIteratee(predicate)));
}, lodash.once = function(func) {
return before(2, func);
}, lodash.orderBy = function(collection, iteratees, orders, guard) {
return null == collection ? [] : (isArray(iteratees) || (iteratees = null == iteratees ? [] : [
iteratees
]), isArray(orders = guard ? undefined : orders) || (orders = null == orders ? [] : [
orders
]), baseOrderBy(collection, iteratees, orders));
}, lodash.over = over, lodash.overArgs = overArgs, lodash.overEvery = overEvery, lodash.overSome = overSome, lodash.partial = partial, lodash.partialRight = partialRight, lodash.partition = partition, lodash.pick = pick, lodash.pickBy = pickBy, lodash.property = property, lodash.propertyOf = function(object) {
return function(path) {
return null == object ? undefined : baseGet(object, path);
};
}, lodash.pull = pull, lodash.pullAll = pullAll, lodash.pullAllBy = function(array, values, iteratee) {
return array && array.length && values && values.length ? basePullAll(array, values, getIteratee(iteratee, 2)) : array;
}, lodash.pullAllWith = function(array, values, comparator) {
return array && array.length && values && values.length ? basePullAll(array, values, undefined, comparator) : array;
}, lodash.pullAt = pullAt, lodash.range = range, lodash.rangeRight = rangeRight, lodash.rearg = rearg, lodash.reject = function(collection, predicate) {
return (isArray(collection) ? arrayFilter : baseFilter)(collection, negate(getIteratee(predicate, 3)));
}, lodash.remove = function(array, predicate) {
var result = [];
if (!(array && array.length)) return result;
var index = -1, indexes = [], length = array.length;
for(predicate = getIteratee(predicate, 3); ++index < length;){
var value = array[index];
predicate(value, index, array) && (result.push(value), indexes.push(index));
}
return basePullAt(array, indexes), result;
}, lodash.rest = function(func, start) {
if ('function' != typeof func) throw new TypeError(FUNC_ERROR_TEXT);
return baseRest(func, start = undefined === start ? start : toInteger(start));
}, lodash.reverse = reverse, lodash.sampleSize = function(collection, n, guard) {
return n = (guard ? isIterateeCall(collection, n, guard) : undefined === n) ? 1 : toInteger(n), (isArray(collection) ? arraySampleSize : baseSampleSize)(collection, n);
}, lodash.set = function(object, path, value) {
return null == object ? object : baseSet(object, path, value);
}, lodash.setWith = function(object, path, value, customizer) {
return customizer = 'function' == typeof customizer ? customizer : undefined, null == object ? object : baseSet(object, path, value, customizer);
}, lodash.shuffle = function(collection) {
return (isArray(collection) ? arrayShuffle : baseShuffle)(collection);
}, lodash.slice = function(array, start, end) {
var length = null == array ? 0 : array.length;
return length ? (end && 'number' != typeof end && isIterateeCall(array, start, end) ? (start = 0, end = length) : (start = null == start ? 0 : toInteger(start), end = undefined === end ? length : toInteger(end)), baseSlice(array, start, end)) : [];
}, lodash.sortBy = sortBy, lodash.sortedUniq = function(array) {
return array && array.length ? baseSortedUniq(array) : [];
}, lodash.sortedUniqBy = function(array, iteratee) {
return array && array.length ? baseSortedUniq(array, getIteratee(iteratee, 2)) : [];
}, lodash.split = function(string, separator, limit) {
return (limit && 'number' != typeof limit && isIterateeCall(string, separator, limit) && (separator = limit = undefined), limit = undefined === limit ? 4294967295 : limit >>> 0) ? (string = toString(string)) && ('string' == typeof separator || null != separator && !isRegExp(separator)) && !(separator = baseToString(separator)) && hasUnicode(string) ? castSlice(stringToArray(string), 0, limit) : string.split(separator, limit) : [];
}, lodash.spread = function(func, start) {
if ('function' != typeof func) throw new TypeError(FUNC_ERROR_TEXT);
return start = null == start ? 0 : nativeMax(toInteger(start), 0), baseRest(function(args) {
var array = args[start], otherArgs = castSlice(args, 0, start);
return array && arrayPush(otherArgs, array), apply(func, this, otherArgs);
});
}, lodash.tail = function(array) {
var length = null == array ? 0 : array.length;
return length ? baseSlice(array, 1, length) : [];
}, lodash.take = function(array, n, guard) {
return array && array.length ? baseSlice(array, 0, (n = guard || undefined === n ? 1 : toInteger(n)) < 0 ? 0 : n) : [];
}, lodash.takeRight = function(array, n, guard) {
var length = null == array ? 0 : array.length;
return length ? baseSlice(array, (n = length - (n = guard || undefined === n ? 1 : toInteger(n))) < 0 ? 0 : n, length) : [];
}, lodash.takeRightWhile = function(array, predicate) {
return array && array.length ? baseWhile(array, getIteratee(predicate, 3), !1, !0) : [];
}, lodash.takeWhile = function(array, predicate) {
return array && array.length ? baseWhile(array, getIteratee(predicate, 3)) : [];
}, lodash.tap = function(value, interceptor) {
return interceptor(value), value;
}, lodash.throttle = function(func, wait, options) {
var leading = !0, trailing = !0;
if ('function' != typeof func) throw new TypeError(FUNC_ERROR_TEXT);
return isObject(options) && (leading = 'leading' in options ? !!options.leading : leading, trailing = 'trailing' in options ? !!options.trailing : trailing), debounce(func, wait, {
leading: leading,
maxWait: wait,
trailing: trailing
});
}, lodash.thru = thru, lodash.toArray = toArray, lodash.toPairs = toPairs, lodash.toPairsIn = toPairsIn, lodash.toPath = function(value) {
return isArray(value) ? arrayMap(value, toKey) : isSymbol(value) ? [
value
] : copyArray(stringToPath(toString(value)));
}, lodash.toPlainObject = toPlainObject, lodash.transform = function(object, iteratee, accumulator) {
var isArr = isArray(object), isArrLike = isArr || isBuffer(object) || isTypedArray(object);
if (iteratee = getIteratee(iteratee, 4), null == accumulator) {
var Ctor = object && object.constructor;
accumulator = isArrLike ? isArr ? new Ctor : [] : isObject(object) && isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};
}
return (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {
return iteratee(accumulator, value, index, object);
}), accumulator;
}, lodash.unary = function(func) {
return ary(func, 1);
}, lodash.union = union, lodash.unionBy = unionBy, lodash.unionWith = unionWith, lodash.uniq = function(array) {
return array && array.length ? baseUniq(array) : [];
}, lodash.uniqBy = function(array, iteratee) {
return array && array.length ? baseUniq(array, getIteratee(iteratee, 2)) : [];
}, lodash.uniqWith = function(array, comparator) {
return comparator = 'function' == typeof comparator ? comparator : undefined, array && array.length ? baseUniq(array, undefined, comparator) : [];
}, lodash.unset = function(object, path) {
return null == object || baseUnset(object, path);
}, lodash.unzip = unzip, lodash.unzipWith = unzipWith, lodash.update = function(object, path, updater) {
return null == object ? object : baseUpdate(object, path, castFunction(updater));
}, lodash.updateWith = function(object, path, updater, customizer) {
return customizer = 'function' == typeof customizer ? customizer : undefined, null == object ? object : baseUpdate(object, path, castFunction(updater), customizer);
}, lodash.values = values, lodash.valuesIn = function(object) {
return null == object ? [] : baseValues(object, keysIn(object));
}, lodash.without = without, lodash.words = words, lodash.wrap = function(value, wrapper) {
return partial(castFunction(wrapper), value);
}, lodash.xor = xor, lodash.xorBy = xorBy, lodash.xorWith = xorWith, lodash.zip = zip, lodash.zipObject = function(props, values) {
return baseZipObject(props || [], values || [], assignValue);
}, lodash.zipObjectDeep = function(props, values) {
return baseZipObject(props || [], values || [], baseSet);
}, lodash.zipWith = zipWith, lodash.entries = toPairs, lodash.entriesIn = toPairsIn, lodash.extend = assignIn, lodash.extendWith = assignInWith, mixin(lodash, lodash), lodash.add = add, lodash.attempt = attempt, lodash.camelCase = camelCase, lodash.capitalize = capitalize, lodash.ceil = ceil, lodash.clamp = function(number, lower, upper) {
return undefined === upper && (upper = lower, lower = undefined), undefined !== upper && (upper = (upper = toNumber(upper)) == upper ? upper : 0), undefined !== lower && (lower = (lower = toNumber(lower)) == lower ? lower : 0), baseClamp(toNumber(number), lower, upper);
}, lodash.clone = function(value) {
return baseClone(value, 4);
}, lodash.cloneDeep = function(value) {
return baseClone(value, 5);
}, lodash.cloneDeepWith = function(value, customizer) {
return baseClone(value, 5, customizer = 'function' == typeof customizer ? customizer : undefined);
}, lodash.cloneWith = function(value, customizer) {
return baseClone(value, 4, customizer = 'function' == typeof customizer ? customizer : undefined);
}, lodash.conformsTo = function(object, source) {
return null == source || baseConformsTo(object, source, keys(source));
}, lodash.deburr = deburr, lodash.defaultTo = function(value, defaultValue) {
return null == value || value != value ? defaultValue : value;
}, lodash.divide = divide, lodash.endsWith = function(string, target, position) {
string = toString(string), target = baseToString(target);
var length = string.length, end = position = undefined === position ? length : baseClamp(toInteger(position), 0, length);
return (position -= target.length) >= 0 && string.slice(position, end) == target;
}, lodash.eq = eq, lodash.escape = function(string) {
return (string = toString(string)) && reHasUnescapedHtml.test(string) ? string.replace(reUnescapedHtml, escapeHtmlChar) : string;
}, lodash.escapeRegExp = function(string) {
return (string = toString(string)) && reHasRegExpChar.test(string) ? string.replace(reRegExpChar, '\\$&') : string;
}, lodash.every = function(collection, predicate, guard) {
var func = isArray(collection) ? arrayEvery : baseEvery;
return guard && isIterateeCall(collection, predicate, guard) && (predicate = undefined), func(collection, getIteratee(predicate, 3));
}, lodash.find = find, lodash.findIndex = findIndex, lodash.findKey = function(object, predicate) {
return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);
}, lodash.findLast = findLast, lodash.findLastIndex = findLastIndex, lodash.findLastKey = function(object, predicate) {
return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);
}, lodash.floor = floor, lodash.forEach = forEach, lodash.forEachRight = forEachRight, lodash.forIn = function(object, iteratee) {
return null == object ? object : baseFor(object, getIteratee(iteratee, 3), keysIn);
}, lodash.forInRight = function(object, iteratee) {
return null == object ? object : baseForRight(object, getIteratee(iteratee, 3), keysIn);
}, lodash.forOwn = function(object, iteratee) {
return object && baseForOwn(object, getIteratee(iteratee, 3));
}, lodash.forOwnRight = function(object, iteratee) {
return object && baseForOwnRight(object, getIteratee(iteratee, 3));
}, lodash.get = get, lodash.gt = gt, lodash.gte = gte, lodash.has = function(object, path) {
return null != object && hasPath(object, path, baseHas);
}, lodash.hasIn = hasIn, lodash.head = head, lodash.identity = identity, lodash.includes = function(collection, value, fromIndex, guard) {
collection = isArrayLike(collection) ? collection : values(collection), fromIndex = fromIndex && !guard ? toInteger(fromIndex) : 0;
var length = collection.length;
return fromIndex < 0 && (fromIndex = nativeMax(length + fromIndex, 0)), isString(collection) ? fromIndex <= length && collection.indexOf(value, fromIndex) > -1 : !!length && baseIndexOf(collection, value, fromIndex) > -1;
}, lodash.indexOf = function(array, value, fromIndex) {
var length = null == array ? 0 : array.length;
if (!length) return -1;
var index = null == fromIndex ? 0 : toInteger(fromIndex);
return index < 0 && (index = nativeMax(length + index, 0)), baseIndexOf(array, value, index);
}, lodash.inRange = function(number, start, end) {
var number1, start1, end1;
return start = toFinite(start), undefined === end ? (end = start, start = 0) : end = toFinite(end), (number1 = number = toNumber(number)) >= nativeMin(start1 = start, end1 = end) && number1 < nativeMax(start1, end1);
}, lodash.invoke = invoke, lodash.isArguments = isArguments, lodash.isArray = isArray, lodash.isArrayBuffer = isArrayBuffer, lodash.isArrayLike = isArrayLike, lodash.isArrayLikeObject = isArrayLikeObject, lodash.isBoolean = function(value) {
return !0 === value || !1 === value || isObjectLike(value) && baseGetTag(value) == boolTag;
}, lodash.isBuffer = isBuffer, lodash.isDate = isDate, lodash.isElement = function(value) {
return isObjectLike(value) && 1 === value.nodeType && !isPlainObject(value);
}, lodash.isEmpty = function(value) {
if (null == value) return !0;
if (isArrayLike(value) && (isArray(value) || 'string' == typeof value || 'function' == typeof value.splice || isBuffer(value) || isTypedArray(value) || isArguments(value))) return !value.length;
var tag = getTag(value);
if (tag == mapTag || tag == setTag) return !value.size;
if (isPrototype(value)) return !baseKeys(value).length;
for(var key in value)if (hasOwnProperty.call(value, key)) return !1;
return !0;
}, lodash.isEqual = function(value, other) {
return baseIsEqual(value, other);
}, lodash.isEqualWith = function(value, other, customizer) {
var result = (customizer = 'function' == typeof customizer ? customizer : undefined) ? customizer(value, other) : undefined;
return undefined === result ? baseIsEqual(value, other, undefined, customizer) : !!result;
}, lodash.isError = isError, lodash.isFinite = function(value) {
return 'number' == typeof value && nativeIsFinite(value);
}, lodash.isFunction = isFunction, lodash.isInteger = isInteger, lodash.isLength = isLength, lodash.isMap = isMap, lodash.isMatch = function(object, source) {
return object === source || baseIsMatch(object, source, getMatchData(source));
}, lodash.isMatchWith = function(object, source, customizer) {
return customizer = 'function' == typeof customizer ? customizer : undefined, baseIsMatch(object, source, getMatchData(source), customizer);
}, lodash.isNaN = function(value) {
return isNumber(value) && value != +value;
}, lodash.isNative = function(value) {
if (isMaskable(value)) throw new Error('Unsupported core-js use. Try https://npms.io/search?q=ponyfill.');
return baseIsNative(value);
}, lodash.isNil = function(value) {
return null == value;
}, lodash.isNull = function(value) {
return null === value;
}, lodash.isNumber = isNumber, lodash.isObject = isObject, lodash.isObjectLike = isObjectLike, lodash.isPlainObject = isPlainObject, lodash.isRegExp = isRegExp, lodash.isSafeInteger = function(value) {
return isInteger(value) && value >= -9007199254740991 && value <= 9007199254740991;
}, lodash.isSet = isSet, lodash.isString = isString, lodash.isSymbol = isSymbol, lodash.isTypedArray = isTypedArray, lodash.isUndefined = function(value) {
return undefined === value;
}, lodash.isWeakMap = function(value) {
return isObjectLike(value) && getTag(value) == weakMapTag;
}, lodash.isWeakSet = function(value) {
return isObjectLike(value) && '[object WeakSet]' == baseGetTag(value);
}, lodash.join = function(array, separator) {
return null == array ? '' : nativeJoin.call(array, separator);
}, lodash.kebabCase = kebabCase, lodash.last = last, lodash.lastIndexOf = function(array, value, fromIndex) {
var length = null == array ? 0 : array.length;
if (!length) return -1;
var index = length;
return undefined !== fromIndex && (index = (index = toInteger(fromIndex)) < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1)), value == value ? function(array, value, fromIndex) {
for(var index = fromIndex + 1; index-- && array[index] !== value;);
return index;
}(array, value, index) : baseFindIndex(array, baseIsNaN, index, !0);
}, lodash.lowerCase = lowerCase, lodash.lowerFirst = lowerFirst, lodash.lt = lt, lodash.lte = lte, lodash.max = function(array) {
return array && array.length ? baseExtremum(array, identity, baseGt) : undefined;
}, lodash.maxBy = function(array, iteratee) {
return array && array.length ? baseExtremum(array, getIteratee(iteratee, 2), baseGt) : undefined;
}, lodash.mean = function(array) {
return baseMean(array, identity);
}, lodash.meanBy = function(array, iteratee) {
return baseMean(array, getIteratee(iteratee, 2));
}, lodash.min = function(array) {
return array && array.length ? baseExtremum(array, identity, baseLt) : undefined;
}, lodash.minBy = function(array, iteratee) {
return array && array.length ? baseExtremum(array, getIteratee(iteratee, 2), baseLt) : undefined;
}, lodash.stubArray = stubArray, lodash.stubFalse = stubFalse, lodash.stubObject = function() {
return {};
}, lodash.stubString = function() {
return '';
}, lodash.stubTrue = function() {
return !0;
}, lodash.multiply = multiply, lodash.nth = function(array, n) {
return array && array.length ? baseNth(array, toInteger(n)) : undefined;
}, lodash.noConflict = function() {
return root._ === this && (root._ = oldDash), this;
}, lodash.noop = noop, lodash.now = now, lodash.pad = function(string, length, chars) {
string = toString(string);
var strLength = (length = toInteger(length)) ? stringSize(string) : 0;
if (!length || strLength >= length) return string;
var mid = (length - strLength) / 2;
return createPadding(nativeFloor(mid), chars) + string + createPadding(nativeCeil(mid), chars);
}, lodash.padEnd = function(string, length, chars) {
string = toString(string);
var strLength = (length = toInteger(length)) ? stringSize(string) : 0;
return length && strLength < length ? string + createPadding(length - strLength, chars) : string;
}, lodash.padStart = function(string, length, chars) {
string = toString(string);
var strLength = (length = toInteger(length)) ? stringSize(string) : 0;
return length && strLength < length ? createPadding(length - strLength, chars) + string : string;
}, lodash.parseInt = function(string, radix, guard) {
return guard || null == radix ? radix = 0 : radix && (radix = +radix), nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);
}, lodash.random = function(lower, upper, floating) {
if (floating && 'boolean' != typeof floating && isIterateeCall(lower, upper, floating) && (upper = floating = undefined), undefined === floating && ('boolean' == typeof upper ? (floating = upper, upper = undefined) : 'boolean' == typeof lower && (floating = lower, lower = undefined)), undefined === lower && undefined === upper ? (lower = 0, upper = 1) : (lower = toFinite(lower), undefined === upper ? (upper = lower, lower = 0) : upper = toFinite(upper)), lower > upper) {
var temp = lower;
lower = upper, upper = temp;
}
if (floating || lower % 1 || upper % 1) {
var rand = nativeRandom();
return nativeMin(lower + rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1))), upper);
}
return baseRandom(lower, upper);
}, lodash.reduce = function(collection, iteratee, accumulator) {
var func = isArray(collection) ? arrayReduce : baseReduce, initAccum = arguments.length < 3;
return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);
}, lodash.reduceRight = function(collection, iteratee, accumulator) {
var func = isArray(collection) ? arrayReduceRight : baseReduce, initAccum = arguments.length < 3;
return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);
}, lodash.repeat = function(string, n, guard) {
return n = (guard ? isIterateeCall(string, n, guard) : undefined === n) ? 1 : toInteger(n), baseRepeat(toString(string), n);
}, lodash.replace = function() {
var args = arguments, string = toString(args[0]);
return args.length < 3 ? string : string.replace(args[1], args[2]);
}, lodash.result = function(object, path, defaultValue) {
path = castPath(path, object);
var index = -1, length = path.length;
for(length || (length = 1, object = undefined); ++index < length;){
var value = null == object ? undefined : object[toKey(path[index])];
undefined === value && (index = length, value = defaultValue), object = isFunction(value) ? value.call(object) : value;
}
return object;
}, lodash.round = round, lodash.runInContext = runInContext, lodash.sample = function(collection) {
return (isArray(collection) ? arraySample : baseSample)(collection);
}, lodash.size = function(collection) {
if (null == collection) return 0;
if (isArrayLike(collection)) return isString(collection) ? stringSize(collection) : collection.length;
var tag = getTag(collection);
return tag == mapTag || tag == setTag ? collection.size : baseKeys(collection).length;
}, lodash.snakeCase = snakeCase, lodash.some = function(collection, predicate, guard) {
var func = isArray(collection) ? arraySome : baseSome;
return guard && isIterateeCall(collection, predicate, guard) && (predicate = undefined), func(collection, getIteratee(predicate, 3));
}, lodash.sortedIndex = function(array, value) {
return baseSortedIndex(array, value);
}, lodash.sortedIndexBy = function(array, value, iteratee) {
return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));
}, lodash.sortedIndexOf = function(array, value) {
var length = null == array ? 0 : array.length;
if (length) {
var index = baseSortedIndex(array, value);
if (index < length && eq(array[index], value)) return index;
}
return -1;
}, lodash.sortedLastIndex = function(array, value) {
return baseSortedIndex(array, value, !0);
}, lodash.sortedLastIndexBy = function(array, value, iteratee) {
return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), !0);
}, lodash.sortedLastIndexOf = function(array, value) {
if (null == array ? 0 : array.length) {
var index = baseSortedIndex(array, value, !0) - 1;
if (eq(array[index], value)) return index;
}
return -1;
}, lodash.startCase = startCase, lodash.startsWith = function(string, target, position) {
return string = toString(string), position = null == position ? 0 : baseClamp(toInteger(position), 0, string.length), target = baseToString(target), string.slice(position, position + target.length) == target;
}, lodash.subtract = subtract, lodash.sum = function(array) {
return array && array.length ? baseSum(array, identity) : 0;
}, lodash.sumBy = function(array, iteratee) {
return array && array.length ? baseSum(array, getIteratee(iteratee, 2)) : 0;
}, lodash.template = function(string, options, guard) {
var settings = lodash.templateSettings;
guard && isIterateeCall(string, options, guard) && (options = undefined), string = toString(string), options = assignInWith({}, options, settings, customDefaultsAssignIn);
var isEscaping, isEvaluating, imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn), importsKeys = keys(imports), importsValues = baseValues(imports, importsKeys), index = 0, interpolate = options.interpolate || reNoMatch, source = "__p += '", reDelimiters = RegExp1((options.escape || reNoMatch).source + '|' + interpolate.source + '|' + (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' + (options.evaluate || reNoMatch).source + '|$', 'g'), sourceURL = '//# sourceURL=' + (hasOwnProperty.call(options, 'sourceURL') ? (options.sourceURL + '').replace(/\s/g, ' ') : 'lodash.templateSources[' + ++templateCounter + ']') + '\n';
string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
return interpolateValue || (interpolateValue = esTemplateValue), source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar), escapeValue && (isEscaping = !0, source += "' +\n__e(" + escapeValue + ") +\n'"), evaluateValue && (isEvaluating = !0, source += "';\n" + evaluateValue + ";\n__p += '"), interpolateValue && (source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'"), index = offset + match.length, match;
}), source += "';\n";
var variable = hasOwnProperty.call(options, 'variable') && options.variable;
if (variable) {
if (reForbiddenIdentifierChars.test(variable)) throw new Error('Invalid `variable` option passed into `_.template`');
} else source = 'with (obj) {\n' + source + '\n}\n';
source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source).replace(reEmptyStringMiddle, '$1').replace(reEmptyStringTrailing, '$1;'), source = 'function(' + (variable || 'obj') + ') {\n' + (variable ? '' : 'obj || (obj = {});\n') + "var __t, __p = ''" + (isEscaping ? ', __e = _.escape' : '') + (isEvaluating ? ", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n" : ';\n') + source + 'return __p\n}';
var result = attempt(function() {
return Function1(importsKeys, sourceURL + 'return ' + source).apply(undefined, importsValues);
});
if (result.source = source, isError(result)) throw result;
return result;
}, lodash.times = function(n, iteratee) {
if ((n = toInteger(n)) < 1 || n > 9007199254740991) return [];
var index = 4294967295, length = nativeMin(n, 4294967295);
iteratee = getIteratee(iteratee), n -= 4294967295;
for(var result = baseTimes(length, iteratee); ++index < n;)iteratee(index);
return result;
}, lodash.toFinite = toFinite, lodash.toInteger = toInteger, lodash.toLength = toLength, lodash.toLower = function(value) {
return toString(value).toLowerCase();
}, lodash.toNumber = toNumber, lodash.toSafeInteger = function(value) {
return value ? baseClamp(toInteger(value), -9007199254740991, 9007199254740991) : 0 === value ? value : 0;
}, lodash.toString = toString, lodash.toUpper = function(value) {
return toString(value).toUpperCase();
}, lodash.trim = function(string, chars, guard) {
if ((string = toString(string)) && (guard || undefined === chars)) return baseTrim(string);
if (!string || !(chars = baseToString(chars))) return string;
var strSymbols = stringToArray(string), chrSymbols = stringToArray(chars), start = charsStartIndex(strSymbols, chrSymbols), end = charsEndIndex(strSymbols, chrSymbols) + 1;
return castSlice(strSymbols, start, end).join('');
}, lodash.trimEnd = function(string, chars, guard) {
if ((string = toString(string)) && (guard || undefined === chars)) return string.slice(0, trimmedEndIndex(string) + 1);
if (!string || !(chars = baseToString(chars))) return string;
var strSymbols = stringToArray(string), end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;
return castSlice(strSymbols, 0, end).join('');
}, lodash.trimStart = function(string, chars, guard) {
if ((string = toString(string)) && (guard || undefined === chars)) return string.replace(reTrimStart, '');
if (!string || !(chars = baseToString(chars))) return string;
var strSymbols = stringToArray(string), start = charsStartIndex(strSymbols, stringToArray(chars));
return castSlice(strSymbols, start).join('');
}, lodash.truncate = function(string, options) {
var length = 30, omission = '...';
if (isObject(options)) {
var separator = 'separator' in options ? options.separator : separator;
length = 'length' in options ? toInteger(options.length) : length, omission = 'omission' in options ? baseToString(options.omission) : omission;
}
var strLength = (string = toString(string)).length;
if (hasUnicode(string)) {
var strSymbols = stringToArray(string);
strLength = strSymbols.length;
}
if (length >= strLength) return string;
var end = length - stringSize(omission);
if (end < 1) return omission;
var result = strSymbols ? castSlice(strSymbols, 0, end).join('') : string.slice(0, end);
if (undefined === separator) return result + omission;
if (strSymbols && (end += result.length - end), isRegExp(separator)) {
if (string.slice(end).search(separator)) {
var match, substring = result;
for(separator.global || (separator = RegExp1(separator.source, toString(reFlags.exec(separator)) + 'g')), separator.lastIndex = 0; match = separator.exec(substring);)var newEnd = match.index;
result = result.slice(0, undefined === newEnd ? end : newEnd);
}
} else if (string.indexOf(baseToString(separator), end) != end) {
var index = result.lastIndexOf(separator);
index > -1 && (result = result.slice(0, index));
}
return result + omission;
}, lodash.unescape = function(string) {
return (string = toString(string)) && reHasEscapedHtml.test(string) ? string.replace(reEscapedHtml, unescapeHtmlChar) : string;
}, lodash.uniqueId = function(prefix) {
var id = ++idCounter;
return toString(prefix) + id;
}, lodash.upperCase = upperCase, lodash.upperFirst = upperFirst, lodash.each = forEach, lodash.eachRight = forEachRight, lodash.first = head, mixin(lodash, (source = {}, baseForOwn(lodash, function(func, methodName) {
hasOwnProperty.call(lodash.prototype, methodName) || (source[methodName] = func);
}), source), {
chain: !1
}), lodash.VERSION = '4.17.21', arrayEach([
'bind',
'bindKey',
'curry',
'curryRight',
'partial',
'partialRight'
], function(methodName) {
lodash[methodName].placeholder = lodash;
}), arrayEach([
'drop',
'take'
], function(methodName, index) {
LazyWrapper.prototype[methodName] = function(n) {
n = undefined === n ? 1 : nativeMax(toInteger(n), 0);
var result = this.__filtered__ && !index ? new LazyWrapper(this) : this.clone();
return result.__filtered__ ? result.__takeCount__ = nativeMin(n, result.__takeCount__) : result.__views__.push({
size: nativeMin(n, 4294967295),
type: methodName + (result.__dir__ < 0 ? 'Right' : '')
}), result;
}, LazyWrapper.prototype[methodName + 'Right'] = function(n) {
return this.reverse()[methodName](n).reverse();
};
}), arrayEach([
'filter',
'map',
'takeWhile'
], function(methodName, index) {
var type = index + 1, isFilter = 1 == type || 3 == type;
LazyWrapper.prototype[methodName] = function(iteratee) {
var result = this.clone();
return result.__iteratees__.push({
iteratee: getIteratee(iteratee, 3),
type: type
}), result.__filtered__ = result.__filtered__ || isFilter, result;
};
}), arrayEach([
'head',
'last'
], function(methodName, index) {
var takeName = 'take' + (index ? 'Right' : '');
LazyWrapper.prototype[methodName] = function() {
return this[takeName](1).value()[0];
};
}), arrayEach([
'initial',
'tail'
], function(methodName, index) {
var dropName = 'drop' + (index ? '' : 'Right');
LazyWrapper.prototype[methodName] = function() {
return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);
};
}), LazyWrapper.prototype.compact = function() {
return this.filter(identity);
}, LazyWrapper.prototype.find = function(predicate) {
return this.filter(predicate).head();
}, LazyWrapper.prototype.findLast = function(predicate) {
return this.reverse().find(predicate);
}, LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {
return 'function' == typeof path ? new LazyWrapper(this) : this.map(function(value) {
return baseInvoke(value, path, args);
});
}), LazyWrapper.prototype.reject = function(predicate) {
return this.filter(negate(getIteratee(predicate)));
}, LazyWrapper.prototype.slice = function(start, end) {
start = toInteger(start);
var result = this;
return result.__filtered__ && (start > 0 || end < 0) ? new LazyWrapper(result) : (start < 0 ? result = result.takeRight(-start) : start && (result = result.drop(start)), undefined !== end && (result = (end = toInteger(end)) < 0 ? result.dropRight(-end) : result.take(end - start)), result);
}, LazyWrapper.prototype.takeRightWhile = function(predicate) {
return this.reverse().takeWhile(predicate).reverse();
}, LazyWrapper.prototype.toArray = function() {
return this.take(4294967295);
}, baseForOwn(LazyWrapper.prototype, function(func, methodName) {
var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName), isTaker = /^(?:head|last)$/.test(methodName), lodashFunc = lodash[isTaker ? 'take' + ('last' == methodName ? 'Right' : '') : methodName], retUnwrapped = isTaker || /^find/.test(methodName);
lodashFunc && (lodash.prototype[methodName] = function() {
var value = this.__wrapped__, args = isTaker ? [
1
] : arguments, isLazy = value instanceof LazyWrapper, iteratee = args[0], useLazy = isLazy || isArray(value), interceptor = function(value) {
var result = lodashFunc.apply(lodash, arrayPush([
value
], args));
return isTaker && chainAll ? result[0] : result;
};
useLazy && checkIteratee && 'function' == typeof iteratee && 1 != iteratee.length && (isLazy = useLazy = !1);
var chainAll = this.__chain__, isHybrid = !!this.__actions__.length, isUnwrapped = retUnwrapped && !chainAll, onlyLazy = isLazy && !isHybrid;
if (!retUnwrapped && useLazy) {
value = onlyLazy ? value : new LazyWrapper(this);
var result = func.apply(value, args);
return result.__actions__.push({
func: thru,
args: [
interceptor
],
thisArg: undefined
}), new LodashWrapper(result, chainAll);
}
return isUnwrapped && onlyLazy ? func.apply(this, args) : (result = this.thru(interceptor), isUnwrapped ? isTaker ? result.value()[0] : result.value() : result);
});
}), arrayEach([
'pop',
'push',
'shift',
'sort',
'splice',
'unshift'
], function(methodName) {
var func = arrayProto[methodName], chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', retUnwrapped = /^(?:pop|shift)$/.test(methodName);
lodash.prototype[methodName] = function() {
var args = arguments;
if (retUnwrapped && !this.__chain__) {
var value = this.value();
return func.apply(isArray(value) ? value : [], args);
}
return this[chainName](function(value) {
return func.apply(isArray(value) ? value : [], args);
});
};
}), baseForOwn(LazyWrapper.prototype, function(func, methodName) {
var lodashFunc = lodash[methodName];
if (lodashFunc) {
var key = lodashFunc.name + '';
hasOwnProperty.call(realNames, key) || (realNames[key] = []), realNames[key].push({
name: methodName,
func: lodashFunc
});
}
}), realNames[createHybrid(undefined, 2).name] = [
{
name: 'wrapper',
func: undefined
}
], LazyWrapper.prototype.clone = function() {
var result = new LazyWrapper(this.__wrapped__);
return result.__actions__ = copyArray(this.__actions__), result.__dir__ = this.__dir__, result.__filtered__ = this.__filtered__, result.__iteratees__ = copyArray(this.__iteratees__), result.__takeCount__ = this.__takeCount__, result.__views__ = copyArray(this.__views__), result;
}, LazyWrapper.prototype.reverse = function() {
if (this.__filtered__) {
var result = new LazyWrapper(this);
result.__dir__ = -1, result.__filtered__ = !0;
} else result = this.clone(), result.__dir__ *= -1;
return result;
}, LazyWrapper.prototype.value = function() {
var array = this.__wrapped__.value(), dir = this.__dir__, isArr = isArray(array), isRight = dir < 0, arrLength = isArr ? array.length : 0, view = function(start, end, transforms) {
for(var index = -1, length = transforms.length; ++index < length;){
var data = transforms[index], size = data.size;
switch(data.type){
case 'drop':
start += size;
break;
case 'dropRight':
end -= size;
break;
case 'take':
end = nativeMin(end, start + size);
break;
case 'takeRight':
start = nativeMax(start, end - size);
}
}
return {
start: start,
end: end
};
}(0, arrLength, this.__views__), start = view.start, end = view.end, length = end - start, index = isRight ? end : start - 1, iteratees = this.__iteratees__, iterLength = iteratees.length, resIndex = 0, takeCount = nativeMin(length, this.__takeCount__);
if (!isArr || !isRight && arrLength == length && takeCount == length) return baseWrapperValue(array, this.__actions__);
var result = [];
outer: for(; length-- && resIndex < takeCount;){
for(var iterIndex = -1, value = array[index += dir]; ++iterIndex < iterLength;){
var data = iteratees[iterIndex], iteratee = data.iteratee, type = data.type, computed = iteratee(value);
if (2 == type) value = computed;
else if (!computed) {
if (1 == type) continue outer;
break outer;
}
}
result[resIndex++] = value;
}
return result;
}, lodash.prototype.at = wrapperAt, lodash.prototype.chain = function() {
return chain(this);
}, lodash.prototype.commit = function() {
return new LodashWrapper(this.value(), this.__chain__);
}, lodash.prototype.next = function() {
undefined === this.__values__ && (this.__values__ = toArray(this.value()));
var done = this.__index__ >= this.__values__.length, value = done ? undefined : this.__values__[this.__index__++];
return {
done: done,
value: value
};
}, lodash.prototype.plant = function(value) {
for(var result, parent = this; parent instanceof baseLodash;){
var clone = wrapperClone(parent);
clone.__index__ = 0, clone.__values__ = undefined, result ? previous.__wrapped__ = clone : result = clone;
var previous = clone;
parent = parent.__wrapped__;
}
return previous.__wrapped__ = value, result;
}, lodash.prototype.reverse = function() {
var value = this.__wrapped__;
if (value instanceof LazyWrapper) {
var wrapped = value;
return this.__actions__.length && (wrapped = new LazyWrapper(this)), (wrapped = wrapped.reverse()).__actions__.push({
func: thru,
args: [
reverse
],
thisArg: undefined
}), new LodashWrapper(wrapped, this.__chain__);
}
return this.thru(reverse);
}, lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = function() {
return baseWrapperValue(this.__wrapped__, this.__actions__);
}, lodash.prototype.first = lodash.prototype.head, symIterator && (lodash.prototype[symIterator] = function() {
return this;
}), lodash;
}();
'function' == typeof define && 'object' == typeof define.amd && define.amd ? (root._ = _, define(function() {
return _;
})) : freeModule ? ((freeModule.exports = _)._ = _, freeExports._ = _) : root._ = _;
}).call(this);