{"ScriptPreparationCode":"/**\r\n * lodash (Custom Build) \u003Chttps://lodash.com/\u003E\r\n * Build: \u0060lodash modularize exports=\u0022npm\u0022 -o ./\u0060\r\n * Copyright jQuery Foundation and other contributors \u003Chttps://jquery.org/\u003E\r\n * Released under MIT license \u003Chttps://lodash.com/license\u003E\r\n * Based on Underscore.js 1.8.3 \u003Chttp://underscorejs.org/LICENSE\u003E\r\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters \u0026 Editors\r\n */\r\n\r\n/** Used as the \u0060TypeError\u0060 message for \u0022Functions\u0022 methods. */\r\nvar FUNC_ERROR_TEXT = \u0027Expected a function\u0027;\r\n\r\n/** Used to stand-in for \u0060undefined\u0060 hash values. */\r\nvar HASH_UNDEFINED = \u0027__lodash_hash_undefined__\u0027;\r\n\r\n/** Used as references for various \u0060Number\u0060 constants. */\r\nvar INFINITY = 1 / 0;\r\n\r\n/** \u0060Object#toString\u0060 result references. */\r\nvar funcTag = \u0027[object Function]\u0027,\r\n genTag = \u0027[object GeneratorFunction]\u0027,\r\n symbolTag = \u0027[object Symbol]\u0027;\r\n\r\n/** Used to match property names within property paths. */\r\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\u0022\u0027])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\r\n reIsPlainProp = /^\\w*$/,\r\n reLeadingDot = /^\\./,\r\n rePropName = /[^.[\\]]\u002B|\\[(?:(-?\\d\u002B(?:\\.\\d\u002B)?)|([\u0022\u0027])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\r\n\r\n/**\r\n * Used to match \u0060RegExp\u0060\r\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\r\n */\r\nvar reRegExpChar = /[\\\\^$.*\u002B?()[\\]{}|]/g;\r\n\r\n/** Used to match backslashes in property paths. */\r\nvar reEscapeChar = /\\\\(\\\\)?/g;\r\n\r\n/** Used to detect host constructors (Safari). */\r\nvar reIsHostCtor = /^\\[object .\u002B?Constructor\\]$/;\r\n\r\n/** Detect free variable \u0060global\u0060 from Node.js. */\r\nvar freeGlobal = typeof global == \u0027object\u0027 \u0026\u0026 global \u0026\u0026 global.Object === Object \u0026\u0026 global;\r\n\r\n/** Detect free variable \u0060self\u0060. */\r\nvar freeSelf = typeof self == \u0027object\u0027 \u0026\u0026 self \u0026\u0026 self.Object === Object \u0026\u0026 self;\r\n\r\n/** Used as a reference to the global object. */\r\nvar root = freeGlobal || freeSelf || Function(\u0027return this\u0027)();\r\n\r\n/**\r\n * Gets the value at \u0060key\u0060 of \u0060object\u0060.\r\n *\r\n * @private\r\n * @param {Object} [object] The object to query.\r\n * @param {string} key The key of the property to get.\r\n * @returns {*} Returns the property value.\r\n */\r\nfunction getValue(object, key) {\r\n return object == null ? undefined : object[key];\r\n}\r\n\r\n/**\r\n * Checks if \u0060value\u0060 is a host object in IE \u003C 9.\r\n *\r\n * @private\r\n * @param {*} value The value to check.\r\n * @returns {boolean} Returns \u0060true\u0060 if \u0060value\u0060 is a host object, else \u0060false\u0060.\r\n */\r\nfunction isHostObject(value) {\r\n // Many host objects are \u0060Object\u0060 objects that can coerce to strings\r\n // despite having improperly defined \u0060toString\u0060 methods.\r\n var result = false;\r\n if (value != null \u0026\u0026 typeof value.toString != \u0027function\u0027) {\r\n try {\r\n result = !!(value \u002B \u0027\u0027);\r\n } catch (e) {}\r\n }\r\n return result;\r\n}\r\n\r\n/** Used for built-in method references. */\r\nvar arrayProto = Array.prototype,\r\n funcProto = Function.prototype,\r\n objectProto = Object.prototype;\r\n\r\n/** Used to detect overreaching core-js shims. */\r\nvar coreJsData = root[\u0027__core-js_shared__\u0027];\r\n\r\n/** Used to detect methods masquerading as native. */\r\nvar maskSrcKey = (function() {\r\n var uid = /[^.]\u002B$/.exec(coreJsData \u0026\u0026 coreJsData.keys \u0026\u0026 coreJsData.keys.IE_PROTO || \u0027\u0027);\r\n return uid ? (\u0027Symbol(src)_1.\u0027 \u002B uid) : \u0027\u0027;\r\n}());\r\n\r\n/** Used to resolve the decompiled source of functions. */\r\nvar funcToString = funcProto.toString;\r\n\r\n/** Used to check objects for own properties. */\r\nvar hasOwnProperty = objectProto.hasOwnProperty;\r\n\r\n/**\r\n * Used to resolve the\r\n * [\u0060toStringTag\u0060](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\r\n * of values.\r\n */\r\nvar objectToString = objectProto.toString;\r\n\r\n/** Used to detect if a method is native. */\r\nvar reIsNative = RegExp(\u0027^\u0027 \u002B\r\n funcToString.call(hasOwnProperty).replace(reRegExpChar, \u0027\\\\$\u0026\u0027)\r\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .\u002B?(?=\\\\\\])/g, \u0027$1.*?\u0027) \u002B \u0027$\u0027\r\n);\r\n\r\n/** Built-in value references. */\r\nvar Symbol = root.Symbol,\r\n splice = arrayProto.splice;\r\n\r\n/* Built-in method references that are verified to be native. */\r\nvar Map = getNative(root, \u0027Map\u0027),\r\n nativeCreate = getNative(Object, \u0027create\u0027);\r\n\r\n/** Used to convert symbols to primitives and strings. */\r\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\r\n symbolToString = symbolProto ? symbolProto.toString : undefined;\r\n\r\n/**\r\n * Creates a hash object.\r\n *\r\n * @private\r\n * @constructor\r\n * @param {Array} [entries] The key-value pairs to cache.\r\n */\r\nfunction Hash(entries) {\r\n var index = -1,\r\n length = entries ? entries.length : 0;\r\n\r\n this.clear();\r\n while (\u002B\u002Bindex \u003C length) {\r\n var entry = entries[index];\r\n this.set(entry[0], entry[1]);\r\n }\r\n}\r\n\r\n/**\r\n * Removes all key-value entries from the hash.\r\n *\r\n * @private\r\n * @name clear\r\n * @memberOf Hash\r\n */\r\nfunction hashClear() {\r\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\r\n}\r\n\r\n/**\r\n * Removes \u0060key\u0060 and its value from the hash.\r\n *\r\n * @private\r\n * @name delete\r\n * @memberOf Hash\r\n * @param {Object} hash The hash to modify.\r\n * @param {string} key The key of the value to remove.\r\n * @returns {boolean} Returns \u0060true\u0060 if the entry was removed, else \u0060false\u0060.\r\n */\r\nfunction hashDelete(key) {\r\n return this.has(key) \u0026\u0026 delete this.__data__[key];\r\n}\r\n\r\n/**\r\n * Gets the hash value for \u0060key\u0060.\r\n *\r\n * @private\r\n * @name get\r\n * @memberOf Hash\r\n * @param {string} key The key of the value to get.\r\n * @returns {*} Returns the entry value.\r\n */\r\nfunction hashGet(key) {\r\n var data = this.__data__;\r\n if (nativeCreate) {\r\n var result = data[key];\r\n return result === HASH_UNDEFINED ? undefined : result;\r\n }\r\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\r\n}\r\n\r\n/**\r\n * Checks if a hash value for \u0060key\u0060 exists.\r\n *\r\n * @private\r\n * @name has\r\n * @memberOf Hash\r\n * @param {string} key The key of the entry to check.\r\n * @returns {boolean} Returns \u0060true\u0060 if an entry for \u0060key\u0060 exists, else \u0060false\u0060.\r\n */\r\nfunction hashHas(key) {\r\n var data = this.__data__;\r\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\r\n}\r\n\r\n/**\r\n * Sets the hash \u0060key\u0060 to \u0060value\u0060.\r\n *\r\n * @private\r\n * @name set\r\n * @memberOf Hash\r\n * @param {string} key The key of the value to set.\r\n * @param {*} value The value to set.\r\n * @returns {Object} Returns the hash instance.\r\n */\r\nfunction hashSet(key, value) {\r\n var data = this.__data__;\r\n data[key] = (nativeCreate \u0026\u0026 value === undefined) ? HASH_UNDEFINED : value;\r\n return this;\r\n}\r\n\r\n// Add methods to \u0060Hash\u0060.\r\nHash.prototype.clear = hashClear;\r\nHash.prototype[\u0027delete\u0027] = hashDelete;\r\nHash.prototype.get = hashGet;\r\nHash.prototype.has = hashHas;\r\nHash.prototype.set = hashSet;\r\n\r\n/**\r\n * Creates an list cache object.\r\n *\r\n * @private\r\n * @constructor\r\n * @param {Array} [entries] The key-value pairs to cache.\r\n */\r\nfunction ListCache(entries) {\r\n var index = -1,\r\n length = entries ? entries.length : 0;\r\n\r\n this.clear();\r\n while (\u002B\u002Bindex \u003C length) {\r\n var entry = entries[index];\r\n this.set(entry[0], entry[1]);\r\n }\r\n}\r\n\r\n/**\r\n * Removes all key-value entries from the list cache.\r\n *\r\n * @private\r\n * @name clear\r\n * @memberOf ListCache\r\n */\r\nfunction listCacheClear() {\r\n this.__data__ = [];\r\n}\r\n\r\n/**\r\n * Removes \u0060key\u0060 and its value from the list cache.\r\n *\r\n * @private\r\n * @name delete\r\n * @memberOf ListCache\r\n * @param {string} key The key of the value to remove.\r\n * @returns {boolean} Returns \u0060true\u0060 if the entry was removed, else \u0060false\u0060.\r\n */\r\nfunction listCacheDelete(key) {\r\n var data = this.__data__,\r\n index = assocIndexOf(data, key);\r\n\r\n if (index \u003C 0) {\r\n return false;\r\n }\r\n var lastIndex = data.length - 1;\r\n if (index == lastIndex) {\r\n data.pop();\r\n } else {\r\n splice.call(data, index, 1);\r\n }\r\n return true;\r\n}\r\n\r\n/**\r\n * Gets the list cache value for \u0060key\u0060.\r\n *\r\n * @private\r\n * @name get\r\n * @memberOf ListCache\r\n * @param {string} key The key of the value to get.\r\n * @returns {*} Returns the entry value.\r\n */\r\nfunction listCacheGet(key) {\r\n var data = this.__data__,\r\n index = assocIndexOf(data, key);\r\n\r\n return index \u003C 0 ? undefined : data[index][1];\r\n}\r\n\r\n/**\r\n * Checks if a list cache value for \u0060key\u0060 exists.\r\n *\r\n * @private\r\n * @name has\r\n * @memberOf ListCache\r\n * @param {string} key The key of the entry to check.\r\n * @returns {boolean} Returns \u0060true\u0060 if an entry for \u0060key\u0060 exists, else \u0060false\u0060.\r\n */\r\nfunction listCacheHas(key) {\r\n return assocIndexOf(this.__data__, key) \u003E -1;\r\n}\r\n\r\n/**\r\n * Sets the list cache \u0060key\u0060 to \u0060value\u0060.\r\n *\r\n * @private\r\n * @name set\r\n * @memberOf ListCache\r\n * @param {string} key The key of the value to set.\r\n * @param {*} value The value to set.\r\n * @returns {Object} Returns the list cache instance.\r\n */\r\nfunction listCacheSet(key, value) {\r\n var data = this.__data__,\r\n index = assocIndexOf(data, key);\r\n\r\n if (index \u003C 0) {\r\n data.push([key, value]);\r\n } else {\r\n data[index][1] = value;\r\n }\r\n return this;\r\n}\r\n\r\n// Add methods to \u0060ListCache\u0060.\r\nListCache.prototype.clear = listCacheClear;\r\nListCache.prototype[\u0027delete\u0027] = listCacheDelete;\r\nListCache.prototype.get = listCacheGet;\r\nListCache.prototype.has = listCacheHas;\r\nListCache.prototype.set = listCacheSet;\r\n\r\n/**\r\n * Creates a map cache object to store key-value pairs.\r\n *\r\n * @private\r\n * @constructor\r\n * @param {Array} [entries] The key-value pairs to cache.\r\n */\r\nfunction MapCache(entries) {\r\n var index = -1,\r\n length = entries ? entries.length : 0;\r\n\r\n this.clear();\r\n while (\u002B\u002Bindex \u003C length) {\r\n var entry = entries[index];\r\n this.set(entry[0], entry[1]);\r\n }\r\n}\r\n\r\n/**\r\n * Removes all key-value entries from the map.\r\n *\r\n * @private\r\n * @name clear\r\n * @memberOf MapCache\r\n */\r\nfunction mapCacheClear() {\r\n this.__data__ = {\r\n \u0027hash\u0027: new Hash,\r\n \u0027map\u0027: new(Map || ListCache),\r\n \u0027string\u0027: new Hash\r\n };\r\n}\r\n\r\n/**\r\n * Removes \u0060key\u0060 and its value from the map.\r\n *\r\n * @private\r\n * @name delete\r\n * @memberOf MapCache\r\n * @param {string} key The key of the value to remove.\r\n * @returns {boolean} Returns \u0060true\u0060 if the entry was removed, else \u0060false\u0060.\r\n */\r\nfunction mapCacheDelete(key) {\r\n return getMapData(this, key)[\u0027delete\u0027](key);\r\n}\r\n\r\n/**\r\n * Gets the map value for \u0060key\u0060.\r\n *\r\n * @private\r\n * @name get\r\n * @memberOf MapCache\r\n * @param {string} key The key of the value to get.\r\n * @returns {*} Returns the entry value.\r\n */\r\nfunction mapCacheGet(key) {\r\n return getMapData(this, key).get(key);\r\n}\r\n\r\n/**\r\n * Checks if a map value for \u0060key\u0060 exists.\r\n *\r\n * @private\r\n * @name has\r\n * @memberOf MapCache\r\n * @param {string} key The key of the entry to check.\r\n * @returns {boolean} Returns \u0060true\u0060 if an entry for \u0060key\u0060 exists, else \u0060false\u0060.\r\n */\r\nfunction mapCacheHas(key) {\r\n return getMapData(this, key).has(key);\r\n}\r\n\r\n/**\r\n * Sets the map \u0060key\u0060 to \u0060value\u0060.\r\n *\r\n * @private\r\n * @name set\r\n * @memberOf MapCache\r\n * @param {string} key The key of the value to set.\r\n * @param {*} value The value to set.\r\n * @returns {Object} Returns the map cache instance.\r\n */\r\nfunction mapCacheSet(key, value) {\r\n getMapData(this, key).set(key, value);\r\n return this;\r\n}\r\n\r\n// Add methods to \u0060MapCache\u0060.\r\nMapCache.prototype.clear = mapCacheClear;\r\nMapCache.prototype[\u0027delete\u0027] = mapCacheDelete;\r\nMapCache.prototype.get = mapCacheGet;\r\nMapCache.prototype.has = mapCacheHas;\r\nMapCache.prototype.set = mapCacheSet;\r\n\r\n/**\r\n * Gets the index at which the \u0060key\u0060 is found in \u0060array\u0060 of key-value pairs.\r\n *\r\n * @private\r\n * @param {Array} array The array to inspect.\r\n * @param {*} key The key to search for.\r\n * @returns {number} Returns the index of the matched value, else \u0060-1\u0060.\r\n */\r\nfunction assocIndexOf(array, key) {\r\n var length = array.length;\r\n while (length--) {\r\n if (eq(array[length][0], key)) {\r\n return length;\r\n }\r\n }\r\n return -1;\r\n}\r\n\r\n/**\r\n * The base implementation of \u0060_.get\u0060 without support for default values.\r\n *\r\n * @private\r\n * @param {Object} object The object to query.\r\n * @param {Array|string} path The path of the property to get.\r\n * @returns {*} Returns the resolved value.\r\n */\r\nfunction baseGet(object, path) {\r\n path = isKey(path, object) ? [path] : castPath(path);\r\n\r\n var index = 0,\r\n length = path.length;\r\n\r\n while (object != null \u0026\u0026 index \u003C length) {\r\n object = object[toKey(path[index\u002B\u002B])];\r\n }\r\n return (index \u0026\u0026 index == length) ? object : undefined;\r\n}\r\n\r\n/**\r\n * The base implementation of \u0060_.isNative\u0060 without bad shim checks.\r\n *\r\n * @private\r\n * @param {*} value The value to check.\r\n * @returns {boolean} Returns \u0060true\u0060 if \u0060value\u0060 is a native function,\r\n * else \u0060false\u0060.\r\n */\r\nfunction baseIsNative(value) {\r\n if (!isObject(value) || isMasked(value)) {\r\n return false;\r\n }\r\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\r\n return pattern.test(toSource(value));\r\n}\r\n\r\n/**\r\n * The base implementation of \u0060_.toString\u0060 which doesn\u0027t convert nullish\r\n * values to empty strings.\r\n *\r\n * @private\r\n * @param {*} value The value to process.\r\n * @returns {string} Returns the string.\r\n */\r\nfunction baseToString(value) {\r\n // Exit early for strings to avoid a performance hit in some environments.\r\n if (typeof value == \u0027string\u0027) {\r\n return value;\r\n }\r\n if (isSymbol(value)) {\r\n return symbolToString ? symbolToString.call(value) : \u0027\u0027;\r\n }\r\n var result = (value \u002B \u0027\u0027);\r\n return (result == \u00270\u0027 \u0026\u0026 (1 / value) == -INFINITY) ? \u0027-0\u0027 : result;\r\n}\r\n\r\n/**\r\n * Casts \u0060value\u0060 to a path array if it\u0027s not one.\r\n *\r\n * @private\r\n * @param {*} value The value to inspect.\r\n * @returns {Array} Returns the cast property path array.\r\n */\r\nfunction castPath(value) {\r\n return isArray(value) ? value : stringToPath(value);\r\n}\r\n\r\n/**\r\n * Gets the data for \u0060map\u0060.\r\n *\r\n * @private\r\n * @param {Object} map The map to query.\r\n * @param {string} key The reference key.\r\n * @returns {*} Returns the map data.\r\n */\r\nfunction getMapData(map, key) {\r\n var data = map.__data__;\r\n return isKeyable(key) ?\r\n data[typeof key == \u0027string\u0027 ? \u0027string\u0027 : \u0027hash\u0027] :\r\n data.map;\r\n}\r\n\r\n/**\r\n * Gets the native function at \u0060key\u0060 of \u0060object\u0060.\r\n *\r\n * @private\r\n * @param {Object} object The object to query.\r\n * @param {string} key The key of the method to get.\r\n * @returns {*} Returns the function if it\u0027s native, else \u0060undefined\u0060.\r\n */\r\nfunction getNative(object, key) {\r\n var value = getValue(object, key);\r\n return baseIsNative(value) ? value : undefined;\r\n}\r\n\r\n/**\r\n * Checks if \u0060value\u0060 is a property name and not a property path.\r\n *\r\n * @private\r\n * @param {*} value The value to check.\r\n * @param {Object} [object] The object to query keys on.\r\n * @returns {boolean} Returns \u0060true\u0060 if \u0060value\u0060 is a property name, else \u0060false\u0060.\r\n */\r\nfunction isKey(value, object) {\r\n if (isArray(value)) {\r\n return false;\r\n }\r\n var type = typeof value;\r\n if (type == \u0027number\u0027 || type == \u0027symbol\u0027 || type == \u0027boolean\u0027 ||\r\n value == null || isSymbol(value)) {\r\n return true;\r\n }\r\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\r\n (object != null \u0026\u0026 value in Object(object));\r\n}\r\n\r\n/**\r\n * Checks if \u0060value\u0060 is suitable for use as unique object key.\r\n *\r\n * @private\r\n * @param {*} value The value to check.\r\n * @returns {boolean} Returns \u0060true\u0060 if \u0060value\u0060 is suitable, else \u0060false\u0060.\r\n */\r\nfunction isKeyable(value) {\r\n var type = typeof value;\r\n return (type == \u0027string\u0027 || type == \u0027number\u0027 || type == \u0027symbol\u0027 || type == \u0027boolean\u0027) ?\r\n (value !== \u0027__proto__\u0027) :\r\n (value === null);\r\n}\r\n\r\n/**\r\n * Checks if \u0060func\u0060 has its source masked.\r\n *\r\n * @private\r\n * @param {Function} func The function to check.\r\n * @returns {boolean} Returns \u0060true\u0060 if \u0060func\u0060 is masked, else \u0060false\u0060.\r\n */\r\nfunction isMasked(func) {\r\n return !!maskSrcKey \u0026\u0026 (maskSrcKey in func);\r\n}\r\n\r\n/**\r\n * Converts \u0060string\u0060 to a property path array.\r\n *\r\n * @private\r\n * @param {string} string The string to convert.\r\n * @returns {Array} Returns the property path array.\r\n */\r\nvar stringToPath = memoize(function(string) {\r\n string = toString(string);\r\n\r\n var result = [];\r\n if (reLeadingDot.test(string)) {\r\n result.push(\u0027\u0027);\r\n }\r\n string.replace(rePropName, function(match, number, quote, string) {\r\n result.push(quote ? string.replace(reEscapeChar, \u0027$1\u0027) : (number || match));\r\n });\r\n return result;\r\n});\r\n\r\n/**\r\n * Converts \u0060value\u0060 to a string key if it\u0027s not a string or symbol.\r\n *\r\n * @private\r\n * @param {*} value The value to inspect.\r\n * @returns {string|symbol} Returns the key.\r\n */\r\nfunction toKey(value) {\r\n if (typeof value == \u0027string\u0027 || isSymbol(value)) {\r\n return value;\r\n }\r\n var result = (value \u002B \u0027\u0027);\r\n return (result == \u00270\u0027 \u0026\u0026 (1 / value) == -INFINITY) ? \u0027-0\u0027 : result;\r\n}\r\n\r\n/**\r\n * Converts \u0060func\u0060 to its source code.\r\n *\r\n * @private\r\n * @param {Function} func The function to process.\r\n * @returns {string} Returns the source code.\r\n */\r\nfunction toSource(func) {\r\n if (func != null) {\r\n try {\r\n return funcToString.call(func);\r\n } catch (e) {}\r\n try {\r\n return (func \u002B \u0027\u0027);\r\n } catch (e) {}\r\n }\r\n return \u0027\u0027;\r\n}\r\n\r\n/**\r\n * Creates a function that memoizes the result of \u0060func\u0060. If \u0060resolver\u0060 is\r\n * provided, it determines the cache key for storing the result based on the\r\n * arguments provided to the memoized function. By default, the first argument\r\n * provided to the memoized function is used as the map cache key. The \u0060func\u0060\r\n * is invoked with the \u0060this\u0060 binding of the memoized function.\r\n *\r\n * **Note:** The cache is exposed as the \u0060cache\u0060 property on the memoized\r\n * function. Its creation may be customized by replacing the \u0060_.memoize.Cache\u0060\r\n * constructor with one whose instances implement the\r\n * [\u0060Map\u0060](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\r\n * method interface of \u0060delete\u0060, \u0060get\u0060, \u0060has\u0060, and \u0060set\u0060.\r\n *\r\n * @static\r\n * @memberOf _\r\n * @since 0.1.0\r\n * @category Function\r\n * @param {Function} func The function to have its output memoized.\r\n * @param {Function} [resolver] The function to resolve the cache key.\r\n * @returns {Function} Returns the new memoized function.\r\n * @example\r\n *\r\n * var object = { \u0027a\u0027: 1, \u0027b\u0027: 2 };\r\n * var other = { \u0027c\u0027: 3, \u0027d\u0027: 4 };\r\n *\r\n * var values = _.memoize(_.values);\r\n * values(object);\r\n * // =\u003E [1, 2]\r\n *\r\n * values(other);\r\n * // =\u003E [3, 4]\r\n *\r\n * object.a = 2;\r\n * values(object);\r\n * // =\u003E [1, 2]\r\n *\r\n * // Modify the result cache.\r\n * values.cache.set(object, [\u0027a\u0027, \u0027b\u0027]);\r\n * values(object);\r\n * // =\u003E [\u0027a\u0027, \u0027b\u0027]\r\n *\r\n * // Replace \u0060_.memoize.Cache\u0060.\r\n * _.memoize.Cache = WeakMap;\r\n */\r\nfunction memoize(func, resolver) {\r\n if (typeof func != \u0027function\u0027 || (resolver \u0026\u0026 typeof resolver != \u0027function\u0027)) {\r\n throw new TypeError(FUNC_ERROR_TEXT);\r\n }\r\n var memoized = function() {\r\n var args = arguments,\r\n key = resolver ? resolver.apply(this, args) : args[0],\r\n cache = memoized.cache;\r\n\r\n if (cache.has(key)) {\r\n return cache.get(key);\r\n }\r\n var result = func.apply(this, args);\r\n memoized.cache = cache.set(key, result);\r\n return result;\r\n };\r\n memoized.cache = new(memoize.Cache || MapCache);\r\n return memoized;\r\n}\r\n\r\n// Assign cache to \u0060_.memoize\u0060.\r\nmemoize.Cache = MapCache;\r\n\r\n/**\r\n * Performs a\r\n * [\u0060SameValueZero\u0060](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\r\n * comparison between two values to determine if they are equivalent.\r\n *\r\n * @static\r\n * @memberOf _\r\n * @since 4.0.0\r\n * @category Lang\r\n * @param {*} value The value to compare.\r\n * @param {*} other The other value to compare.\r\n * @returns {boolean} Returns \u0060true\u0060 if the values are equivalent, else \u0060false\u0060.\r\n * @example\r\n *\r\n * var object = { \u0027a\u0027: 1 };\r\n * var other = { \u0027a\u0027: 1 };\r\n *\r\n * _.eq(object, object);\r\n * // =\u003E true\r\n *\r\n * _.eq(object, other);\r\n * // =\u003E false\r\n *\r\n * _.eq(\u0027a\u0027, \u0027a\u0027);\r\n * // =\u003E true\r\n *\r\n * _.eq(\u0027a\u0027, Object(\u0027a\u0027));\r\n * // =\u003E false\r\n *\r\n * _.eq(NaN, NaN);\r\n * // =\u003E true\r\n */\r\nfunction eq(value, other) {\r\n return value === other || (value !== value \u0026\u0026 other !== other);\r\n}\r\n\r\n/**\r\n * Checks if \u0060value\u0060 is classified as an \u0060Array\u0060 object.\r\n *\r\n * @static\r\n * @memberOf _\r\n * @since 0.1.0\r\n * @category Lang\r\n * @param {*} value The value to check.\r\n * @returns {boolean} Returns \u0060true\u0060 if \u0060value\u0060 is an array, else \u0060false\u0060.\r\n * @example\r\n *\r\n * _.isArray([1, 2, 3]);\r\n * // =\u003E true\r\n *\r\n * _.isArray(document.body.children);\r\n * // =\u003E false\r\n *\r\n * _.isArray(\u0027abc\u0027);\r\n * // =\u003E false\r\n *\r\n * _.isArray(_.noop);\r\n * // =\u003E false\r\n */\r\nvar isArray = Array.isArray;\r\n\r\n/**\r\n * Checks if \u0060value\u0060 is classified as a \u0060Function\u0060 object.\r\n *\r\n * @static\r\n * @memberOf _\r\n * @since 0.1.0\r\n * @category Lang\r\n * @param {*} value The value to check.\r\n * @returns {boolean} Returns \u0060true\u0060 if \u0060value\u0060 is a function, else \u0060false\u0060.\r\n * @example\r\n *\r\n * _.isFunction(_);\r\n * // =\u003E true\r\n *\r\n * _.isFunction(/abc/);\r\n * // =\u003E false\r\n */\r\nfunction isFunction(value) {\r\n // The use of \u0060Object#toString\u0060 avoids issues with the \u0060typeof\u0060 operator\r\n // in Safari 8-9 which returns \u0027object\u0027 for typed array and other constructors.\r\n var tag = isObject(value) ? objectToString.call(value) : \u0027\u0027;\r\n return tag == funcTag || tag == genTag;\r\n}\r\n\r\n/**\r\n * Checks if \u0060value\u0060 is the\r\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\r\n * of \u0060Object\u0060. (e.g. arrays, functions, objects, regexes, \u0060new Number(0)\u0060, and \u0060new String(\u0027\u0027)\u0060)\r\n *\r\n * @static\r\n * @memberOf _\r\n * @since 0.1.0\r\n * @category Lang\r\n * @param {*} value The value to check.\r\n * @returns {boolean} Returns \u0060true\u0060 if \u0060value\u0060 is an object, else \u0060false\u0060.\r\n * @example\r\n *\r\n * _.isObject({});\r\n * // =\u003E true\r\n *\r\n * _.isObject([1, 2, 3]);\r\n * // =\u003E true\r\n *\r\n * _.isObject(_.noop);\r\n * // =\u003E true\r\n *\r\n * _.isObject(null);\r\n * // =\u003E false\r\n */\r\nfunction isObject(value) {\r\n var type = typeof value;\r\n return !!value \u0026\u0026 (type == \u0027object\u0027 || type == \u0027function\u0027);\r\n}\r\n\r\n/**\r\n * Checks if \u0060value\u0060 is object-like. A value is object-like if it\u0027s not \u0060null\u0060\r\n * and has a \u0060typeof\u0060 result of \u0022object\u0022.\r\n *\r\n * @static\r\n * @memberOf _\r\n * @since 4.0.0\r\n * @category Lang\r\n * @param {*} value The value to check.\r\n * @returns {boolean} Returns \u0060true\u0060 if \u0060value\u0060 is object-like, else \u0060false\u0060.\r\n * @example\r\n *\r\n * _.isObjectLike({});\r\n * // =\u003E true\r\n *\r\n * _.isObjectLike([1, 2, 3]);\r\n * // =\u003E true\r\n *\r\n * _.isObjectLike(_.noop);\r\n * // =\u003E false\r\n *\r\n * _.isObjectLike(null);\r\n * // =\u003E false\r\n */\r\nfunction isObjectLike(value) {\r\n return !!value \u0026\u0026 typeof value == \u0027object\u0027;\r\n}\r\n\r\n/**\r\n * Checks if \u0060value\u0060 is classified as a \u0060Symbol\u0060 primitive or object.\r\n *\r\n * @static\r\n * @memberOf _\r\n * @since 4.0.0\r\n * @category Lang\r\n * @param {*} value The value to check.\r\n * @returns {boolean} Returns \u0060true\u0060 if \u0060value\u0060 is a symbol, else \u0060false\u0060.\r\n * @example\r\n *\r\n * _.isSymbol(Symbol.iterator);\r\n * // =\u003E true\r\n *\r\n * _.isSymbol(\u0027abc\u0027);\r\n * // =\u003E false\r\n */\r\nfunction isSymbol(value) {\r\n return typeof value == \u0027symbol\u0027 ||\r\n (isObjectLike(value) \u0026\u0026 objectToString.call(value) == symbolTag);\r\n}\r\n\r\n/**\r\n * Converts \u0060value\u0060 to a string. An empty string is returned for \u0060null\u0060\r\n * and \u0060undefined\u0060 values. The sign of \u0060-0\u0060 is preserved.\r\n *\r\n * @static\r\n * @memberOf _\r\n * @since 4.0.0\r\n * @category Lang\r\n * @param {*} value The value to process.\r\n * @returns {string} Returns the string.\r\n * @example\r\n *\r\n * _.toString(null);\r\n * // =\u003E \u0027\u0027\r\n *\r\n * _.toString(-0);\r\n * // =\u003E \u0027-0\u0027\r\n *\r\n * _.toString([1, 2, 3]);\r\n * // =\u003E \u00271,2,3\u0027\r\n */\r\nfunction toString(value) {\r\n return value == null ? \u0027\u0027 : baseToString(value);\r\n}\r\n\r\n/**\r\n * Gets the value at \u0060path\u0060 of \u0060object\u0060. If the resolved value is\r\n * \u0060undefined\u0060, the \u0060defaultValue\u0060 is returned in its place.\r\n *\r\n * @static\r\n * @memberOf _\r\n * @since 3.7.0\r\n * @category Object\r\n * @param {Object} object The object to query.\r\n * @param {Array|string} path The path of the property to get.\r\n * @param {*} [defaultValue] The value returned for \u0060undefined\u0060 resolved values.\r\n * @returns {*} Returns the resolved value.\r\n * @example\r\n *\r\n * var object = { \u0027a\u0027: [{ \u0027b\u0027: { \u0027c\u0027: 3 } }] };\r\n *\r\n * _.get(object, \u0027a[0].b.c\u0027);\r\n * // =\u003E 3\r\n *\r\n * _.get(object, [\u0027a\u0027, \u00270\u0027, \u0027b\u0027, \u0027c\u0027]);\r\n * // =\u003E 3\r\n *\r\n * _.get(object, \u0027a.b.c\u0027, \u0027default\u0027);\r\n * // =\u003E \u0027default\u0027\r\n */\r\nfunction get(object, path, defaultValue) {\r\n var result = object == null ? undefined : baseGet(object, path);\r\n return result === undefined ? defaultValue : result;\r\n}\r\n\r\nvar a = {\r\n b: {\r\n c: 1\r\n }\r\n}","TestCases":[{"Name":"nativ","Code":"const x = a.b.c","IsDeferred":false},{"Name":"lodash","Code":"const x = _.get(\u0027a.b.c\u0027)","IsDeferred":false}]}